今日はUnityゲーム制作講座、第十弾です!
もう十回かぁ。早いもんじゃのう~
だねぇ。まぁ、十回の大台なので、今日はいよいよ敵を倒せるようにしていくよ~
Unityで3Dの動く敵を弾丸で倒せるようにする方法
敵用のGameObjectを配置
Unityで3Dの動く敵を弾丸で倒せるようにするには、動けるキャラと、弾丸、そして敵用のGameObjectが必要です。
敵用のGameObjectはAssetStoreから適当な素材をDLしてSceneに追加しましょう。
GameObjectのサイズが小さ過ぎたり、大き過ぎたりする場合は、TransformのScaleを調整しましょう。丁度いい大きさになったら前準備は完了です。
この記事から読み始めた方は、以前の記事を参考に、必要な準備をしてから続きに進んでください。
敵用Scriptを作成
Scriptsフォルダに新しいScriptを作成します。名称はEnemyManagerとしておきましょう。Scriptを作成したら以下を追加し、保存します。保存したら、敵用のGameObjectを選択し、InspectorウインドウにEnemyManagerScriptをドラッグアンドドロップで貼り付けましょう。
敵用GameObjectに、RigidbodyとColliderをつける
弾丸で倒せるようにするためには、当たり判定が必要なので、AddComponentで、敵用GameObjectに、RigidbodyとColliderをつけます。
ここではCapsuleColliderを使っていますが、GameObjectの形状によってはBoxの方がいいかもしれないので、ImportしたGameObjectに合ったものを使って下さい。
弾丸にTagをつける
敵用GameObjectの当たり判定で、弾丸とそれ以外の地面とかを区別したいので、Prefabsフォルダに格納している、BulletのPrefabのInspectorのTagに新しいTagを追加しましょう。名前はわかりやすいようにBulletとしておきます。
作成したBulletを選択してTagを指定しましょう。
左右移動と弾丸に当たったときのコードを作成
Scriptsフォルダに新規のScriptを作成し、名前をEnemyManagerにして、以下のコードを貼り付けて保存します。
private float speed = 0.05f; // 速度 private int count = 0; // // Update is called once per frame void Update() { //Debug.Log(count); count += 1; if (count < 500) { transform.position += transform.right * speed; } else if(count > 500) { transform.position += transform.right * speed * -1; } if (count == 1000) { count = 0; } } void OnCollisionEnter(Collision col) { if (col.gameObject.CompareTag("Bullet")) { Debug.Log("BulletCollision"); Destroy(this.gameObject); } }
追加したScriptに以下を追加し、保存します。
動作確認を行う
これで敵の動きと、弾丸が当たったときの処理ができているはずなので、ゲームを再生し、想定通りの動作になっているかを確認しましょう。
イメージどおりに動いてくれていれば完了です。
動画も作成しているので、細かい解説などはこちらから確認してください。
敵を倒せるようになると、ゲームって感じになるね~
あとはスコアとか画面の遷移ができるようになれば、簡単なアクションゲームは作れる感じになると思う。頑張っていきましょう~