どうも、大石です。
あなたはunityで弾の発射位置を自由に
コントロールしたいですか?
この記事を読めばあなたの好きな位置から
弾を発射できるようになりますよ。
スポンサードサーチ
unityで弾の発射位置をコントロールする方法
ということで早速本題です。
弾の発射位置を自由にいじるには、
以下をしましょう。
空のオブジェクトを作成しそれに、スクリプトをつけ、
弾prefab用の変数名宣言と、
Instantiate(変数名,transform.position,Quaternion.identity);
と書きましょう。
上記のコードの例としては以下です。
public class launcher : MonoBehaviour
{
public GameObject bullet;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
if(Input.GetKeyDown("space")){
Instantiate(bullet,transform.position,Quaternion.identity);
}
}
}
あとは変数に弾prefabをセットするのを
忘れずに。
またif文のとこは発射位置に関係ないですが、
spaceを押せば弾が発射されるので、
発射位置の確認用に記述しておくといいです。
このように書いておけば、
最初に作った空オブジェクトの座標(x,y,zのやつ)が
弾の発射位置になります。
なので空オブジェクトを大砲の先に持ってきたり、
銃の先に持ってきたりすると、
ちゃんと意図したところから弾が発射されます。
これで発射位置を自由にできるので、
もうそれ以上を気にしない方はここで読むのを
やめられてもokですが、
一応これの仕組みを説明しておきます。
知っておくとあなた自身で応用が効くように
なるので読むといいかなと思います。
スポンサードサーチ
弾の発射位置をコントロールする仕組み説明
で、発射位置を自由にいじるために
今回キーになってるのは、
Instantiate()の中の引数です。
Instantiateは弾にしたprefabなど
選んだオブジェクトをスクリプトから
複製できる関数ですが、
実はオブジェクトを生成する座標を、
引数を追加すれば指定できます。
今回、Instantiateの引数の中に、
Instantiate(変数名,transform.position,Quaternion.identity);
と書いてますが、
これが弾オブジェクトを生成する座標を表してます。
(つまり発射位置です)
で、そのオブジェクトの生成位置にあたるのが、
Instantiate()の変数名の隣のtransform.position
の部分です。
この記述を書いておくと、
このスクリプトがついてるオブジェクトの
座標と同じ場所にオブジェクトを生成する、
という意味になるのです。
なので例えば、
鉄砲があって鉄砲の銃口の座標が、
(4,10,9)とかだとします。
すると,Instantiateの引数にtransform.positionと
書いておけば、そこと全く同じ座標(4,10,9)に
弾オブジェクトを生成してくれるわけです。
Instantiate()は生成したいゲームオブジェクトの
変数名だけしか引数に書いてない場合、
生成したいオブジェクトが存在してる座標に
オブジェクトを生成します。
例えば、銃口の座標が(4,10,9)で
弾オブジェクトが(2,20,1)とかにあると、
Instantiateしても弾は銃口の座標からでず、
(2,20,1)の座標に生成されるのです。
これだと発射位置として具合が悪いですよね。
ですが、
Instantiate(変数名,transform.position,Quaternion.identity);
のようにtransform.positionと書いとくと、
スクリプトをはっつけたオブジェクトの座標に
オブジェクトが生成されるので、
オブジェクトを動かすだけで発射位置を変更できるわけです。
またInstantiateは座標の他にも引数が取れまして、
回転も指定できます。
でコードに書いてるQuaternion.identityというのは、
無回転のことを表してまして、
生成するオブジェクトに対してなんの回転も加えず
生成するという意味です。
Instantiateではtransform.positionを書いて
座標指定すると、このQuaternion.identityも
一緒に合わせて書かないとエラーになるので、書きましょう。
スポンサードサーチ
まとめ
はい、ということで仕組みの説明をしてきましたが、
要はInstantiate()では引数を加えることで、
発射位置(オブジェクトの生成位置)をいじれるのです。
なので、弾の発射位置を自由にコントロール
したければ、空オブジェクトにスクリプトつけて、
Instantiate(変数名,transform.position,Quaternion.identity);
と書いときましょう。
ということでunityで弾の発射位置
を自由にいじる方法でした。
それでは読んでもらってありがとうございました。
大石