どうも、チャーさんです。
この記事では、unityで大砲の弾を発射する方法について
お話しします。
あなたがこの記事を読めば、Unityで大砲の弾をリアルな
感じで物理に沿った感じで発射することができる
ようになります。
しかし読まなければ、作りたいものを作れず
イライラしてしまうことになるでしょう。
ということで、Unityで弾を発射したければ早速
読み進めてください。
目次
Unityで大砲の弾を発射する方法
まず結論からいくと、Unityで大砲の弾を発射するには、
1、大砲の弾になるオブジェクトを用意し
2、そのオブジェクトにRigidbodyとスクリプトをつけ
3、AddForceのメソッドで物理を効かせながら発射
です。
この3点をやれば、Unityで大砲の弾を発射させる
ことができます。かなり簡単なので、それでは順番に
見ていきましょう。
大砲の弾になるオブジェクトを用意しよう
まず大砲の弾にするオブジェクトですが、こちらは
ゲームオブジェクトのsphereを使用しましょう。
あなたが望むなら、ちゃんとモデリングされた大砲の弾の
3Dモデルを用意してもいいですが、
サクッと済ませたいなら、UnityがSphereという球体の
オブジェクトを用意してくれてるのでそれを使いましょう。
Hierarchyの+ボタン > 3D Object > Sphere
をクリックすることで表示させることができます。
でそれができたら次は、
そのオブジェクトにRigidbodyとスクリプトをつけよう
RigidbodyはUnity内でゲームオブジェクトに対して
物理法則に則った動きをさせるのに必要なコンポーネント
です。
今回は大砲の弾をちゃんと物理法則に則った感じで
発射させるので、Rigidbodyコンポーネントをつけましょう。
まずはsphereオブジェクトをクリックして、
Inspector欄の下の方にあるAdd Componentをクリックして、
Rigidと検索窓に入力し、Rigidbodyというのがあるので
それをクリックしてください。
するとRigidbodyコンポーネントがセットされます。
で次に、同じくAdd Componentをクリックして、
今度はスクリプトをつけましょう。
同じように検索窓にscriptと検索すればNew scriptと
出るのでそれをクリックして名前をcanonとか適当につけて
create and add ボタンを押してください。
それができたらスクリプトがセットされるので、
次にasset内にあるスクリプトファイルをダブルクリックして
テキストエディターを開きましょう。
開いたら、
以下のようなスクリプトを書きましょう。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class canonBall : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
Rigidbody rb = GetComponent<Rigidbody>();
rb.AddForce(new Vector3(20,4,0),ForceMode.Impulse);
}
}
ということでスクリプトの説明をします。
AddForceのメソッドで物理を効かせながら発射
このスクリプトで大事なのは、この2行だけです。
Rigidbody rb = GetComponent<Rigidbody>();
rb.AddForce(new Vector3(20,4,0),ForceMode.Impulse);
まずこのGetComponentの部分で、Rigidbodyを
取得します。Unityではスクリプトでゲームオブジェクトに
セットしたコンポーネントを操作するには一度取得する必要が
あるからです。
で次に、その取得したRigidbodyがもつメソッドである、
AddForce(引数1、引数2)ですが、こちらは
その名の通りオブジェクトに対して、
物理的な力を加えることができます。
で引数の1つ目は、力を入力する必要がありまして、
具体的にはVector3型の値をここに入れればOKです。
こんな感じにです。
rb.AddForce(new Vector3(20,4,0),ForceMode.Impulse);
Vector3型は見ての通り、new Vector3()で
簡単に作れるので、ここのカッコの中に、x,y,zの順で
数値を入力しましょう。
なぜVector3なのか?と疑問に思ったかもですが、
もしあなたが昔やったのを覚えてたら中学3年の理科でやった
力の授業を思い出してください。
力の方向と矢印の長さで力の大きさを示しましたよね。
そんな感じで、
new Vector3(x,y,z)に数値を入れると
それぞれの軸の方向に対して、どれだけの力をかけるか
が決まるわけです。
また今の説明がわかりにくければ、
rb.AddForce(new Vector3(20,4,0),ForceMode.Impulse);
例えばこれなら、
x方向に20,
y方向に4
z方向に0
の力を加えるみたいな感じで理解してください。
この場合弾は上にちょっと上がりながら、x方向に飛んでいきます。
で今まで説明したのが、引数の1個目でして、
次にAddForceの引数の2個目ですが、
こちらはForceModeというのを入力しまして、
今回のForceMode.Impulseだと、
一瞬だけ力を加えるというモードです。
現実の大砲では弾を飛ばす時に、火薬を爆発させて
その瞬間に力がかかり弾が飛んでいくので、
それと近い動きをさせるために、
ForceMode.Impulseを選びましょう。
ForceModeは4種類あるので興味があったら
調べてみるのもいいですよ。
で、それができたら、スクリプトを保存して、
Unityの画面に戻りましょう。
で再生ボタンを押してみて実際にあなたが用意した
Sphereオブジェクトが発射されればOKです。
飛びましたか?イェイ、やりましたね。
で、ここからは余談ですがCubeオブジェクトを
積み重ねて壁みたいにして、
そこに向けて大砲の弾を発射してみましょう。
するとCubeが吹っ飛ばされるのでちょっと
面白いです。
弾の発射の向きをや勢いを変えたい?こうしましょう
また大砲の弾の発射の勢いやどの方向に
飛んでいくかを変えたければ、AddForceの
引数1のnew Vector3(x,y,z)の中の数字をいじりましょう。
数字をでかくすれば、よりかかる力が大きくなります。
色々調整してみて、あなたが飛ばしたい方向や威力を
調整してみてください。
オブジェクトの重さに注意
あと、色々調整する際に1個大事なのが、AddForceは
Rigidbodyのmassというパラメーターに大きく影響を
受けます。
massというのは重量、つまり重さのことです。
初期値は1になってまして1kgです。
これを2kg,3kgと増やしていくと当然発射するのに必要な
力も大きくなっていくので、うまく飛ばない場合は
massが大きくなりすぎてないかとかチェックしましょう。
まとめ
ということで、以上Unityで弾を発射させる方法を
書いてきましたが、まとめると、
1、大砲の弾になるオブジェクトを用意し
2、そのオブジェクトにRigidbodyとスクリプトをつけ
3、AddForceのメソッドで物理を効かせながら発射
大まかにこの3ステップでUnityで弾を発射させる
ことができるようになるので、是非ともやってみてください。
弾を飛ばすと楽しいですよー♪
ということでまずは早速Sphereオブジェクトを
表示させるとこから始めてみてください。
それでは読んでいただきありがとうございました。
チャーさん