1、アクションゲームで敵を攻撃する際に武器にコリジョンを入れると思いますがその時にどこで敵を倒した時の削除コードDestroy()コードを書けばいいか知りたいです。
2、プレイヤーと敵とのスクリプトと変数の情報を行ったり着たりする関係をどう行えば綺麗にわかりやすくできるのか知りたい。
現状 武器スクリプトをプレイヤーの攻撃管理スクリプトと仮定しているスクリプトファイルに伝えて攻撃中だったら消すことを武器スクリプトに伝えるという回りくどいやりかたになってしまっているのですがこの辺の処理はどうやるのが一般的というかベターなのでしょうか?
※提示コードは暫定であり正しく動いていません。
/*プレイヤーの武器にアタッチする プレイヤーの子の武器オブジェクトにアタッチしているスクリプト*/ public class Weapon : MonoBehaviour { public bool IsAttack//当たったかどうかを攻撃管理スクリプトに通知するプロパティ { get{return isAttack; } set {isAttack = value; } } private bool isAttack; GameObject player; Attack at; // Start is called before the first frame update void Start() { isAttack = false; player = GameObject.Find("Knight"); at = player.GetComponent<Attack>(); } // Update is called once per frame void Update() { Debug.Log(at.IsAttack); } private void OnTriggerEnter(Collider other) { if(other.tag == "Enemy") { isAttack = true; //Debug.Log("Hit !!!"); }else{ isAttack = false; } // Destroy(other); if (at.IsAttack == true) { // Destroy(other.gameObject); at.reObject = other.gameObject; } } }
/*プレイヤーにアタッチしている攻撃管理スクリプト */ public class Attack : MonoBehaviour { public bool IsAttack//当たったかどうかを外部に伝える。 { get{return isAttack;} set{isAttack = value;} } private GameObject g; public GameObject reObject { set{g = value;} } private bool isAttack; private Animator ani; private Animation anition; Weapon wp; GameObject gb; // Start is called before the first frame update void Start() { isAttack = false; g = null; ani = GetComponent<Animator>(); gb = GameObject.Find("Sword"); wp = GetComponent<Weapon>(); } // Update is called once per frame void Update() { if(Input.GetMouseButtonDown(0) == true ) { //isAttack = true; ani.SetTrigger("Attack"); } if(ani.GetCurrentAnimatorStateInfo(0).IsName("Attack") == true) { Debug.Log("ダメージ!!!"); isAttack = true; }else{ isAttack = false; } if(g != null) { Destroy(g); } } private void Hit() { } }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/01/13 07:07
2020/01/13 07:21