この記事の対象者
- Unity入門したい人
- 最初の一歩が踏み出せない人
OSとか環境とか
- Windows 10 Pro
- macOS Mojave
- Unity 2019.2.8f1
- Rider 2019.2.2
補足
- 公式動画にて利用しているのはMacなので、Windowsユーザーはある程度脳内変換して見る事
- 筆者はWindows、Macの両方の環境で確認。Ubuntuとかでは検証してない。
- 基本Unityは英語メニューで利用
- 間違いがあったらツッコミ大歓迎
公式
https://learn.unity.com/tutorial/collecting-scoring-and-building-the-game#5c7f8529edbc2a002053b78a
アイテムのカウント
PlayerControllerスクリプトにアイテムのカウント機能を追加
単純にスクリプトにint型のcount変数を準備するだけ
ただしこのままでは内部的に数値が増加するだけでプレイヤーに伝わらない
Unityでのテキスト表示
UnityのUIツールセットを利用する
UI>Textを追加
追加するとTextの親としてCanvas、EventSystemが追加されている
これはUnityの仕様で、全てのUI要素はCanvasの子要素として機能させなければならないという鉄の掟がある(多分)
Textを「Count Text」とリネーム
追加されたが、色が黒くて地味で見ずらいので、白に変更
Textオブジェクトには他のオブジェクトと違いRect Transformが存在する
スコア表示の位置調整
Anchor Presetsを表示して
Shift + Altキーを押しながら、一番左上のアイコンを押下
画面の左上にテキストが配置されるが、このままだとテキストがギリギリ過ぎてめり込んで見えてしまう
なのでPosX,PosYを調整して空白をもたせるとそれっぽくなる
count値の反映
PlayerControllerスクリプトの中でUnityEngine.UIのTextを用いて紐付ける
これでPlayerController側にフィールドが増えるので、そこにCountTextをドラッグして紐付ける
※最終的なソースは最後に書きますので動きはそちらを参考にする事
↓紐付けるとこの様になる
ゲームの終了
UI>Textで終了用のテキストオブジェクトを追加
自動的にCanvasの下に追加されるので、下記のように調整
要素 | 値 |
---|---|
Pos Y | 75 |
Font Size | 24 |
色 | 白 |
Text | Win Text |
これで下記の状態になるので、実際に終了条件を満たした際に「Win Text」が更新されるスクリプトを実装
スクリプトを実装したら、PlayerオブジェクトのWin Textフィールドにドラッグして紐付ければ完成
最終的なPlayerController.cs
usingSystem;usingUnityEngine;usingUnityEngine.UI;publicclassPlayerController:MonoBehaviour{publicfloatspeed;publicTextcountText;publicTextwinText;privateRigidbodyrb;privateintcount;// See also:https://docs.unity3d.com/ja/2019.1/Manual/ExecutionOrder.htmlprivatevoidStart(){rb=GetComponent<Rigidbody>();count=0;SetCountText();winText.text="";}privatevoidFixedUpdate(){floatmoveHorizontal=Input.GetAxis("Horizontal");floatmoveVertical=Input.GetAxis("Vertical");Vector3movement=newVector3(moveHorizontal,0.0f,moveVertical);rb.AddForce(movement*speed);}privatevoidOnTriggerEnter(Colliderother){if(other.gameObject.CompareTag("Pick Up")){other.gameObject.SetActive(false);count++;SetCountText();}}privatevoidSetCountText(){countText.text="Count :"+count.ToString();if(count>=12){winText.text="You Win!";}}}