はじめてのUnity (C#)
参考: http://catlikecoding.com/unity/tutorials/clock/
シンプルな時計を作る
完成品はこちら:
まずはプロジェクトの作成:
プロジェクトの作成が完了したら、Create > Create Emptyから新しく"Clock"という名でゲームオブジェクトを作成する。また、Create > Create Empty Child を選択し、Clockの子オブジェクトとしてHours, Minutes, Secondsを作成:
次に、時計の針を作るために、それぞれの子オブジェクトに対し、子cubeを作成する。それぞれのポジションとスケールは次の通り:
親 | position | scale |
---|---|---|
Hours | (0,1,0) | (0.5, 2, 0.5) |
Minuts | (0, 1.5, 0) | (0.25, 3, 0.25) |
Seconds | (0, 2, 0) | (0.1, 4, 0.1) |
オブジェクトのヒエラルキーと現時点でのSceneは次のようになる:
アニメーションの追加
時計を動かすにはスクリプトが必要だ。まずは、ProjectタブからCreate > C# Scriptで新しくC# スクリプトを作成し、ClockAnimator
と名前をつける。スクリプト編集するために、ファイルをエディタで開こう。
まず、UnityEngine
の名前空間から必要な物を使用することを宣言する。次に、ClockAnimator
クラスにMonoBehaviour
からの継承を宣言する。
using UnityEngine; public class ClockAnimator : MonoBehaviour { }
ClockオブジェクトのInspectorからAdd Component > Scripts > ClockAnimatorと選択して、オブジェクトとスクリプトをつなげる。
時計の針を動かすためには、Transform
コンポーネントにエディタからアクセスすることが必要になるので、Transform
変数を宣言し、オブジェクトのプロパティとしてそれぞれに割り当てる。
using UnityEngine; public class ClockAnimator : MonoBehaviour { public Transform hours, minutes, seconds; }
次に、Update
メソッドを追加する。このメソッドはフレーム毎に呼び出される特殊なメソッドだ。
using UnityEngine; public class ClockAnimator : MonoBehaviour { public Transform hours, minutes, seconds; private void Update () { } }
このメソッドを追加すると、コンポーネントにチェックボックスが表示され、オン・オフが設定できる。
Hoursの針は1時間毎に360/12度、Minutesの針は1分ごとに360/60度、1秒ごとに360/60度回転する。これらの値を定数の浮動小数点として次のように定義する。
using UnityEngine; public class ClockAnimator : MonoBehaviour { private const float hoursToDegrees = 360f / 12f, minutesToDegrees = 360f / 60f, secondsToDegrees = 360f / 60f; public Transform hours, minutes, seconds; private void Update () { } }
System
名前空間から、現在の時刻を知るため、DateTime
のNow
プロパティを呼び出し、time
変数に格納する。
using UnityEngine; using System; public class ClockAnimator : MonoBehaviour { private const float hoursToDegrees = 360f / 12f, minutesToDegrees = 360f / 60f, secondsToDegrees = 360f / 60f; public Transform hours, minutes, seconds; private void Update () { DateTime time = DateTime.Now; } }
時計の針を動かすには、hours
、minutes
、seconds
のコンポーネントのlocalRotation
を直接変更する必要がある。Quaternion
のあるメソッドを使って、任意の回転を定義しよう。
using UnityEngine; using System; public class ClockAnimator : MonoBehaviour { private const float hoursToDegrees = 360f / 12f, minutesToDegrees = 360f / 60f, secondsToDegrees = 360f / 60f; public Transform hours, minutes, seconds; private void Update () { DateTime time = DateTime.Now; hours.localRotation = Quaternion.Euler(0f, 0f, time.Hour * -hoursToDegrees); minutes.localRotation = Quaternion.Euler(0f, 0f, time.Minute * -minutesToDegrees); seconds.localRotation = Quaternion.Euler(0f, 0f, time.Second * -secondsToDegrees); } }
真ん中のPlayボタンを押せば、アニメーションが開始され、時計が動き始める。