パスワードを忘れた? アカウント作成
14294247 journal
日記

yumeの日記: Unity学習 #4 2D UFOチュートリアル修了

日記 by yume

コメントありがとうございます。

Unity

  2D UFO 6 of 9

●ピックアップアイテムを実装する
・インスペクタからゲームオブジェクトを非アクティブにできる
・プレハブ、GameObjectやそのファミリーからプレハブを作ることができる。
・プレハブを更新すれば、プレハブからシーンに置かれたすべての同一オブジェクトを更新できる

  2D UFO 7 of 9

●実際に触れたときの処理を作る
・OnTriggerEnter2D()メソッドは、2Dコライダーオブジェクトに触れたときに呼び出される。
接触したCollider2Dは引数として指定できる。
void OnTriggerEnter2D(Collider2D other)
{
        //do something
}

GameObject.
・tag変数 GameObjectのタグ。string
タグは自由に複数同時に設定することもできる。
>例えばCanPickuUp、CanDestroy、みたいにふたつ同時に設定しておけるってことか。でタグを基準に外側からの挙動を決めるとか。
・CompareTag(string) stringとtagを比較してboolを返す。
・SetActive(bool) GameObjectのアクティブ状態をboolでsetする。
・コライダーの変数Is TriggerをTrueにすると、通常の衝突判定(コライダー同士がぶつかったら止まる)ではなく、
プログラマーが書いたOnTriggerEnter2D()関数に基づいた処理がなされる。

・静的コライダーは動かないやつ、動的コライダーは動くやつ
・Rigidbody2Dを持ってるやつが動的とみなされる
・すべての静的コライダーは単体として計算される。
・エンジンが動くと予想していないコライダーが動くと、再度計算が必要になる。
>えーと、つまり、静的コライダーなオブジェクトは原則動くはずがないので、万一動いたらコライダーの形状だのなんだのを都度再計算する必要がある。
滅多に動かないならそれでいいんだけど、毎フレーム動くような場合はパフォーマンスに悪い影響が出る。
動的コライダーのオブジェクトは、そもそも毎フレーム動くものと考えて設計されるので、毎フレーム動かしたいなら動的コライダーにした方がよい、ということか。
そして、動的コライダーにしたいならRigidbody2Dコンポーネントを追加すればよい。
・Rigidbody2Dを入れると、オブジェクトは力や重力の影響を受けるようになってしまう。
そこで、isKinematicをTrueにすることができる。そうすると、オブジェクトはキネマティックになる。
>キネマティックってなんだよ。ちょうどいい日本語訳がないっぽい。
・キネマティックオブジェクトは力の影響を受けないけど、トランスフォームによって移動などはできる。
>2020.1.4f1だと、IsKinematicじゃなくて「ダイナミック(動的)・キネマティック・スタティック(静的)」の3種から選ぶようになってるようだ。
いずれにせよ。Rigidbody2Dコンポーネントによって決められる。
>まとめると:
ダイナミック  動いて、力や重力の影響を受けるやつ
キネマティック 動くけど、力や重力の影響は受けないやつ
スタティック  動かないやつ。
>チュートリアル無いと絶対わからんなこれ

  2D UFO 8 of 9

●スコアを表示したりする
・playerにprivate int count;を用意
・ヒエラルキーからCreate > UI > Textで新たなオブジェクトを作る。
こうして作られたオブジェクトは「Canvas」という親オブジェクトと、「Text」という子オブジェクトからなり、さらにEevntSystemというオブジェクトまで生成される。
・こういうUIオブジェクトは、通常のUnity Transformではなく Rect Transformというちょっと違うやつで位置などが決まる。
>Rect Transformの原点とかはCanvas基準のようだ。そして原点を中央から左上やその他にすることもできる。
・UI関係の名前空間は UnityEngine.UI
>作業画面では、UI関連のオブジェクトがとんでもない位置にあるように見えるが、Game画面で見ると正しい位置にある。
つまり、UIオブジェクトはGameのシーンとは無関係に、多分画面のサイズ基準で位置を決めているんだろう。まぁ当然といえば当然だ。
・UnityEngine.Ui.Text型のPublic変数をスクリプトで作っておけば、Unity側でGameObjectと紐づけられる。
紐づければ、そのオブジェクトの変数をいじれる。Textオブジェクトのテキストはtext変数に入っている(まんまだな)
・PickUpオブジェクトに触れるたびにcount変数を+1して、CountTextオブジェクトの本文を"Count: {0}", countにすればOK。
・ゲームクリア時にUIテキストで褒めるやつも、12個集めた時点でYou win!でOK。

  2D UFO 9 of 9

●ゲームをビルドする
・実際にプレイヤーが遊べるゲームを好きなプラットフォームにデプロイできる。
>そういやビルドとか、デプロイとかって意味がよくわかってないな。
「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典曰く、
・ビルドとは、ソースコードをあれこれして実際のプログラムを作ること
・デプロイとは、プログラムをしかるべき場所に置いたり、設定したりして使える状態にすること
なるほど。
・Unityのビルド機能で、プラットフォームを選んでビルドできる。
・ビルドする際に、ビルドするシーンを選ぶ。たくさんあるならたくさん入れる。
・全部入れる必要はない
>デバッグシーンとかはのぞけるってことね。

ビルドしたら実際動く。ビルドもすげえ簡単だ。mac版もビルドできるんだろうか。
Visual Studio 2019で作ったConsole AdventureはMac版を作ってみたかったけど、軽く躓いてそれっきりだったが……
はたして、ターゲットプラットフォームをMacにすると何やら忙しそうにUnityが動きはじめたが、appがちゃんとできた。
そしてmacでもちゃんと動く……ここで気づいたが、UIテキストのサイズが半端なく小さい。
これはつまり、Unityエディタ上では小さい解像度でプレイするから、UIのテキストサイズは充分大きく見えたが、
Windowsの全画面で、俺の環境の場合は確か1920x1080、そしてmacの方は5Kだから5120x2880(そのまま使ってるかはわからんが)。
UIのサイズは絶対値らしく、左上原点のスコア点数は左上にあるものの、Winテキストは画面中央から75だけ上、と設定したのでUFOにダダ被りである。
まぁその辺りはなんとかする方法もあるだろう。

--

実際にUnityでゲームを作ってみると、驚くほどコードを書かずに済むのがすごい(このチュートリアルが簡単なのもあるけど)。
これ、ちょっと勉強したらもう小学生でもバリバリ作れちゃったりしない?
Steamでゲームが爆売れした小学生、みたいなニュースが出てくるのも、時間の問題かもしれん。

--

ともあれ、2D UFOチュートリアルは完了したので、次はちょっと作りたいもの、の下準備的なものをUnityで作ってみよう。
っていうかズバリこれだ。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

アレゲは一日にしてならず -- アレゲ見習い

読み込み中...