今日はUnityゲーム制作講座、第九弾です!
今日はなにやるの~?
キー入力をしたときに、弾丸が発射されるように変更していくよ~
Unityで3Dキャラクターから弾丸を発射させる方法
弾丸用のGameObjectを配置
Unityで3Dキャラクターから弾丸を発射させるには、動けるキャラと、弾丸用のGameObjectが必要です。
AssetStoreで弾丸の素材をDLしても良いですが、ここではSphereを使用しましょう。Hierarchyに追加して、TransformのScaleを変更して適当な大きさになるよう調整します。わかりやすいように、名称をSphereからBulletに変更しておいてください。
丁度いい大きさになったら、作成したSphereをPrefabsフォルダに移動して、Prefab化します。Prefab化したBulletのGameObjectを、Hierarchyに追加しましょう。
これで前準備は完了です。
この記事から読み始めた方は、以前の記事を参考に、必要な準備をしてから続きに進んでください。
弾丸用Scriptを作成
Scriptsフォルダに新しいScriptを作成します。名称はBulletManagerとしておきましょう。Scriptを作成したら以下を追加し、保存します。
private float speed = 0.05f; // Update is called once per frame void Update() { transform.position += transform.forward * speed; Destroy(this.gameObject, 3.0f); }
保存したら、Prefab化したBulletのGameObjectを選択し、InspectorウインドウにBulletManagerScriptをドラッグアンドドロップで貼り付けましょう。
PlayerControllerに発射用コードを追加
Scriptsフォルダ内にあるPlayerControllerの内容を、以下のものに変更し、保存します。
private float speed = 0.05f; // 歩行速度 private float rotateSpeed = 0.5f; // 回転速度 private Animator animator; private float horizontalInput, verticalInput; [SerializeField] GameObject bulletPrefab; void Start() { animator = GetComponent<Animator>(); } void Update() { horizontalInput = Input.GetAxisRaw("Horizontal"); verticalInput = Input.GetAxisRaw("Vertical"); if (verticalInput != 0) { transform.position += transform.forward * speed * verticalInput; animator.SetBool("Run", true); } else { animator.SetBool("Run", false); } transform.Rotate(new Vector3(0, rotateSpeed * horizontalInput, 0)); if (Input.GetKeyDown(KeyCode.Space)) { Vector3 pos = transform.position; Quaternion rot = transform.rotation; pos.y += 8; Instantiate(bulletPrefab, pos, rot); } }
追加したScriptに以下を追加し、保存します。
動作確認を行う
ここまででキャラクターから弾丸を発射されるようになっているはずなので、ゲームを再生し、想定通りの動作になっているかを確認しましょう。
イメージどおりに動いてくれていれば完了です。
動画も作成しているので、細かい解説などはこちらから確認してください。
続きはこちら!
ちょっと変だけど飛ぶね~
武器を持たせて武器の位置から発射するようにすればもうちょっとそれっぽくなると思うよ~。やることは同じだから持たせたい人はやってみてくださいな
めんどくさそうだな