接着笔记四:
此次要作的主要内容是:
- 鼠标移到怪物身上,界面出现当前怪物的血量
- 怪物响应玩家射击,血量减小
- 建立预设:把怪物分布到各个地方
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.运行程序~!成功。