(日記のまとめページはこちら:https://wakky.tech/unity-baseball-game/)
前回はオブジェクトを配置してスタジアムをつくった。バットを配置して、プレイヤーの操作でスイングするのが今日のゴール。とりあえず野球盤としての機能を早めにつくって、後からディテールを詰めていく方針でつくりたい。機能についてはUnityのマニュアルを参照する形で進める。
バットとバッターの配置
ここは前回と同じ要領で、バットのオブジェクトを配置する。まずバットと、それを回転させる軸を設置する。バットも回転軸も、3D ObjectのCylinderでつくって適当に長さを整える。回転軸のオブジェクト名を「Batter」、バットのオブジェクト名を「Bat」とした。BatterのバットはRotateで90°傾けて横向きにし、Materialを追加してバットっぽい色に着色。
ここで、BatをドラッグしてBatterの上にドロップすると、BatterとBatに親子関係を持たせることができ、2つのオブジェクトをくっつけることができる。
カメラを移動
バットを回転させる前に、配置したバットが見えるようにカメラを移動させる。オブジェクトの移動と同じ要領で、Main Cameraを選択して、動かした方向の軸をクリックして引っ張る。右下に、実行時に映し出される映像のプレビューが表示されるので、これを見ながら調整する。回転させたいときは、左上の回転マークを選択して、カメラの周りの球をクリックして引っ張ると角度を変えることができる。
バットを回転させる
バットを回転させるには、マウスやキーボード入力に応じてバットを動かすスクリプトをつくる必要がある。オブジェクトの回転については以下のあたりに書いてある。Transform.Rotateを使うのがラクそう。
https://docs.unity3d.com/ja/current/ScriptReference/Transform.Rotate.html
https://docs.unity3d.com/ja/current/Manual/QuaternionAndEulerRotationsInUnity.html
まずスクリプトを追加する。スクリプトはJavaScriptかC#で書けるが、今回はC#でつくっていきたいと思う。Materialと同じ要領で、CreateからScriptでC#を選択。
スクリプトの名前は、適当にSwingBatとした。ダブルクリックするとMicrosoft Visual Studioが立ち上がろうとするけど、いちいちVisual Studio立ち上がると重たいので、適当なエディタ(ちなみに私はSublime Text3使ってる)にドラッグ&ドロップして開く。おまじない的なコードが最初からScriptに書かれているが、バットをスイングするには、毎Frame(Frameはゲームや動画で描写される1枚の画)処理が実行されるUpdateの中に処理を書けばよい。
スイングの仕様としては、マウスをクリックしている間はバットが回転するようにしたい。マニュアルを見ていくと、以下のInput.GetMouseButton関数が使えそう。左クリックで動かしたいので、引数は0。
https://docs.unity3d.com/ja/current/ScriptReference/Input.GetMouseButton.html
上記のマニュアルを見つつ以下のようなScriptをつくった。
ポイントだけ解説しとく。float変数 rで回転の速さを調整している。これを後でtransform.RotateのY軸回転引数に入れる。(引数の単位をよく理解してないけど、値が大きいほど回転が速くなる)Input.GetMouseButton(0)は、マウスを左クリックしている間はtrueになるため、左クリックしてるときだけtransform.Rotateが実行される。引数にマイナスがついている(-rの部分)のは、プラスだと時計方向に回転してスイングが逆になってしまうため(左打ちバッターならそれでいいんだけど)、マイナスをつけてスイングの方向を反転させている。このScriptをBatterのInspectorにドラッグ&ドロップすれば、Batterに対してScriptの動作をさせることができる。
これで上の再生ボタンを押し、マウスを左クリックするとバットが回転するようになった。次はボールを打ち返すところまで進めたい。