您的位置:首页 > 移动开发 > Unity3D

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)

游戏运行后这方块就追着玩家不放了……当然还可以自己动手尝试加入一些新的特性,比如像魔兽世界中怪物有一定的警觉距离,只有玩家进入了这个范围才会冲向玩家;在一定时间内攻击不到玩家,就会归位等等。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: