【Unity3D自学记录】游戏开发之怪物AI

using UnityEngine;
using System.Collections;

public class BoosAI : MonoBehaviour
{

    //敌人状态

    //敌人站立状态
    public const int STATE_STAND = 0;
    //敌人行走
    public const int STATE_WALK = 1;
    //敌人奔跑状态
    public const int STATE_RUN = 2;
    //记录敌人的当前状态
    private int enemyState;
    //主角对象
    private GameObject hero;
    //备份上一次的敌人思考时间
    private float backUptime;
    //敌人思考下一次行为的时间
    public const int AI_THINK_TIME = 2;
    //敌人的巡逻范围
    public const int AI_ATTACK_DISTANCE = 10;

    // Use this for initialization
    void Start()
    {
        //得到主角对象
        hero = GameObject.Find("Cube");
        //设置敌人的默认状态站立
        enemyState = STATE_STAND;
    }

    // Update is called once per frame
    void Update()
    {
        //判断敌人与主角的距离
        if (Vector3.Distance(transform.position, hero.transform.position) <
        (AI_ATTACK_DISTANCE))
        {
            //敌人进入奔跑状态
            gameObject.animation.Play("run");
            enemyState = STATE_RUN;
            //设计敌人面朝主角方向
            transform.LookAt(hero.transform);
        }
        //敌人进入巡逻状态
        else
        {
            //计算敌人的思考时间
            if (Time.time - backUptime >= AI_THINK_TIME)
            {
                //敌人开始思考
                backUptime = Time.time;
                
                //取得0~2之间的随机数
                int rand = Random.Range(0,2);

                if (rand == 0)
                {
                    //敌人进入站立状态
                    gameObject.animation.Play("idle");
                    enemyState = STATE_STAND;
                }
           
            else if (rand == 1)
            {
                //敌人进入站立状态
                //敌人随机旋转角度
                Quaternion rotate = Quaternion.Euler(0,Random.Range(1,5) * 90,0);
                //1秒内完成敌人旋转
                transform.rotation = Quaternion.Slerp(transform.rotation,rotate,Time.deltaTime * 1000);
                //播放行走动画    
                gameObject.animation.Play("walk");
                enemyState = STATE_WALK;
            }
         }
      }
        switch (enemyState)
        {
            case STATE_STAND:
                break;
            case STATE_WALK:
                //敌人行走
                transform.Translate(Vector3.forward * Time.deltaTime);
                break;
            case STATE_RUN:
                //敌人朝向主角奔跑
                if (Vector3.Distance(transform.position, hero.transform.position) > 3)
                {
                    transform.Translate(Vector3.forward * Time.deltaTime * 3);
                }
                break;

        }
    }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值