1212 ボールを飛ばそう! その3 - mishimatsu/AdventCalendar2014 GitHub Wiki

前回は、スクリプトでボールを飛ばしてみました。 今回は、そのスクリプトの解説をしていきます。 まずは、Unityを起動します。 BallのスクリプトをMonoDevelopで開きます。 BallのスクリプトをMonoDevelopで開くには、ProjectにあるBallスクリプトをダブルクリックします。 using UnityEngine; 1行目のusing UnityEngineは、UnityEngineの名前空間を使用するという意味になります。 Unityのスクリプトを利用する際のお約束みたいなものです。 この行を削除した場合、今回作成したサンプルの記述すると Vector3.upは、UnityEngine.Vector3.upと書く必要がありかなり記述が冗長になります。 usingを利用することで、タイプ量を減らすことができます。 using System.Collections; System.Collectionsの名前空間を利用しますとという宣言になります。 public class Ball : MonoBehaviour Ballクラスの宣言を行っています。 Ballクラスを作成する際に、基本クラスをMonoBehaviourにするという意味になります。 UnityからC#スクリプトを作成した場合には、基本的なところは、自動的に作成されます。 製作者は、必要な部分だけ記述すればいいようになっています。 public class Ball : MonoBehaviour { } {}で、囲まれた部分がクラスの宣言となります。 // Use this for initialization //の後、行末までコメントとして扱われます。 コメントは、プログラムの処理には関係ありませんが、プログラムの説明を記述することで処理の内容がわかりやすくなります。 後で見た場合に、何をやっているかわかるように、コメントを残しておきましょう。 void Start () これは、関数と呼ばれる定義になります。 void Start () { } の部分が関数の定義です。 このStart関数は、実行ボタンが押されて、GameObjectが生成された場合に、一度だけ呼ばれる関数になります。 今回は、使用しなかったので、空の関数になっています。 通常は、初期化の処理などに利用します。 // Update is called once per frame これもコメントになります。 void Update () この関数は、1フレームに一回呼び出される関数になります。 GameObjectを動かす処理などは、ここにスクリプトを書きます。 今回作成したスクリプトは、このUpdate()関数のみに記述しています。 update()関数に定義されている内容について説明していきます。 if(Input.GetButtonDown("Fire1")) if文は、if(論理式)という書式で、論理式が真の場合には、次の文を実行します。 もし 論理式が正しければ 下に続くスクリプトを実行するということになります。 今回のケースでは、指定されたボタンが押されたらという条件の判断を行っています。 Input.GetButtonDown("Fire1") Fire1に定義されているボタンの状態を取得する関数を呼び出しています。 ボタンが押されていたらtrue(真)を押されていなければfalse(偽)を返します。 コラム Fire1には、Ctrlキーとマウスの左ボタン、ジョイスティックの0ボタンが登録されています。 Fire1に何が登録されているかを確認するには、 Edit→Project Settings→Inputで確認出来ます。 Fire1に登録されているキーやボタンが確認できると思います。 新たに自分専用の定義を作成することも可能です。 rigidbody.AddForce(Vector3.up * 10.0f, ForceMode.Impulse); ボールのRigidbodyに力を与えます。 AddForce()がRigidbodyに力を与える関数になります。 Vector3.up * 10.0fが与えるスピードです。 Vector3.upは、X,Y,Zの要素を持つベクトルクラスです。 upは、上向きのベクトルになります。 *は、掛け算の演算子で、この場合2つの値を掛けあわせます。 10.0fは、浮動小数点型の数値になります。 この場合、上向きのベクトルを10倍した値を力として与えています。 ForceMode.Impulseが与える力種類になります。 ForceModeには、Acceleration、Force、Impulse、VelocityChangeなどがあります。 MonoDevelopを使っているとForceModeの種類が列挙されるので、入力が非常に便利です。 rigidbody.AddForce()は、引数を2つ取ります。 第一引数は、Vector3 force 第二引数は、ForceMode modeになっています。 MonoDevelopで、関数の名前(この場合には、AddForce)にマウスカーソルを合わせると、関数の詳細が表示されます。 実際の引数の内容については、Unityのドキュメントを参照することになります。 AddForceのドキュメントはここになります。 http://docs-jp.unity3d.com/Documentation/ScriptReference/Rigidbody.AddForce.html 前回からスクリプトが出てきて、少しプログラムぽくなって来ましたね。 急に難しくなったと感じるかもしれませんが、最初は難しいものです。 まずは、指定されたとおりに入力して、スクリプトに慣れていきましょう。 繰り返しやることで、できるようになります。 わからないことがあったら質問してください。 その部分の解説を増やしていきたいと思います。 今回作成したUnityのプログラムをWebブラウザで実行できるようにしておきました。 WebPlayer ※Unity Web Playerを有効にしないと実行出来ない可能性があります。 練習問題 Input.GetButtonDown()の関数のマニュアルページを見て、どういう動作をする関数か確認しましょう。 ForceModeを変更して、どういう動作になるか確認してみましょう。 明日は、ボールをキーボードで移動できるようにしてみます。 それでは、楽しいUnity Lifeを!