はじめてのUnity (C#)

参考: http://catlikecoding.com/unity/tutorials/clock/

シンプルな時計を作る

完成品はこちら:

unity-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名前空間から、現在の時刻を知るため、DateTimeNowプロパティを呼び出し、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;
    }
}

時計の針を動かすには、hoursminutessecondsのコンポーネントの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ボタンを押せば、アニメーションが開始され、時計が動き始める。

unity-clock