机器人AI的制作
程序员文章站
2022-03-31 19:08:12
...
在游戏里,NPC的智能程度将直接影响到游戏的质量,那么我们就来看一个在距离主角很近的时候会跑来攻击主角的巡逻机器人的制作。
public class MonsterAi : MonoBehaviour {
//主角
private GameObject Capsule;
//机器人状态
public const int STAND = 0;
public const int WALK = 1;
public const int RUN = 2;
//机器人现有状态
private int nowState;
//机器人的思考时间
private int thinkTime = 2;
//机器人上一次思考的时间
private float LastTime;
//机器人的攻击范围
private const int Wide = 10;
// Use this for initialization
void Start () {
nowState = STAND;
Capsule = GameObject.Find("Capsule");
}
// Update is called once per frame
void Update () {
if(Vector3.Distance(transform.position,Capsule.transform.position)<=Wide)
{
GetComponent<Animation>().Play("loop_run_funny");
transform.LookAt(Capsule.transform);
nowState = RUN;
}
else
{
if(Time.time-LastTime>=thinkTime)
{
LastTime = Time.time;
int random = Random.Range(0,2);
if(random==0)
{
GetComponent<Animation>().Play("loop_idle");
nowState = STAND;
}
else
{
Quaternion mRotation = Quaternion.Euler(0,Random.Range(1,5)*90,0);
transform.rotation = Quaternion.Slerp(transform.rotation,mRotation,Time.deltaTime*1000);
GetComponent<Animation>().Play("loop_walk_funny");
nowState = WALK;
}
}
}
switch(nowState)
{
case STAND:
break;
case WALK:
transform.Translate(Vector3.forward*Time.deltaTime);
break;
case RUN:
transform.Translate(Vector3.forward*Time.deltaTime * 5);
break;
}
}
}
在脚本中令机器人在距离主角一定距离之外的时候巡逻并思考,而距离主角一定范围内时便发起攻击,向主角奔跑。
效果图:
上一篇: [数据结构]优先级队列(最大堆)详解
下一篇: Java实现堆(最大堆)