Quantcast
Channel: C#タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 8901

Unity玉転がしチュートリアル 3-3.スコアとテキストの表示

$
0
0

この記事の対象者

  • 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ツールセットを利用する

image.png

UI>Textを追加
追加するとTextの親としてCanvas、EventSystemが追加されている

image.png

これはUnityの仕様で、全てのUI要素はCanvasの子要素として機能させなければならないという鉄の掟がある(多分)

Textを「Count Text」とリネーム

追加されたが、色が黒くて地味で見ずらいので、白に変更
Textオブジェクトには他のオブジェクトと違いRect Transformが存在する
image.png

スコア表示の位置調整

Anchor Presetsを表示して

image.png

Shift + Altキーを押しながら、一番左上のアイコンを押下

image.png

画面の左上にテキストが配置されるが、このままだとテキストがギリギリ過ぎてめり込んで見えてしまう
なのでPosX,PosYを調整して空白をもたせるとそれっぽくなる

image.png

count値の反映

PlayerControllerスクリプトの中でUnityEngine.UIのTextを用いて紐付ける

これでPlayerController側にフィールドが増えるので、そこにCountTextをドラッグして紐付ける
※最終的なソースは最後に書きますので動きはそちらを参考にする事

image.png

↓紐付けるとこの様になる

image.png

ゲームの終了

UI>Textで終了用のテキストオブジェクトを追加
自動的にCanvasの下に追加されるので、下記のように調整

要素
Pos Y75
Font Size24
TextWin Text

image.png

これで下記の状態になるので、実際に終了条件を満たした際に「Win Text」が更新されるスクリプトを実装

image.png

スクリプトを実装したら、PlayerオブジェクトのWin Textフィールドにドラッグして紐付ければ完成

最終的なPlayerController.cs

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!";}}}

Viewing all articles
Browse latest Browse all 8901

Trending Articles