iT邦幫忙

2021 iThome 鐵人賽

DAY 14
0
自我挑戰組

用unity製作2DRPG雛形-沒有大野狼的小紅帽系列 第 14

14.unity變數傳遞(上)記分板

今天要實現用腳本(script)改變文字(Text),寫一個蘋果記分板。
主要是偵測碰撞事件,再因碰撞改變其他腳本變數。(利用全域變數static)
其他腳本負責記錄分數與顯示分數。

所以今天要寫兩個腳本:
一、記錄與顯示分數
二、碰撞事件


一、記錄與顯示分數

首先,創一個Text(右鍵→UI→Text)物件,負責顯示分數,和掛載分數紀錄腳本。
1.png

接著就來寫紀錄分數腳本吧!!

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;  //Text相關的函數都存在UI的命名空間內,所以要添加這個

public class ScoreBoard : MonoBehaviour
{
		//變數宣告
    public static int score;  //設定成 public(外部可取) static(全域)
                              //因為數量是自然數,所以使用int
    public Text ShowScore;    //建立Text(變數的概念),從遊戲引擎拖曳text物件
   
		//初始化
    void Start() {
        score=0; //一開始為0
    }

		//不斷更新分數
    void Update() {
        show();
    }

    private void show(){
        ShowScore.text="apple:"+score.ToString();
				//  ShowScore抓到的text物件.的text文字 = " ";
				// .ToString()可將int轉為string
    }
}

寫好之後,將腳本掛載到Text之下,或是Text的父物件。(其實掛在哪都沒差,不影響取值和顯示)

並且把Text物件拖曳至腳本中。
2.png

二、碰撞事件

碰撞事件(偵測碰撞)要成立有幾個條件:

1.碰撞的物體(雙方)都要掛載 形狀collider 2D

2.主動碰撞的一方要掛載Rigidbody 2D

3.碰撞腳本要掛載在主動碰撞方

要碰撞的物體是小紅帽(role)和她要撿的蘋果(apple)
主要碰撞方是小紅帽,蘋果是被撞的一方;所以腳本會掛在小紅帽身上
a1.png

然後替蘋果(apple)用tag標記,tag名字可以自訂。
a2.png

接著就來寫紀錄分數腳本吧!!

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class AppleCollision : MonoBehaviour
{
	   //初始化
     void Start() {
				//建立碰撞器(變數的概念)
        BoxCollider2D bx; 
				//將這個腳本的物體碰撞器設給變數
        bx = gameObject.AddComponent<BoxCollider2D>() as BoxCollider2D;
     }

		//碰撞事件,只要this產生碰撞,就會引起這個事件
     void OnCollisionEnter2D(Collision2D coll) //傳入碰撞對象,取名coll(可自訂)
    {
				//觸發條件
        if (coll.gameObject.tag == "apple") //如果碰撞對象.的物件.的tag是apple
        {
            Destroy(coll.gameObject); //碰壞此物件
            ScoreBoard.score++;       //ScoreBoard這個class.的score全域變數
						Debug.Log(ScoreBoard.score);//檢查變數有沒有加成功	           
        }

    }
}

主要碰撞方是小紅帽,所以腳本掛在小紅帽身上

結果

按下開始,右上角蘋果數量初始化為0
r0.png
1操控小紅帽去碰撞蘋果,蘋果消失,右上角蘋果數量初始化為1
r1.png
主控台顯示蘋果數量為1
r3.png


上一篇
13.unity 文字&關閉遊戲
下一篇
15.unity變數傳遞(下)場景間數據傳遞
系列文
用unity製作2DRPG雛形-沒有大野狼的小紅帽23

尚未有邦友留言

立即登入留言