前提・実現したいこと
スクリプト内のみで左右を判定し、左にいる敵のみ画像を右向きにしたい。
元となるprefabは一種類しかない。
元のprefabを右向きと左向きの二種類にすることで解決はしていますが、数行のコードで楽に書けるならそっちのほうが面白なと思ったので質問しました。
該当のソースコード
C#
1public class EnemySpawn : MonoBehaviour 2{ 3 public GameObject prefab; 4 5 //時間間隔の最小値 6 public float minTime; 7 //時間間隔の最大値 8 public float maxTime; 9 //敵生成間隔 10 private float interval; 11 //経過時間 12 private float time; 13 14 void Start() 15 { 16 //時間間隔を決定する 17 interval = GetRandomTime(); 18 } 19 20 void Update() 21 { 22 23 //時間計測 24 time += Time.deltaTime; 25 26 if (time > interval) 27 { 28 GameObject enemyRight = Instantiate(prefab); 29 GameObject enemyLeft = Instantiate(prefab); 30 //出現位置をランダム化 31 enemyRight.transform.position = new Vector2(Random.Range(11f, 15f),0f); 32 enemyLeft.transform.position = new Vector2(Random.Range(-11f,-15f),0f); 33 //経過時間を初期化して再度時間計測を始める 34 time = 0f; 35 //次に発生する時間間隔を決定する 36 interval = GetRandomTime(); 37 } 38 } 39 40 private float GetRandomTime() 41 { 42 return Random.Range(minTime, maxTime); 43 } 44}
試したこと
座標で0よりマイナスにいる場合、ローカルスケールを変更して右向きにしましたが
元のprefabが一つだけなので 右でスポーンする敵も右向きになる ので 意味はありませんでした。
private void FixedUpdate() { if (prefab.transform.position.x > 0) { prefab.transform.localScale = new Vector2(-0.5f, 1f); } }
補足情報
元のprefabを右向きと左向きの二種類にすることで解決はしていますが、数行のコードで楽に書けるならそっちのほうが面白なと思ったので質問しました。
↓解決したコード
public GameObject rPrefab; public GameObject lPrefab; if (time > interval) { GameObject enemyRight = Instantiate(rPrefab); GameObject enemyLeft = Instantiate(lPrefab); //出現位置をランダム化 enemyRight.transform.position = new Vector2(Random.Range(11f, 15f),0f); enemyLeft.transform.position = new Vector2(Random.Range(-11f,-15f),0f); }
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/05 20:13
2020/07/06 07:22
2020/07/06 20:02