Unity学习笔记五

接着笔记四:
这次要做的主要内容是:
  • 鼠标移到怪物身上,界面出现当前怪物的血量
  • 怪物响应玩家射击,血量减少
  • 创建预设:把怪物分布到各个地方

1.首先需要了解一下继承MonoBehaviour的GameObject有哪些方法是响应鼠标事件的:
Unity学习笔记五_第1张图片


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);
          }
     }

Unity学习笔记五_第2张图片

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面板选中怪物对象,添加一个胶囊碰撞(一般人物都是用这个):
Unity学习笔记五_第3张图片

9.运行程序,鼠标以上怪物,哟西,血量出来了。
Unity学习笔记五_第4张图片

10.然后,因为游戏必然是会有很多的怪物的,为了让我们更方面的在场景里面添加同种怪物,
可以使用预设。

预设 (Prefabs)

预设 (Prefab) 是一种资源 - 存储在工程视图 (Project View) 中可重复使用的游戏对象 (GameObject)。
预设 (Prefabs) 可放入到多个场景中,且每个场景可使用多次。向场景添加一个预设 (Prefab) 时,就
会创建它的一个实例。所有预设 (Prefab) 实例都链接到原始预设 (Prefab),实质上是原始预设的克隆
。不管您的工程中有多少个实例,您对预设 (Prefab) 作薄出任何更改时,您会看到这些更改应用于所
有实例。

11.在Project面板右键新建:
Unity学习笔记五_第5张图片

这时候创建出来的是一个空的物体:
Unity学习笔记五_第6张图片

然后把上面的怪物拖动到这上面,改名为Robot:
Unity学习笔记五_第7张图片

然后就可以随便的往场景中添加这类怪物了。

12.运行程序~!成功。






















你可能感兴趣的:(Unity学习笔记五)