Unity3D学习笔记(十九)敌人AI
2016-02-23 17:52
471 查看
为了更深入地学习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让自身不停地向前移动;
▇ 脚本
using UnityEngine;
using System.Collections;
public class EnemyAI : MonoBehaviour
{
///
/// 移动速度
///
public float MoveSpeed = 4;
///
/// 旋转速度
///
public float RotateSpeed = 3;
private Transform m_TargetTransform;
private Transform m_SelfTransform;
void Awake()
{
var player = GameObject.FindGameObjectWithTag("Player");
m_TargetTransform = player.transform;
m_SelfTransform = transform;
}
void Update()
{
Debug.DrawLine(m_SelfTransform.position, m_TargetTransform.position, Color.red);
var lookRotation = Quaternion.LookRotation(m_TargetTransform.position - m_SelfTransform.position);
m_SelfTransform.rotation = Quaternion.Slerp(m_SelfTransform.rotation, lookRotation, RotateSpeed * Time.deltaTime);
m_SelfTransform.position += m_SelfTransform.forward * MoveSpeed * Time.deltaTime;
}
}
复制代码
▇ 效果
2013-4-24 21:10:58 上传
下载附件 (344.12
KB)
游戏运行后这方块就追着玩家不放了……当然还可以自己动手尝试加入一些新的特性,比如像魔兽世界中怪物有一定的警觉距离,只有玩家进入了这个范围才会冲向玩家;在一定时间内攻击不到玩家,就会归位等等。
▇ 知识点
Debug.DrawLine:在场景视图中绘制一条线段,从字面上理解这个应该是只有调试环境的时候才会生效,真正游戏里边是看不到的。
GameObject.FindGameObjectWithTag:获取带有指定标记的游戏对象。
Quaternion.LookRotation:求两点间旋转的四元数。
Quaternion.Slerp:在两个旋转四元数中做差值,用来做旋转的过渡效果。
Time.deltaTime:获取上一帧到当前所经过的时间,单位毫秒。
▇ 思路
将First Person Controller的Tag设置为Player;
新建一个脚本EnemyAI,附加到任意一个怪物对象上,我这里用Cube代替;
在Awake利用FindGameObjectWithTag获取到Player的Transform;
在Update方法中让自身的旋转逐渐朝向Player对象,并修改position让自身不停地向前移动;
▇ 脚本
using UnityEngine;
using System.Collections;
public class EnemyAI : MonoBehaviour
{
///
/// 移动速度
///
public float MoveSpeed = 4;
///
/// 旋转速度
///
public float RotateSpeed = 3;
private Transform m_TargetTransform;
private Transform m_SelfTransform;
void Awake()
{
var player = GameObject.FindGameObjectWithTag("Player");
m_TargetTransform = player.transform;
m_SelfTransform = transform;
}
void Update()
{
Debug.DrawLine(m_SelfTransform.position, m_TargetTransform.position, Color.red);
var lookRotation = Quaternion.LookRotation(m_TargetTransform.position - m_SelfTransform.position);
m_SelfTransform.rotation = Quaternion.Slerp(m_SelfTransform.rotation, lookRotation, RotateSpeed * Time.deltaTime);
m_SelfTransform.position += m_SelfTransform.forward * MoveSpeed * Time.deltaTime;
}
}
复制代码
▇ 效果
2013-4-24 21:10:58 上传
下载附件 (344.12
KB)
游戏运行后这方块就追着玩家不放了……当然还可以自己动手尝试加入一些新的特性,比如像魔兽世界中怪物有一定的警觉距离,只有玩家进入了这个范围才会冲向玩家;在一定时间内攻击不到玩家,就会归位等等。
相关文章推荐
- Unity3D学习笔记(十八)使用插件NGUI制作小地图
- Unity3D学习笔记(十七)自定义鼠标形状
- 使用AdMob和Unity [Android]
- Unity3D学习笔记(十六)血条的实现
- Unity3D学习笔记(十五)脚本:HelloWorld!
- Unity3D学习笔记(十四)GUI
- Unity教程之-制作闪亮的星星Star(一):动态的创建Mesh
- 使用unity创建塔防游戏(原译)(part1)
- Unity3D学习笔记(十三)导出游戏
- Unity3D学习笔记(十二)预制
- 谷歌AdMob与Unity3D
- Unity3D学习笔记(十一)物理引擎:刚体与力
- Unity3D学习笔记(十)物理引擎:碰撞器
- Unity3D学习笔记(九)模型导入
- Unity使用Hotween动画插件遇到的坑
- Unity3D学习笔记(八)动画
- Unity3D学习笔记(七)光与影
- Unity3D学习笔记(六)音乐和音效
- Unity3D学习笔记(五)湖泊与瀑布
- Unity3D学习笔记(四)天空、光晕和迷雾