年明けから Unity5の教科書 で Unity の勉強を始めたので、その学習メモです。
ゲームを作る際の流れ
- 画面上のオブジェクトを洗い出す
- 動かすオブジェクト、動かさないオブジェクトを分けておく
- オブジェクトを動かすためのスクリプトを作る
- オブジェクトを自動生成するためのスクリプトを作る
- UI を更新するためのスクリプトを作る
オブジェクトを動かすスクリプトの作成
Chapter 3 では オブジェクトを動かすためのスクリプトを作る という点を 「マウスボタンを押すとルーレットが回る」という簡単なゲームを作りながら学びました。
マウスボタンの入力をトリガーに処理をおこなう
Input.GetMouseButton
, Input.GetMouseButtonDown
, Input.GetMouseButtonUp
を使ってマウスからの入力を検出することができます。
マウスのボタンが押された・離された、などは各メソッドの返り値(bool
)をもとに判別します。具体的には次のように if 文と組み合わせて使います。
if(Input.GetMouseButtonDown(0)) {
//左ボタンが押されたときの処理
// :
}
if(Input.GetMouseButtonDown(1)) {
//右ボタンが押されたときの処理
// :
}
if(Input.GetMouseButtonDown(2)) {
//中ボタンが押されたときの処理
// :
}
上記の例は、ボタンを押すとルーレットが回るというような処理をするときに使えます。ただし Input.GetMouseButtonDown
はボタンが押されたフレームのみ true
を返すので、ボタンが押され続けていることは検出できません。ボタンが押され続けていることを検出したい場合は、Input.GetMouseButton
を使います。
各メソッドが判別できるイベントをまとめると次のようになります。
-
Input.GetMouseButton
: ボタンが押され続けているか -
Input.GetMouseButtonDown
: ボタンが押されたか -
Input.GetMouseButtonUp
: ボタンが離されたか
詳細を確認したい場合は以下の公式ドキュメントを参考にしてください。
- https://docs.unity3d.com/ja/current/ScriptReference/Input.GetMouseButton.html
- https://docs.unity3d.com/ja/current/ScriptReference/Input.GetMouseButtonDown.html
- https://docs.unity3d.com/ja/current/ScriptReference/Input.GetMouseButtonUp.html
オブジェクトを回転させる
Transform
というオブジェクトの位置、回転、スケールを扱うことのできるクラスを利用します。
オブジェクトの回転は Transform.Rotate
を使って記述します。
Transform.Rotate(0, 0, 10);
引数は左から x軸の回転量
, y軸の回転量
, z軸の回転量
です。
上の例では、x軸の回転量
,y軸の回転量
は 0、z軸の回転量
は 10 なので、z 軸方向に 10 ずつ回転させることができます。
こちらも詳細は公式ドキュメントを参考にしてください。
オブジェクトの回転をゆっくり停止させる
「マウスボタンの入力をトリガーに処理をおこなう」、「オブジェクトを回転させる」を組み合わせることで、マウスボタンをクリック→ルーレットが回る というところまでは実装ができます。
あとは、ルーレットの停止です。
オブジェクトを回転させる際には Transform.Rotate
を使いました。回転量は引数で指定しており、先ほどは z 軸方向に回転させるために、
Transform.Rotate(0, 0, 10);
のように引数を指定していました。回転が止まっている状態というのは以下のように引数がすべて 0 の状態です。
Transform.Rotate(0, 0, 0);
そのため、回転量を徐々に 0 に近づけていくようにすれば、ルーレットの回転をゆっくり停止することができます。
float xRotateSpeed = 10;
void Update() {
Transform.Rotate(0, 0, xRotateSpeed);
xRotateSpeed *= 0.96f;
}
例のコードは大分はしょっているのですが、xRotateSpeed
を 10 で初期化して、Update
関数の中で 0.96f との乗算を繰り返すことで、徐々に 0 に近づけていくという方法です。
おまけ
MonoDevelop-Unity の vi mode にする方法
Preferences
Text Editor
Behavior
-
Navigation
→Use Vi modes
にチェック