02 / 11 · 5 分
基礎
メソッドとゲームループ
ここまでのプロジェクト
まだプロジェクトはありません。今学んでいるのは Unity が代行してくれる 3 つのメソッド——レッスン 06 以降で実際に動くのを見ます。
メソッドとは、名前が付いていて、いつでも実行できるコードのまとまりです。Unity がそのうち三つを自動で呼んでくれます。
アニメーション図
Awake と Start はオブジェクトが生まれてから一度ずつだけ走り、Update は 1 秒間に 60 回ほど、何度もくり返されます。
毎日書く三つのメソッド
Lifecycle.cs
void Awake() { /* set up my own references */ }
void Start() { /* everything else exists now */ }
void Update() { /* runs every frame */ }void は戻り値を返さないという意味です。( ) の中は入力を受け取る部分で、ここでは空になっています。
Awake は Start より前に、すべてのオブジェクトで走ります。だから Start なら他のオブジェクトを安全に使えます。
Update がゲームのループそのものです:入力を受け取る、移動させる、時間を測る、条件を確かめる。
Time.deltaTime——Update のただ一つのルール
PC が速いと Update の呼ばれる回数が遅いスマホより多くなります。Time.deltaTime(前のフレームから経過した秒数)を掛けておけば、どの端末でも同じ速さで動きます。
アニメーション図
それぞれの箱が Update() が呼ばれた一回です。上の半分は呼ぶたびに 5 HP 足すため、速いマシンは 1 秒の終わりに 50 HP に達します。下の半分は 5 HP × deltaTime なので、どの速さでも同じ 5 HP で揃います。
✖ 3 units per frame
frame-dependent
transform.position += Vector3.forward * 3f;✓ 3 units per second
frame-independent
transform.position += Vector3.forward * 3f * Time.deltaTime;自分のメソッドを書く
Damage.cs
int hp = 100;
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
TakeDamage(20); // call it
}
void TakeDamage(int amount) // amount = the input
{
hp -= amount;
Debug.Log("HP left: " + hp); // prints to the Console
}