どうも音無サノトです。
プログラミングの学習として、Unityでゲームを制作しています。
前回の続きからやっていきます。いよいよコードを書いていきます。
今回は Player を動かすスクリプトを追加します。
Rigidbody の追加
Hierarchy ウィンドウにある Player を選択します。
ツールバーの Component > Physics > Rigidbody を選択します。
Rigidbody とは、そのオブジェクトを物理特性によって操作するためにつけるものです。
オブジェクトに力を加えて操作したり、重力の影響を与えたり、他のオブジェクトと衝突させたりするのに使います。
Rigidbody は Inspector ウィンドウの一番下にある Add Component から選択することもできます。
これで物理特性を与えることができます。
プライヤーを操作するスクリプトの追加
いよいよコードを書いていきます。
まず、Project ウィンドウから Create > Folder を選択し、 「Scripts」という名前のフォルダを用意します。
ツールバーより Assets > Create > C# Script を選択し、スクリプトを追加します。
Project > Create > C# Script から選択することもできます。
Inspector ウィンドウの Add Component からスクリプトをオブジェクトにアタッチした状態で追加することもできます。
追加したスクリプトの名前を「PlayerContoller」にします。
スクリプトをオブジェクトにアタッチしていない場合は、ドラッグ&ドロップで Inspector ウィンドウのところに持っていけば追加できます。
スクリプトをダブルクリックするとエディタが開きます。
Windows の場合、デフォルトでは Visiual Stutio が開きます。
自分が学生の頃は、MonoDeveopment という使いづらいエディタがデフォルトで、Visiual Studio と紐づけるために別の設定をしなきゃならなかったのですが、そこら辺は変更されているみたいです。便利になったなと思います。
初めて Visiual Studio を開くとサインインしろとか出てきますが、後で行うでいいと思います。
無事に起動すると、下記の様な画面が出てきます。
デフォルトでは Start 関数と Update 関数が用意されています。
簡単に説明すると、Start 関数がゲーム開始前に行われる処理で、Update 関数がゲーム実行中に行われる処理です。
物理挙動の更新の前に実行させるには、FixedUpdate 関数を使う方がいいらしいです。
これはゲームのレンダリングによって、処理する関数の順番が違うことが関係しています。詳しくは公式のマニュアルをお読みください。
最終的に書くコードは以下の通りです。
コードの中身をざっと説明いたします。
まず、Unity では変数を public で宣言するとエディタ上から数値を入力することが可能になります。
この様に宣言すると、アタッチされたスクリプトのところから変更できるようになります。
ここの Speed の値がソースコード上の変数 speed に適用されます。
この Speed の値がボールの速さになります。試しに色々と変更してみると、ボールの動きが早くなったり遅くなったりします。
次に Rgitbody 型の変数 rb を用意して、Start 関数内でコンポーネントを取得しています。
イメージとしては下の様に、スクリプトがアタッチされているオブジェクトの Rigidbody をゲーム開始前に取得している感じです。
次に FixedUpdate 関数内の説明です。
最初の2行がキーボード入力の数値を取得している処理になります。
Input クラスのGetAxis という関数を使って、Horizontal (左右)、Vertical(前後)のキーボード入力の値を取得しています。
それぞれの値が変数 moveHorizontal と moveVertical に代入されます。
その値を元にVctor3 型の変数 movement を作成しています。
Vector3 とは (x, y, z) の三次元の値をそれぞれ持っているクラスです。
上記のコードでは、X軸に moveHorizontal の値(キーボードの左右の入力)を Y軸は0、Z軸に moveVertical の値(キーボードの前後の入力)が入ります。
そして、最後に Rigitbody クラスの AddForce 関数を使って、ボールにキーボード入力の Speed 分の速さで力を加えています。
イメージとしては、下のようにスクリプトが Rigidbody に対して、処理をしている感じです。
実際に動作を確認してみます。
再生ボタンを押してキーボードの矢印で操作してみてください。
キーボードの入力に応じてボールが動くはずです。
エラーが出た場合はコードを見直し、ボールが早すぎる場合は Speed の値を変更します。
これで Player を動かすことができました。
コードに関して詳しく知りたい場合は公式のスクリプトリファレンスがおすすめです。
ただ、これだとカメラが固定されたまんまなのでゲームぽくないです。
次回はカメラの動作処理を作成します。
本日は以上となります。最後まで読んでいただきありがとうございました!