Unity2Dにてアクションゲームを制作中です(何度も見てくださっている人がいるかも…)。
乱数とRaycast2Dを用いて、範囲内のGroundTagを持つTile上にアイテムを生成するというスクリプトを書きたいのですが、このままだとTilemapのpositionが(0, 0, 0)なので、取りたくても取れない位置(Tileの中や、取れてもそのまま落下してしまう場所など)に生成されるという現象が少なからず起きてしまいます。
tPos.xから最も近いTileの座標を取得して、その上辺に生成するという処理を行うにはどうすればよいでしょうか?
c#
1Item.cs 2 3 /* public変数 */ 4 public float stageLeft, stageRight, stageHeight, distance; 5 6 /* private変数 */ 7 [SerializeField] GameObject itemPref = null; 8 GameObject itemInstance; 9 RaycastHit2D hit; 10 Vector3 tPos; 11 int layerMask = 1 << 8; 12 13 void Start() 14 { 15 int count = 0; 16 17 //10個アイテムを生成したら終わり 18 while (count < 10) 19 { 20 //Rayのorigin.xを指定範囲内の乱数で設定 21 tPos = new Vector3(Random.Range(stageLeft, stageRight), stageHeight, -3.0f); 22 hit = Physics2D.Raycast(tPos, Vector2.down, distance, layerMask); 23 Debug.DrawLine(tPos, new Vector3(tPos.x, tPos.y - distance, tPos.z), Color.red, 5); 24 Debug.Log(hit.collider); 25 if (hit) 26 { 27 itemInstance = Instantiate(itemPref) as GameObject; 28 itemInstance.name = itemPref.name; 29 itemInstance.transform.position = new Vector3(tPos.x, hit.collider.transform.position.y, -3.0f); 30 31 count++; 32 } 33 else 34 { 35 continue; 36 } 37 } 38 }
あなたの回答
tips
プレビュー