ぱふの自由帳

週2更新目指す技術ブログ。メインはUnity。最近、Railsかじり始めましたー!良ければフォローお願いします(`・ω・´)

【Unity公式チュートリアル】スクリプティング〈レッスン1.13-1.28〉

この記事について

注意事項

  • 特に断りがない限り、C#について記述しています
  • 個人的に知らなかったこと、誰かの役に立ちそうな事をまとめています

レッスンタイトル一覧

1.13 Translate and Rotate
1.14 Look At
1.15 Linear Interpolation
1.16 Destroy
1.17 GetButton and GetKey
1.18 GetAxis
1.19 OnMouseDown
1.20 GetComponent
1.21 Delta Time
1.22 Data Types
1.23 Classes
1.24 Instantiate
1.25 Arrays
1.26 Invoke
1.27 Enumerations
1.28 Switch Statements

n秒後にDestory

GameObjectを生成してから5秒後にDestroyしたいという時は以下のように書くことが出来ます。

void Start () {
    GameObject.Destroy (gameObject, 5f);
}

私はInvokeやコルーチンでDestroyを遅らせていました...。全く知らなかったです(´・ω・`。)

GetKey と GetButton

この二つは同じような使い方をすれば同じように動きます。ですが、Unityの公式はGetButtonを推奨しています。理由をググった結果、以下の記事で納得できたので紹介しておきます。

qiita.com

OnMouseDown

ユーザーがGUIElementまたはColliderを持つオブジェクト上でマウスボタンを押したとき、そのオブジェクトにOnMouseDown関数が設定されていれば呼び出されます。 しかし、Layerの設定がIgnore Raycastであれば呼び出されません。

以下はCubeにスクリプトをアタッチしています。

f:id:PafuOfDuck:20171030071437g:plain

値型と参照型

値型

値型の例として

  • int / float / double:数値を格納

  • bool:真偽値を格納

  • Structs:Vector3やQuaternionのような2つ以上の変数を持つ構造体

といったものがあります。

実際に変数の中に値が入っているのが特徴です。以下のようなスクリプトを実行してもスクリプトがアタッチされているオブジェクトは特に変わりません。これは変数posが値型であり、新たな値を代入するとpos自身の値が変更されているだけだからです。

void Start () {
    Vector3 pos = transform.position;
    pos = new Vector3 (0, 2, 0);
}

参照型

参照型は

変数が値の格納されているアドレスを持っているのが特徴です。以下のようなスクリプトを実行するとスクリプトがアタッチされているオブジェクトは(0,2,0)に移動します。これは変数tranが参照型であり、参照先の値を変更したために同じ場所を参照していたオブジェクトが動いたということです。

void Start () {
    Transform tran = transform;
    tran.position = new Vector3 (0, 2, 0);
}

Invoke系まとめ

Invoke(string methodName, float time)

Invoke("関数名", 実行までの待機時間)という感じで使用します。

void Start () {
    Invoke ("Hogehoge", 2f);
}

void Hogehoge(){
    Debug.Log ("ほげー");
}

これで開始から2秒後に「ほげー」という文章が出力されます。

注意点としては下の二つぐらいですかね。

  • void関数のみしか呼べない
  • 引数を渡せない

InvokeRepeating(string methodName, float time, float repeatRate)

InvokeRepeating("関数名", 実行までの待機時間, 再実行までの待機時間)という感じで使用します。

void Start () {
    InvokeRepeating ("Hogehoge", 2f, 1f);
}

void Hogehoge(){
    Debug.Log ("ほげー");
}

これで開始から2秒後に「ほげー」という文章が出力された後、1秒ごとに「ほげー」という文章が出力されます。

CancelInvoke(string methodName)

CancelInvoke("キャンセルする関数名")という感じで使用します。Invoke()やInvokeRepeating()で実行予定であった関数を指定してキャンセル出来ます。なお、キャンセルする関数名を書かないと全ての実行予定の関数をキャンセルしてしまいます。

ひとこと

OnMouseDownは上手く使えば、タッチされた場所取得してRay飛ばして...とかせずに済みそうですね(^^)

初心者の方や熟練者の方を問わずTwitterのフォローお待ちしています...(`・ω・´) ヨロシク!