本文主要是介绍Unity中敌人简单逻辑的实现(来回走动,攻击)2D,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
unity自带一套自动巡航系统,但是目前应该先了解最基本的使用代码控制敌人实现逻辑(1来回走动,2发现玩家时追着玩家,3进入敌人攻击范围时进行攻击),一般来说这是最基本的敌人的功能
分析完敌人所具备的能力后,就将敌人的能力进行拆解,分别进行实现
一 来回走动:敌人在自己的视力范围内没有见到玩家,就会自动来回走动巡逻
敌人的来回移动可以改变transform.position属性来实现,需要设置两个参数,一个敌人移动的速度,一个敌人移动多少秒后转向,也就是时间跨度
在实现完来回走动后会出现敌人会出现一个问题,那就是敌人只会来回移动,不会转向,当敌人改变移动方向时,用transform.localRotation属性进行转向设置,代码如下
public float Speed;//移动速度public int timeSpan;//单向移动时间,60帧为一秒(因为移动函数在fixupdate中)这是外部设置的时间夸度private int time;int Ry = 0;//怪物转向角度为180度
void Start()
{ time = timeSpan;
}private void FixedUpdate()
{Move();
}
void Move()
{Vector2 position = transform.position;timeSpan--; if(timeSpan<=0){Speed = -Speed;if(Speed>0){Ry = 0;}else{Ry = -180;}gameObject.transform.localRotation = Quaternion.Euler(0,Ry, 0);//怪物巡逻转向timeSpan = time;}position.x += Speed;transform.position = position;
}
二 跟随玩家:当敌人发现玩家的时候,敌人就会跟随玩家。或者交靠近玩家,目的是为了攻击
首先为敌人添加一个碰撞器(勾选触发器)用来模拟敌人的视线

当玩家进入敌人的视角触发器时,敌人就需要向玩家靠拢
bool isFind=false;//怪物是否发现玩家,如果发现玩家需要将怪物的状态由巡逻切换为跟随玩家
public GameObject player;//获取到怪物跟随的玩家
private void FixedUpdate()
{if (isFind == false){Move();//这是巡逻函数}else if (isFind == true){Follow();//这是跟随函数}
}void Follow(){Vector2 position=transform.position;if(Mathf.Abs(gameObject.transform.position.x - player.transform.position.x)>5)//怪外和角色距离大于某个值时才开始朝玩家移动,这样避免了怪物与玩家冲重合{if (gameObject.transform.position.x < player.transform.position.x){position.x += Speed;gameObject.transform.localRotation = Quaternion.Euler(0, 0, 0);//怪物转向}else if (gameObject.transform.position.x > player.transform.position.x){position.x -= Speed;gameObject.transform.localRotation = Quaternion.Euler(0, -180, 0);//怪物转向}gameObject.transform.position = position;}
}
private void OnTriggerEnter2D(Collider2D collision)//玩家进入了怪物的视角(触发器),怪物就会攻击玩家
{if (collision.gameObject.tag == "Player")//需要将玩家的标签设为Player{isFind = true;}
}
三 攻击玩家:当玩家进入到了敌人的攻击范围后敌人就需要进行攻击(如何实现攻击在另一篇有讲)
Animator animator;void Start()
{animator = GetComponent<Animator>();//敌人的攻击动画
}private void FixedUpdate()//完整的fixupdate包含的函数
{if (isFind == false){Move();}else if (isFind == true){Follow();Attack();}
}void Attack()
{if (Mathf.Abs(gameObject.transform.position.x - player.transform.position.x) < 5)//达到可以攻击的距离{animator.SetBool("CanAttack", true); }else {animator.SetBool("CanAttack", false);}}
最后将这三个功能代码进行整合放在fixupdate中就能实现敌人的基础逻辑
这篇关于Unity中敌人简单逻辑的实现(来回走动,攻击)2D的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!