今回は、クリックした位置に単発射撃する方法を紹介していきます。
準備
弾を用意しましょう。名前をBulletとします。

用意した弾にRigidBodyを追加します。

そうしたら弾をプレハブ化させます。

次に射撃の管理をするオブジェクトを用意します。名前をShootManagerとします。

これで準備は完了です。
単発連射のスクリプト
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ShootScript : MonoBehaviour
{
Vector3 mousePosition;
[SerializeField] float ShootForce = 10;
[SerializeField] GameObject Bullet;
void Update()
{
Shoot();
}
void Shoot()
{
mousePosition = Input.mousePosition;
mousePosition.z = 10.0f;
if (Input.GetMouseButtonDown(0))
{
GameObject bullet = Instantiate(Bullet, Camera.main.ScreenToWorldPoint(mousePosition), Quaternion.identity);
var rb=bullet.GetComponent<Rigidbody>();
rb.AddForce(0,0,ShootForce,ForceMode.Impulse);
}
}
}
このスクリプトを射撃の管理をするオブジェクトにアタッチします。

そうしたら、Bulletの中に弾のプレハブを入れます。

これで実行をしてみますと

できました!
スクリプトの解説
mousePosition = Input.mousePosition;
mousePosition.z = 10.0f;
この行でマウスの位置を取得します。
毎フレーム取得する位置を更新したいのでif文の外に置きます。
if (Input.GetMouseButtonDown(0))
{
GameObject bullet = Instantiate(Bullet, Camera.main.ScreenToWorldPoint(mousePosition), Quaternion.identity);
var rb=bullet.GetComponent<Rigidbody>();
rb.AddForce(0,0,ShootForce,ForceMode.Impulse);
}
bulletの中に生成する弾を格納します。
さらにrbにbulletを格納しRigidbodyコンポーネントを取得します。
取得したRigidbodyコンポーネントでAddForce関数が使えるようになりました。
AddForceの中にZ方向に力を加えるようにして弾が発射されます。
まとめ
これで、簡単なシューティングゲームが作れそうですね!
コメント