見出し画像

初心者がUnityでゲームを作る Day7 ~ Create with Code1

Day7まとめ

これをやり終わった。
Day7と言いつつ3日かかった。

エンジンがUnityになったよ

学ぶぜ。

チュートリアル中含蓄メモ

  • class

    • 色々な機能のつめあわせ

      • MonoBehavior

        • StartとかUpdateとか入ってるやつ

      • Transform

        • 変形関連のメソッドが多数格納されている

  • Public class PlayerController : MonoBehavior

    • PlayerControllerクラスはMonoBehaviorクラスとイコールですよのコロン

  • TransformはClassでtransformはオブジェクトのtransformのこと

  • メソッドの呼び出し

    • 「.」を付けることでメソッドを呼びだすことができる

      • transform.Translate(x,y,z);

        • transform.

          • メソッドを呼びだしてオブジェクトのtransformを操作せよ

        • Translate(x,y,z)

          • 3次元座標をカッコ内の形に変更する

        • ;

          • ここで命令はおわりです

  • Time.deltaTime

    • 前フレームから今フレームまでの間の時間を計算してくれる

    • Updateでの処理に噛ませることによって、いま何フレームで更新処理が走っていたとしても等間隔になるように調整できる

      • 1秒10フレームの時

        • Time.deltaTime = 1/10 = 0.1

      • 1秒60フレームの時

        • Time.deltaTime = 1/60 = 0.0167

      • 「前に進む」処理にdeltaTimeを掛けるようにすれば、10フレーム処理の時も60フレーム処理の時も「deltaTimeあたり進行距離」を使って進行してくれる

  • new Vector3(x, y, z)

    • Vector3の値に対してオフセットをしたいな~という時にでてきた

      • (Vector3の値) + new Vector3(0, 5, -7)

        • newを抜かすと何ですかこのVector3は知りませんよと言われる

        • 新しいのを一瞬生やしますよ~と言っておかないといけない

  • Late Update

    • Update関数の後に実行される

    • チュートリアルでは移動の処理をUpdateで、カメラの処理をLate Updateでやることでカメラが常になめらかに追従するようにしていた

    • Updateに全部まとめてしまうとどっちが先になるかランダムなのでガタガタになる

  • transform.Rotate(Vector3で軸指定,値)

    • Translateは座標指定するだけだったけど、回転を加える処理の場合は軸を指定して行う

    • 将来やりたいことにカメラとの角度の有機的な変更があるので頭の端っこに置いておこうと思った

The Wondering Villageのカメラ。遠景はナナメから見下ろす


近景は真横から見るようにスプライトの角度を変えている。

↑これやりたい。やり方はどうしているのかな。
あらゆるオブジェクトを角度設定用のGameobjectの子にして、カメラの角度に対応するように回転させてるとか……?

  • transform.translate.x

    • 特別何も言わなければVector3でtransformを取る

    • .xとか.yとかいうことで特定の次元の値のみを取り出すことができる

  • Destroy(gameObject)

    • transformのように小文字スタートの「gameObject」はスクリプトがアタッチされたゲームオブジェクトのプロパティを参照する

    • この場合自分自身(アタッチされたGameObject)の破棄

  • public GameObject[] animalPrefabs;

    • []は配列を意味する

    • 格納された順に0,1,2とIndexが降られる

      • 取り出すときはanimalPrefabs[0]などと入力

        • この場合Element 0を読み出す

    • size = 格納可能数

      • publicなら入力した分だけinspectorに空欄が出てくる

  • class Random

  • メソッド .Range(最小数値,排他的最大数値)

    • 最小数値以上、排他的(exclusive)最大数値未満の数を返す

      • intで0,3と入れたら0,1,2を返す

    • animalPrefabs(配列を持つ変数).Length

      • リストの長さを返す

      • 0,1,2と3項目ある場合は3を返す

    • InvokeRepeating(string Method Name,開始までのディレイ, リピート時間)

      • 何度も同じ挙動を繰り返させるメソッド

      • Updateで毎フレーム処理しなくてもStartで一発呼べば済むのでエコ

        • 自作の関数がメソッドとして扱われている

          • メソッド = 関数と捉えていいっぽい

「関数」と「メソッド」の違いは、定義が曖昧ではありますが、大きく言えば処理のかたまりを関数と言い、その中でオブジェクトにおける関数をメソッドと言います。C#はオブジェクト指向言語なので、「関数=メソッド」と捉えても特に不都合は無いかと思います。

https://www.sejuku.net/blog/103324
  • クールタイムの実装

ボーナス課題のやつ。他はいいからそれを一番教えてくれやと思った。
色々調べたけど一番簡単に実装してたのはこれだと思う。
経過時間を計測して閾値を超えたらフラグをtrueにするという形式。
ボタン押下時にフラグチェックしてtrueなら発動してフラグをオフに、falseならエラーメッセージ出すなりする。

noteのコードブロックでも色分けされてくれたらよかったのだが

この記事が気に入ったらサポートをしてみませんか?