敌人功能
敌人的功能就是当敌人距离玩家10米时朝向玩家移动,当距离玩家5米时攻击玩家,这个还很简单的。
我们先去获取玩家位置,然后把玩家位置给一个三维向量,在用一个float数去接收,这边重点是Distance()方法,里面的两个位置顺序无所谓一个是自身的位置和玩家的位置。
playerPos = player.position;
distance = Vector3.Distance(transform.position, playerPos);
然后我们就可以去用if判断0米时朝向玩家移动,当距离玩家5米时攻击玩家。这里我用了SimpleMove去写,大家可以用Translate()、position写敌人移动;
if (distance <= StaticGameResources.enemydistance)
{
if (distance <= StaticGameResources.enemydistance1)
{
transform.LookAt(playerPos);
}
else
{
transform.LookAt(playerPos);
cc.SimpleMove(transform.forward * Time.deltaTime * StaticGameResources.enemyspeed);
}
}
敌人攻击玩家掉血,这边就是用敌人播放一次攻击动画就玩家就掉一次血,这边我就是直接写在切换动画的方法里这边就是用一个数先接收到了攻击动画的时长然后去减等Time.deltaTime,当动画小于等于0时就去扣血,然后在用Invoke去调用AttackTimer()方法使动画初始化然后在回到待机动画;
void Start()
{
attackTimer = an[StaticGameResources.attack].length;
}
void ChangeState(EnemyState ps)
{
switch (ps)
{
case EnemyState.Idle:
break;
case EnemyState.Run:
Invoke(StaticGameResources.runTimer, runTimer);
break;
case EnemyState.Attack:
//敌人动画播放一次玩家扣一滴血
attackTimer -= Time.deltaTime;
if (attackTimer <= 0)
{
StaticGameResourcesOne.GameOne().playerHP--;
Invoke(StaticGameResources.attacTimer, attackTimer);
}
break;
default:
break;
}
}
void AttackTimer()//攻击
{
es = EnemyState.Idle;
attackTimer = an[StaticGameResources.attack].length;
}