今、Agar.io×スプラトゥーンみたいな2Dゲームを開発しています。ゲームを開始するとランダムにプレイヤーの色が変更され、変更されたプレイヤーの色と同じ色に弾の色を変更し、プレイヤーが発射した弾が2Dサークルコライダーを離れると弾が消去され、消去された座標に同じ色のタイルが生成されるプログラムを書きました。
次は、弾が2Dサークルコライダーを離れてもタイルのコライダーに接触していれば消去されないようにしたいです。自分でコードを書いてみたのですが、上手くできません。なので、タイルと弾のコライダーの当たり判定をMoveスクリプトで取得するか、その他で出来る方法があれば教えてください。
長文ですみません。
Move
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class Move : MonoBehaviour 6{ 7 public GameObject Bullet; 8 public GameObject Tile; 9 public float Speed; 10 public float ShotSpeed; 11 private ColorRandom colorComp; 12 13 //追加 14 void Start() 15 { 16 //MoveとColorRandomは同じオブジェクトに付いていることを前提としています 17 colorComp = GetComponent<ColorRandom>(); 18 } 19 20 void Update() 21 { 22 //マウスの位置に移動 23 Vector3 Target = Camera.main.ScreenToWorldPoint(Input.mousePosition); 24 Target.z = transform.position.z; 25 26 transform.position = Vector2.MoveTowards(transform.position, Target, Speed * Time.deltaTime); 27 28 //マウスの方向を向く 29 var pos = Camera.main.WorldToScreenPoint(transform.localPosition); 30 var rotation = Quaternion.LookRotation(Vector3.forward, Input.mousePosition - pos); 31 transform.localRotation = rotation; 32 33 34 if (Input.GetMouseButtonDown(0)) 35 { 36 // 弾(ゲームオブジェクト)の生成 37 GameObject clone = Instantiate(Bullet, transform.position, Quaternion.identity); 38 39 // 色反映 40 clone.GetComponent<Renderer>().material.color = colorComp.playerColor; 41 42 // クリックした座標の取得(スクリーン座標からワールド座標に変換) 43 Vector3 mouseWorldPos = Camera.main.ScreenToWorldPoint(Input.mousePosition); 44 45 // 向きの生成(Z成分の除去と正規化) 46 Vector3 shotForward = Vector3.Scale((mouseWorldPos - transform.position), new Vector3(1, 1, 0)).normalized; 47 48 // 弾に速度を与える 49 clone.GetComponent<Rigidbody2D>().velocity = shotForward * ShotSpeed; 50 } 51 } 52 //弾(ball)がColliderから離れた時の処理 53 void OnTriggerExit2D(Collider2D col) 54 { 55 56 if (col.gameObject.tag == "PaintBullet") 57 { 58 59 GameObject[] Bullets = GameObject.FindGameObjectsWithTag("PaintBullet"); 60 foreach (GameObject Bullet in Bullets) 61 { 62 GameObject Tileclone = Instantiate(Tile, Bullet.transform.position, Quaternion.identity); 63 Tileclone.GetComponent<Renderer>().material.color = colorComp.playerColor; 64 Destroy(Bullet); 65 } 66 67 } 68 } 69}
ColorRandom
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class ColorRandom : MonoBehaviour 6{ 7 private Renderer rend; 8 public Color playerColor; //追加 9 10 private void Start() 11 { 12 rend = GetComponent<Renderer>(); 13 playerColor = new Color(Random.value, Random.value, Random.value, 1.0f); 14 rend.material.color = playerColor; 15 16 } 17} 18
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/12 13:23 編集
2019/12/13 00:49
2019/12/13 07:52
2019/12/13 08:08 編集
2019/12/13 13:00
2019/12/13 13:27
2019/12/14 01:09
2019/12/14 02:02
2019/12/14 07:37