ひつじを動かそう のバックアップソース(No.9)

#contents
*はじめに [#x7454d9b]
&size(18){[[Unity 初学者のすゝめ]]};の続きです。
#br
「[[Unity 初学者のすゝめ]]」では重力操作や当たり判定などの簡単な物理演算による操作を勉強しました。
しかし、さらに複雑な操作をしようと思うとプログラミングでの操作が必要になります。
そこで、このページではUnity上でのC#のプログラミングの基本を勉強します。
#br
*ひつじをC#で動かしてみる [#a2e972d3]
C# のソースコードのファイルをコンポーネントとしてひつじにつけましょう。
AddComponent>NewScriptを押します。そして、
すると、プロジェクトのアセットに「text.cs」というのが追加されました。
これをダブルクリックします。
#br
#geshi(csharp,number){{
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class test : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
    }

    // Update is called once per frame
    void Update()
    {
    }
}
}}

#br
エディターが開いて、このようなファイルが出てきたと思います。
これがC#のソースコードになります。
初めて見る人には、何が何だかわからないと思います。
C#の基本的な構文に関しては[[ここ>C#の基本構文]]で勉強しましょう。
#br
**ステップ1:ひつじを移動させてみよう [#o72a7874]
#br
では、ここにいろいろ書き足して、実際にひつじを動かしてみましょう。
#br
#geshi(csharp,number){{
…
    void Start()
    {
        Vector3 pos = this.transform.position;

        pos.x = 3;
        pos.y = 4;

        this.transform.position = pos;
    }
…
}
}}
#br
「void Start()」 の後に続く {} の中に上の通りに書き込んでください。
#br
少し説明すると、「void Start()」は、そのオブジェクトがゲームに出現したときに一番初めに一度だけ呼び出されるメゾット(一連の命令をまとめたもの)です。
今回ひつじは、初めからゲームに出現しているので、ゲームを起動するとすぐに「void Start()」の中身の命令(後に続く {} の中の命令)が実行されます。
#br
命令の中身を見ていくと、1行目は「このオブジェクトの位置を”Vector3”という型の”pos”という名前を持つ変数に代入する」というものです。Vector3とは三次元ベクトルを表す型になります。ひつじ位置は(0,0,0)ですので"pos"には(0,0,0)が代入されたことになります。
2、3行目は「その変数のxy座標を(3,4)にする」、4行目は「このオブジェクトの位置を、新しい変数で更新する」といったものになります。つまり”pos”は(3,4,0)になり、ひつじの位置も(3,4,0)に更新されます。
#br
まとめると、「ゲームが開始されてすぐに一度だけ、ひつじの位置が(0,0,0)から(3,4,0)に変わる」という命令になります。
#br
実際に動かしてみましょう。
ファイルの変更を保存して、エディターを閉じ、ゲームを再生してみましょう。
ひつじは右上に移動したはずです。
#br
**ステップ2:少しずつ動かしてみよう [#q3f2dde7]
#br

#geshi(csharp,number){{
…
    // Start is called before the first frame update
    void Start()
    { 
//全部消す
    }

    // Update is called once per frame
    void Update()
    { 
        Vector3 pos = this.transform.position;

        pos.x += 0.01f;
        pos.y += 0.01f;

        this.transform.position = pos;
    }
}
}}
#br
次は、一旦「void Start()」の中身を消して、「void Update()」の中身を上のように変えてください。
#br
「void Update()」はそのオブジェクトがゲームに出現してから毎フレーム呼び出されるメゾットです。
フレームとは、アニメーションのコマ割り、パラパラ漫画のようなもので、画像の切り替わりの間隔のことです。
先ほどと同様、ひつじは最初からいますので、ゲームが開始したら毎フレームで「void Update()」の中身が実行されます。
中身についてみていくと、1行目と4行目はさっきと同じですね。
変わったのは2、3行目で、「現在の変数のxy座標にそれぞれ0.01足す」というものです。
#br
まとめると、「ゲームが開始してから毎フレームごとに、xy座標がそれぞれ0.01ずつ増えていく」となります。
#br
実際動かしてみると、少しずつ右上に移動するようになるかと思います。
#br
**ステップ3:スピード調節をしよう [#r264312f]
#br
次は、スピードをインスペクターから調節で切るように改良してみましょう
#br
#geshi(csharp,number){{
…
    public float speed = 0.01f;

    // Start is called before the first frame update
    void Start()
    {
    }

    // Update is called once per frame
    void Update()
    { 
        Vector3 pos = this.transform.position;

        pos.x += speed;
        pos.y += speed;

        this.transform.position = pos;
    }
}
}}
#br
次は、「void Start()」の上と、「void Update()」の中身をこのように変えます。


#br
#geshi(csharp,number){{
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class test : MonoBehaviour
{
    public float speed = 0.01f;

    // Start is called before the first frame update
    void Start()
    {
    }

    // Update is called once per frame
    void Update()
    { 
        if (this.transform.position.x > 5 || this.transform.position.x < -5)
        {
            speed = -speed;
        }

        Vector3 position = this.transform.position;
        position.x += speed;
        position.y += speed;
        this.transform.position = position;
    }
}
}}