teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

4

Cam_1のスクリプトを更新しました!

2020/08/27 08:28

投稿

Kirby2318
Kirby2318

スコア69

title CHANGED
File without changes
body CHANGED
@@ -1,4 +1,6 @@
1
+ ```ここに言語を入力
2
+ コード
1
- ~~今unityのカメラの扱いで様々な移動方法について、勉強しているときに。昔のゲームでAtari2600にH.E.R.Oというゲームがあったのですが、あのようにプレイヤーがカメラ外から移動したら、カメラを移動するプログラムを作成しました。
3
+ ```~~今unityのカメラの扱いで様々な移動方法について、勉強しているときに。昔のゲームでAtari2600にH.E.R.Oというゲームがあったのですが、あのようにプレイヤーがカメラ外から移動したら、カメラを移動するプログラムを作成しました。
2
4
  以下がそのコードです。~~
3
5
  ```
4
6
  using System.Collections;
@@ -65,33 +67,50 @@
65
67
  public class Cam_1 : MonoBehaviour
66
68
  {
67
69
 
68
- public Renderer targetRenderer; // 判定したいオブジェクトのrendererへの参照
70
+ public SpriteRenderer targetRenderer; // 判定したいオブジェクトのrendererへの参照
69
71
  float x = 1;
70
-
71
- private void Start()
72
+
72
- {
73
- targetRenderer = GetComponent<Renderer>();
74
- }
75
73
  void Update()
76
74
  {
77
75
 
78
76
 
79
77
  if (targetRenderer.isVisible)
80
78
  {
81
-
79
+
82
80
  Debug.Log("画面に表示されてるよ");
83
81
  }
84
- else
82
+ else
85
83
  {
86
- Camera.main.transform.position += new Vector3(-18f, transform.position.y, transform.position.z);
87
84
 
85
+ Invoke("CameraInvoke", 5f);
88
86
  Debug.Log("画面から消えたよ");
89
87
 
90
88
 
91
89
  }
92
90
 
93
91
  }
92
+ public void CameraInvoke()
93
+ {
94
+ Camera.main.transform.position += new Vector3(-18f, 0, 0);
95
+ }
96
+
97
+
94
98
  }
99
+
95
100
  ```
96
101
  毎回変に思っていたのが、プレイヤーのオブジェクトがスタート時にデバックログで一度消えたと表示された後に、画面に表示されるみたいです。もしかしたら、その一回の感知だけでカメラが連続的に移動する原因となっているみたいです。
102
+
103
+
104
+ 改善を試みた結果。。。以下のスクリプトで以下の問題が発覚しました。![![イメージ説明](88a038c31d353495ad0386dbbf356e35.png)
105
+ 肉眼では支障のないレベルですが、ゲーム開始時の2フレームの間にスプライトが表示されていないことがわかりました。
106
+ 以下のことを試したけど、毎回同じ問題が発生します。
107
+ ①カメラ判定を利用したほかの関数を利用した。
108
+ ➁オブジェクトを再配置
109
+
110
+ 以上のことを試したのですが、変化がないことからもしかしたらUnityの仕様かもしれません。お気づきかもしれませんが、問題を確認するために以下のプログラムを専用メソッドに入れ、Invokeを利用して呼び出しています。そうすると、カメラが指定した時間に-36Fの位置にいることがわかりました。つまり、最初の2フレームを判定してプログラムが実行されたのが原因だと考えられます。
111
+
112
+ ```
97
- 現状で改Camera.main.transform.position += new Vector3(-18f, transform.position.y, transform.position.z);きないか試してみます。
113
+ Camera.main.transform.position += new Vector3(-18f, 0, 0);//最初の2フレーム二回も実行された?
114
+
115
+ ```
116
+ どうすればいいのかわかりません。

3

タイトル

2020/08/27 08:28

投稿

Kirby2318
Kirby2318

スコア69

title CHANGED
@@ -1,1 +1,1 @@
1
- unityオブジェクトがカメラ内にいる判定をしてくれない。
1
+ unityカメラの連続判定問題
body CHANGED
@@ -51,4 +51,47 @@
51
51
  }
52
52
  }
53
53
 
54
- ```
54
+ ```
55
+
56
+
57
+
58
+ いろいろと試行錯誤を加えた結果、様々な関数を試しても、同じ挙動になることがわかりました。なお今は、以下のプログラムを組んである状態です。
59
+ ```ここに言語を入力
60
+ using System.Collections;
61
+ using System.Collections.Generic;
62
+ using UnityEngine;
63
+ using UnityEngine.UI;
64
+
65
+ public class Cam_1 : MonoBehaviour
66
+ {
67
+
68
+ public Renderer targetRenderer; // 判定したいオブジェクトのrendererへの参照
69
+ float x = 1;
70
+
71
+ private void Start()
72
+ {
73
+ targetRenderer = GetComponent<Renderer>();
74
+ }
75
+ void Update()
76
+ {
77
+
78
+
79
+ if (targetRenderer.isVisible)
80
+ {
81
+
82
+ Debug.Log("画面に表示されてるよ");
83
+ }
84
+ else
85
+ {
86
+ Camera.main.transform.position += new Vector3(-18f, transform.position.y, transform.position.z);
87
+
88
+ Debug.Log("画面から消えたよ");
89
+
90
+
91
+ }
92
+
93
+ }
94
+ }
95
+ ```
96
+ 毎回変に思っていたのが、プレイヤーのオブジェクトがスタート時にデバックログで一度消えたと表示された後に、画面に表示されるみたいです。もしかしたら、その一回の感知だけでカメラが連続的に移動する原因となっているみたいです。
97
+ 現状で改Camera.main.transform.position += new Vector3(-18f, transform.position.y, transform.position.z);善できないか試してみます。

2

コードを更新しました

2020/08/27 06:57

投稿

Kirby2318
Kirby2318

スコア69

title CHANGED
@@ -1,1 +1,1 @@
1
- unity SpriteRendererを利用した、カメラの移動を実行するときレンダー対象がゲーム開始時選択されない問題
1
+ unityオブジェクトがカメラいるのに判定をしてくれない
body CHANGED
@@ -1,5 +1,5 @@
1
- 今unityのカメラの扱いで様々な移動方法について、勉強しているときに。昔のゲームでAtari2600にH.E.R.Oというゲームがあったのですが、あのようにプレイヤーがカメラ外から移動したら、カメラを移動するプログラムを作成しました。
1
+ ~~今unityのカメラの扱いで様々な移動方法について、勉強しているときに。昔のゲームでAtari2600にH.E.R.Oというゲームがあったのですが、あのようにプレイヤーがカメラ外から移動したら、カメラを移動するプログラムを作成しました。
2
- 以下がそのコードです。
2
+ 以下がそのコードです。~~
3
3
  ```
4
4
  using System.Collections;
5
5
  using System.Collections.Generic;
@@ -28,4 +28,27 @@
28
28
  There is no 'SpriteRenderer' attached to the "MainCamera" game object, but a script is trying to access it.
29
29
  You probably need to add a SpriteRenderer to the game object "MainCamera". Or your script needs to check if the component is attached before using it.
30
30
 
31
- 対象のレンダーがアタッチされていないとのことなので、ああ。なぁんだ。と思い、プレイヤーオブジェクトをカメラのスクリプトの欄にアタッチしても、変わりません。あれ?と思い、アタッチしているか再確認したら、ゲームを開始するとなしになってアタッチされていないと表示されることがわかったのです。プログラム自体にミスがあるのか確認するために、ゲーム起動中にアタッチすると、カメラがレンダーの対象を認識してくれて、プレイヤーが画面外に移動すると、しっかりとカメラが指定した座標を毎回移動してくれます。ただ、開始時にはこれが実現できません。これを何とかする方法がないのか、調べても全く分かりません。スクリプトから、アタッチする方法があるのかないのか、そもそも他の方法があるのかわかる方がいましたら教えてください。
31
+ ~~対象のレンダーがアタッチされていないとのことなので、ああ。なぁんだ。と思い、プレイヤーオブジェクトをカメラのスクリプトの欄にアタッチしても、変わりません。あれ?と思い、アタッチしているか再確認したら、ゲームを開始するとなしになってアタッチされていないと表示されることがわかったのです。プログラム自体にミスがあるのか確認するために、ゲーム起動中にアタッチすると、カメラがレンダーの対象を認識してくれて、プレイヤーが画面外に移動すると、しっかりとカメラが指定した座標を毎回移動してくれます。ただ、開始時にはこれが実現できません。これを何とかする方法がないのか、調べても全く分かりません。スクリプトから、アタッチする方法があるのかないのか、そもそも他の方法があるのかわかる方がいましたら教えてください。~~
32
+
33
+ 今修正したところ、以下のようなコードになり。画面にオブジェクトがいるのにもかかわらず、アップデートがずっとこのメソッドを呼び出し、カメラが変数の最大値の座標まで移動してしまいます。
34
+ ```
35
+ using JetBrains.Annotations;
36
+ using System.Collections;
37
+ using System.Collections.Generic;
38
+ using UnityEngine;
39
+
40
+
41
+ public class Camera : MonoBehaviour
42
+ {
43
+ public SpriteRenderer player ;
44
+
45
+ void Update()
46
+ {
47
+ if (!player.isVisible)
48
+ {
49
+ transform.position += new Vector3(-18f, 0,transform.position.z);
50
+ }
51
+ }
52
+ }
53
+
54
+ ```

1

unity初心者マークONにしました

2020/08/24 10:06

投稿

Kirby2318
Kirby2318

スコア69

title CHANGED
File without changes
body CHANGED
@@ -28,4 +28,4 @@
28
28
  There is no 'SpriteRenderer' attached to the "MainCamera" game object, but a script is trying to access it.
29
29
  You probably need to add a SpriteRenderer to the game object "MainCamera". Or your script needs to check if the component is attached before using it.
30
30
 
31
- 対象のレンダーがアタッチされていないとのことなので、ああ。なぁんだ。と思い、プレイヤーオブジェクトをカメラのスクリプトの欄にアタッチしても、変わりません。あれ?と思い、アタッチしているか再確認したら、ゲームを開始するとなしになってアタッチされていないと表示されることがわかったのです。プログラム自体にミスがあるのか確認するために、ゲーム起動中にアタッチすると、カメラがレンダーの対象を認識してくれて、プレイヤーが画面外に移動すると、しっかりとカメラが指定した座標を毎回移動してくれます。ただ、開始時にはこれが実現できません。これを何とかする方法がないのか、調べても全く分かりません。スクリプトから、アタッチする方法があるのかないのか、そもそもほかの方法があるのかわかる方がいましたら教えてください。
31
+ 対象のレンダーがアタッチされていないとのことなので、ああ。なぁんだ。と思い、プレイヤーオブジェクトをカメラのスクリプトの欄にアタッチしても、変わりません。あれ?と思い、アタッチしているか再確認したら、ゲームを開始するとなしになってアタッチされていないと表示されることがわかったのです。プログラム自体にミスがあるのか確認するために、ゲーム起動中にアタッチすると、カメラがレンダーの対象を認識してくれて、プレイヤーが画面外に移動すると、しっかりとカメラが指定した座標を毎回移動してくれます。ただ、開始時にはこれが実現できません。これを何とかする方法がないのか、調べても全く分かりません。スクリプトから、アタッチする方法があるのかないのか、そもそもの方法があるのかわかる方がいましたら教えてください。