質問編集履歴

4

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

2020/08/27 08:28

投稿

Kirby2318
Kirby2318

スコア69

test CHANGED
File without changes
test CHANGED
@@ -1,4 +1,8 @@
1
+ ```ここに言語を入力
2
+
3
+ コード
4
+
1
- ~~今unityのカメラの扱いで様々な移動方法について、勉強しているときに。昔のゲームでAtari2600にH.E.R.Oというゲームがあったのですが、あのようにプレイヤーがカメラ外から移動したら、カメラを移動するプログラムを作成しました。
5
+ ```~~今unityのカメラの扱いで様々な移動方法について、勉強しているときに。昔のゲームでAtari2600にH.E.R.Oというゲームがあったのですが、あのようにプレイヤーがカメラ外から移動したら、カメラを移動するプログラムを作成しました。
2
6
 
3
7
  以下がそのコードです。~~
4
8
 
@@ -132,19 +136,11 @@
132
136
 
133
137
 
134
138
 
135
- public Renderer targetRenderer; // 判定したいオブジェクトのrendererへの参照
139
+ public SpriteRenderer targetRenderer; // 判定したいオブジェクトのrendererへの参照
136
140
 
137
141
  float x = 1;
138
142
 
139
-
140
-
141
- private void Start()
143
+
142
-
143
- {
144
-
145
- targetRenderer = GetComponent<Renderer>();
146
-
147
- }
148
144
 
149
145
  void Update()
150
146
 
@@ -158,19 +154,19 @@
158
154
 
159
155
  {
160
156
 
161
-
157
+
162
158
 
163
159
  Debug.Log("画面に表示されてるよ");
164
160
 
165
161
  }
166
162
 
167
- else
163
+ else
168
164
 
169
165
  {
170
166
 
167
+
168
+
171
- Camera.main.transform.position += new Vector3(-18f, transform.position.y, transform.position.z);
169
+ Invoke("CameraInvoke", 5f);
172
-
173
-
174
170
 
175
171
  Debug.Log("画面から消えたよ");
176
172
 
@@ -184,10 +180,52 @@
184
180
 
185
181
  }
186
182
 
183
+ public void CameraInvoke()
184
+
185
+ {
186
+
187
+ Camera.main.transform.position += new Vector3(-18f, 0, 0);
188
+
189
+ }
190
+
191
+
192
+
193
+
194
+
187
195
  }
188
196
 
197
+
198
+
189
199
  ```
190
200
 
191
201
  毎回変に思っていたのが、プレイヤーのオブジェクトがスタート時にデバックログで一度消えたと表示された後に、画面に表示されるみたいです。もしかしたら、その一回の感知だけでカメラが連続的に移動する原因となっているみたいです。
192
202
 
203
+
204
+
205
+
206
+
207
+ 改善を試みた結果。。。以下のスクリプトで以下の問題が発覚しました。![![イメージ説明](88a038c31d353495ad0386dbbf356e35.png)
208
+
209
+ 肉眼では支障のないレベルですが、ゲーム開始時の2フレームの間にスプライトが表示されていないことがわかりました。
210
+
211
+ 以下のことを試したけど、毎回同じ問題が発生します。
212
+
213
+ ①カメラ判定を利用したほかの関数を利用した。
214
+
215
+ ➁オブジェクトを再配置
216
+
217
+
218
+
219
+ 以上のことを試したのですが、変化がないことからもしかしたらUnityの仕様かもしれません。お気づきかもしれませんが、問題を確認するために以下のプログラムを専用メソッドに入れ、Invokeを利用して呼び出しています。そうすると、カメラが指定した時間に-36Fの位置にいることがわかりました。つまり、最初の2フレームを判定してプログラムが実行されたのが原因だと考えられます。
220
+
221
+
222
+
223
+ ```
224
+
193
- 現状で改Camera.main.transform.position += new Vector3(-18f, transform.position.y, transform.position.z);きないか試してみます。
225
+ Camera.main.transform.position += new Vector3(-18f, 0, 0);//最初の2フレーム二回も実行された?
226
+
227
+
228
+
229
+ ```
230
+
231
+ どうすればいいのかわかりません。

3

タイトル

2020/08/27 08:28

投稿

Kirby2318
Kirby2318

スコア69

test CHANGED
@@ -1 +1 @@
1
- unityオブジェクトがカメラ内にいる判定をしてくれない。
1
+ unityカメラの連続判定問題
test CHANGED
@@ -105,3 +105,89 @@
105
105
 
106
106
 
107
107
  ```
108
+
109
+
110
+
111
+
112
+
113
+
114
+
115
+ いろいろと試行錯誤を加えた結果、様々な関数を試しても、同じ挙動になることがわかりました。なお今は、以下のプログラムを組んである状態です。
116
+
117
+ ```ここに言語を入力
118
+
119
+ using System.Collections;
120
+
121
+ using System.Collections.Generic;
122
+
123
+ using UnityEngine;
124
+
125
+ using UnityEngine.UI;
126
+
127
+
128
+
129
+ public class Cam_1 : MonoBehaviour
130
+
131
+ {
132
+
133
+
134
+
135
+ public Renderer targetRenderer; // 判定したいオブジェクトのrendererへの参照
136
+
137
+ float x = 1;
138
+
139
+
140
+
141
+ private void Start()
142
+
143
+ {
144
+
145
+ targetRenderer = GetComponent<Renderer>();
146
+
147
+ }
148
+
149
+ void Update()
150
+
151
+ {
152
+
153
+
154
+
155
+
156
+
157
+ if (targetRenderer.isVisible)
158
+
159
+ {
160
+
161
+
162
+
163
+ Debug.Log("画面に表示されてるよ");
164
+
165
+ }
166
+
167
+ else
168
+
169
+ {
170
+
171
+ Camera.main.transform.position += new Vector3(-18f, transform.position.y, transform.position.z);
172
+
173
+
174
+
175
+ Debug.Log("画面から消えたよ");
176
+
177
+
178
+
179
+
180
+
181
+ }
182
+
183
+
184
+
185
+ }
186
+
187
+ }
188
+
189
+ ```
190
+
191
+ 毎回変に思っていたのが、プレイヤーのオブジェクトがスタート時にデバックログで一度消えたと表示された後に、画面に表示されるみたいです。もしかしたら、その一回の感知だけでカメラが連続的に移動する原因となっているみたいです。
192
+
193
+ 現状で改Camera.main.transform.position += new Vector3(-18f, transform.position.y, transform.position.z);善できないか試してみます。

2

コードを更新しました

2020/08/27 06:57

投稿

Kirby2318
Kirby2318

スコア69

test CHANGED
@@ -1 +1 @@
1
- unity SpriteRendererを利用した、カメラの移動を実行すときにレンダー対象がゲーム開始時選択されない問題
1
+ unityオブジェクトがカメラ内にいるのに判定をしてくれない
test CHANGED
@@ -1,6 +1,6 @@
1
- 今unityのカメラの扱いで様々な移動方法について、勉強しているときに。昔のゲームでAtari2600にH.E.R.Oというゲームがあったのですが、あのようにプレイヤーがカメラ外から移動したら、カメラを移動するプログラムを作成しました。
1
+ ~~今unityのカメラの扱いで様々な移動方法について、勉強しているときに。昔のゲームでAtari2600にH.E.R.Oというゲームがあったのですが、あのようにプレイヤーがカメラ外から移動したら、カメラを移動するプログラムを作成しました。
2
2
 
3
- 以下がそのコードです。
3
+ 以下がそのコードです。~~
4
4
 
5
5
  ```
6
6
 
@@ -58,4 +58,50 @@
58
58
 
59
59
 
60
60
 
61
- 対象のレンダーがアタッチされていないとのことなので、ああ。なぁんだ。と思い、プレイヤーオブジェクトをカメラのスクリプトの欄にアタッチしても、変わりません。あれ?と思い、アタッチしているか再確認したら、ゲームを開始するとなしになってアタッチされていないと表示されることがわかったのです。プログラム自体にミスがあるのか確認するために、ゲーム起動中にアタッチすると、カメラがレンダーの対象を認識してくれて、プレイヤーが画面外に移動すると、しっかりとカメラが指定した座標を毎回移動してくれます。ただ、開始時にはこれが実現できません。これを何とかする方法がないのか、調べても全く分かりません。スクリプトから、アタッチする方法があるのかないのか、そもそも他の方法があるのかわかる方がいましたら教えてください。
61
+ ~~対象のレンダーがアタッチされていないとのことなので、ああ。なぁんだ。と思い、プレイヤーオブジェクトをカメラのスクリプトの欄にアタッチしても、変わりません。あれ?と思い、アタッチしているか再確認したら、ゲームを開始するとなしになってアタッチされていないと表示されることがわかったのです。プログラム自体にミスがあるのか確認するために、ゲーム起動中にアタッチすると、カメラがレンダーの対象を認識してくれて、プレイヤーが画面外に移動すると、しっかりとカメラが指定した座標を毎回移動してくれます。ただ、開始時にはこれが実現できません。これを何とかする方法がないのか、調べても全く分かりません。スクリプトから、アタッチする方法があるのかないのか、そもそも他の方法があるのかわかる方がいましたら教えてください。~~
62
+
63
+
64
+
65
+ 今修正したところ、以下のようなコードになり。画面にオブジェクトがいるのにもかかわらず、アップデートがずっとこのメソッドを呼び出し、カメラが変数の最大値の座標まで移動してしまいます。
66
+
67
+ ```
68
+
69
+ using JetBrains.Annotations;
70
+
71
+ using System.Collections;
72
+
73
+ using System.Collections.Generic;
74
+
75
+ using UnityEngine;
76
+
77
+
78
+
79
+
80
+
81
+ public class Camera : MonoBehaviour
82
+
83
+ {
84
+
85
+ public SpriteRenderer player ;
86
+
87
+
88
+
89
+ void Update()
90
+
91
+ {
92
+
93
+ if (!player.isVisible)
94
+
95
+ {
96
+
97
+ transform.position += new Vector3(-18f, 0,transform.position.z);
98
+
99
+ }
100
+
101
+ }
102
+
103
+ }
104
+
105
+
106
+
107
+ ```

1

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

2020/08/24 10:06

投稿

Kirby2318
Kirby2318

スコア69

test CHANGED
File without changes
test CHANGED
@@ -58,4 +58,4 @@
58
58
 
59
59
 
60
60
 
61
- 対象のレンダーがアタッチされていないとのことなので、ああ。なぁんだ。と思い、プレイヤーオブジェクトをカメラのスクリプトの欄にアタッチしても、変わりません。あれ?と思い、アタッチしているか再確認したら、ゲームを開始するとなしになってアタッチされていないと表示されることがわかったのです。プログラム自体にミスがあるのか確認するために、ゲーム起動中にアタッチすると、カメラがレンダーの対象を認識してくれて、プレイヤーが画面外に移動すると、しっかりとカメラが指定した座標を毎回移動してくれます。ただ、開始時にはこれが実現できません。これを何とかする方法がないのか、調べても全く分かりません。スクリプトから、アタッチする方法があるのかないのか、そもそもほかの方法があるのかわかる方がいましたら教えてください。
61
+ 対象のレンダーがアタッチされていないとのことなので、ああ。なぁんだ。と思い、プレイヤーオブジェクトをカメラのスクリプトの欄にアタッチしても、変わりません。あれ?と思い、アタッチしているか再確認したら、ゲームを開始するとなしになってアタッチされていないと表示されることがわかったのです。プログラム自体にミスがあるのか確認するために、ゲーム起動中にアタッチすると、カメラがレンダーの対象を認識してくれて、プレイヤーが画面外に移動すると、しっかりとカメラが指定した座標を毎回移動してくれます。ただ、開始時にはこれが実現できません。これを何とかする方法がないのか、調べても全く分かりません。スクリプトから、アタッチする方法があるのかないのか、そもそもの方法があるのかわかる方がいましたら教えてください。