Unity學習筆記五

接着筆記四:
此次要作的主要內容是:
  • 鼠標移到怪物身上,界面出現當前怪物的血量
  • 怪物響應玩家射擊,血量減小
  • 建立預設:把怪物分佈到各個地方

1.首先須要瞭解一下繼承MonoBehaviour的GameObject有哪些方法是響應鼠標事件的:



2.這裏咱們須要用到的方法是:OnMouseOver、OnMouseExit、OnMouseDown,在EnemyController中新建一下方法:
      //怪物初始總血量
     private int blood = 100;

      //怪物響應鼠標事件
     void OnMouseDown()
     {
          if (true == isShowBlood && blood > 0 && true == bulletController.hasBullets ()) {
            isAttacked = true; //觸發被攻擊狀態
            blood = blood - 5;
            if (0 >= blood)
            {
                dead();
            }
          }
     }

    //鼠標移到怪物身上顯示怪物血量
     void OnMouseOver()
     {
          isShowBlood = true;
     }

     void OnMouseExit()
     {
          isShowBlood = false;
     }    
 

3.新建一個類RoleBulletController,用來控制玩家的子彈個數,並綁定在主角身上:
      //初始子彈個數
     private int bullets = 100; 
     
     public bool hasBullets()
     {
          if (bullets > 0) 
          {
                 //每檢測一次就至關於發射一個子彈
               bullets--;
               return true;
          } 
          else 
          {
               return false;
          }
     }

4.新建兩個貼圖,並把圖片拖動到腳本上賦值:
      //是否顯示血量
     private bool isShowBlood = false;

    //血量背景貼圖
    public Texture2D bloodBgTexture;
    //血量貼圖
    public Texture2D bloodTexture;

      //畫實時血量
     void OnGUI()
     {
          if (true == isShowBlood) 
          {
            GUI.DrawTexture(new Rect(0, 0, bloodBgTexture.width, bloodBgTexture.height), bloodBgTexture);
            GUI.DrawTexture(new Rect(0, 0, bloodTexture.width * (blood * 0.01f), bloodTexture.height), bloodTexture);
          }
     }



5.修改checkState方法,使得怪物即便距離過遠,可是被主角攻擊以後仍是會向主角跑來:
      //檢測怪物狀態
     private void checkState()
     {
        //怪物與主角的距離
        float dist = Vector3.Distance(role.transform.position, transform.position);
        if ((dist <= RUN_TO_ROLE_DISTANCE && dist > ATTACK_DISTANCE) ||
            (true == isAttacked && dist > ATTACK_DISTANCE))
          {
               currentState = STATE_RUN;
          }
        else if (dist <= ATTACK_DISTANCE)
        {
            currentState = STATE_ATTACK;
            isAttacking = true;
        }
        else
        {
            currentState = STATE_IDLE;
        }
     }

6.運行程序~! T_T

7.這時候會發現把鼠標移動到怪物身上,根本沒反應,這是咋回事呢?
打開API,上面很詳細的寫到只有GUI元素以及存在碰撞的對象纔會響應該方法,
因此接下來就是給怪物加上碰撞。



8.在Hierarchy面板選中怪物對象,添加一個膠囊碰撞(通常人物都是用這個):


9.運行程序,鼠標以上怪物,喲西,血量出來了。


10.而後,由於遊戲必然是會有不少的怪物的,爲了讓咱們更方面的在場景裏面添加同種怪物,
可使用預設。

預設 (Prefabs)

預設 (Prefab) 是一種資源 - 存儲在工程視圖 (Project View) 中可重複使用的遊戲對象 (GameObject)。
預設 (Prefabs) 可放入到多個場景中,且每一個場景可以使用屢次。向場景添加一個預設 (Prefab) 時,就
會建立它的一個實例。全部預設 (Prefab) 實例都連接到原始預設 (Prefab),實質上是原始預設的克隆
。無論您的工程中有多少個實例,您對預設 (Prefab) 做薄出任何更改時,您會看到這些更改應用於所
有實例。

11.在Project面板右鍵新建:


這時候建立出來的是一個空的物體:


而後把上面的怪物拖動到這上面,更名爲Robot:


而後就能夠隨便的往場景中添加這類怪物了。

12.運行程序~!成功。
相關文章
相關標籤/搜索