Unity3D学习笔记(十九)敌人AI

为了更深入地学习Unity,从朋友那里rob了《Hack & Slash RPG》的教程,继续啃。近300节的视频够看好久了,哈哈。因为之前已经做过生命条的效果,而且妄自以为比教程里的效果要好,因此就直接跳到第二部分了。

▇ 知识点 

Debug.DrawLine:在场景视图中绘制一条线段,从字面上理解这个应该是只有调试环境的时候才会生效,真正游戏里边是看不到的。
GameObject.FindGameObjectWithTag:获取带有指定标记的游戏对象。
Quaternion.LookRotation:求两点间旋转的四元数。
Quaternion.Slerp:在两个旋转四元数中做差值,用来做旋转的过渡效果。
Time.deltaTime:获取上一帧到当前所经过的时间,单位毫秒。

▇ 思路 

将First Person Controller的Tag设置为Player;

  • 新建一个脚本EnemyAI,附加到任意一个怪物对象上,我这里用Cube代替;
  • 在Awake利用FindGameObjectWithTag获取到Player的Transform;
  • 在Update方法中让自身的旋转逐渐朝向Player对象,并修改position让自身不停地向前移动;
▇ 脚本 

  1. using UnityEngine;
  2. using System.Collections;

  3. public class EnemyAI : MonoBehaviour
  4. {
  5. /// 
  6. /// 移动速度
  7. /// 
  8. public float MoveSpeed = 4;

  9. /// 
  10. /// 旋转速度
  11. /// 
  12. public float RotateSpeed = 3;

  13. private Transform m_TargetTransform;
  14. private Transform m_SelfTransform;

  15. void Awake()
  16. {
  17. var player = GameObject.FindGameObjectWithTag("Player");
  18. m_TargetTransform = player.transform;
  19. m_SelfTransform = transform;
  20. }

  21. void Update()
  22. {
  23. Debug.DrawLine(m_SelfTransform.position, m_TargetTransform.position, Color.red);
  24. var lookRotation = Quaternion.LookRotation(m_TargetTransform.position - m_SelfTransform.position);
  25. m_SelfTransform.rotation = Quaternion.Slerp(m_SelfTransform.rotation, lookRotation, RotateSpeed * Time.deltaTime);
  26. m_SelfTransform.position += m_SelfTransform.forward * MoveSpeed * Time.deltaTime;
  27. }
  28. }
复制代码
▇ 效果 

img?s=vv0TqtWJq&l=y.jpg 
2013-4-24 21:10:58 上传
下载附件 (344.12 KB)


游戏运行后这方块就追着玩家不放了……当然还可以自己动手尝试加入一些新的特性,比如像魔兽世界中怪物有一定的警觉距离,只有玩家进入了这个范围才会冲向玩家;在一定时间内攻击不到玩家,就会归位等等。

没有更多推荐了,返回首页