Unity3D开发敌⼈⾃动攻击和⾃动寻路
简介:当制作动作类攻击游戏时,会⽤到敌⼈的⾃动攻击及⾃动寻攻击⽬标,如何实现⾃动攻击和⾃动寻路呢?下⾯简单的讲解我对这⽅⾯的理解。
当你已经导⼊了敌⼈的模型并制作好了敌⼈动画控制状态机,接下来肯定会想让敌⼈具备攻击和寻⽬标的能⼒,要开发这⼀功能,其实只需要做两件事情:
第⼀:通过CharacterController控制移动,即通过调⽤SimpleMove(Vector3)移动。
第⼆:根据主⾓的位置和距离,判断是否进⾏攻击,攻击的时候利⽤随机数来发起攻击动画的选择。
编写脚本:Enimy.cs
using UnityEngine;
using System.Collections;
public class Enimy : MonoBehaviour {
// Use this for initialization
private Transform player;unity3d animation
public float attackDistance = 2;//这是攻击⽬标的距离,也是寻路的⽬标距离
private Animator animator;
public float speed;
private CharacterController cc;
public float attackTime = 3; //设置定时器时间 3秒攻击⼀次
private float attackCounter = 0; //计时器变量
void Start () {
player = GameObject.FindGameObjectWithTag("Player").transform;
cc = this.GetComponent<CharacterController>();
animator = this.GetComponent<Animator>();//控制动画状态机中的奔跑动作调⽤
attackCounter = attackTime;//⼀开始只要抵达⽬标⽴即攻击
}
// Update is called once per frame
void Update () {
Vector3 targetPos =player.position;
targetPos.y = transform.position.y;//此处的作⽤将⾃⾝的Y轴值赋值给⽬标Y值
transform.LookAt(targetPos);//旋转的时候就保证已⾃⼰Y轴为轴⼼旋转
float distance = Vector3.Distance(targetPos,transform.position);
if (distance <= attackDistance)
{
attackCounter += Time.deltaTime;
if (attackCounter >attackTime)//定时器功能实现
{
int num = Random.Range(0, 2);//攻击动画有两种,此处就利⽤随机数(【0】,【1】)切换两种动画
if (num == 0)animator.SetTrigger("Attack1");
else animator.SetTrigger("Attack2");
attackCounter = 0;
}
else
{
animator.SetBool("Walk", false);
}
}
else
{
attackCounter = attackTime;//每次移动到最⼩攻击距离时就会⽴即攻击
if(animator.GetCurrentAnimatorStateInfo(0).IsName("EnimyWalk"))//EnimyWalk是动画状态机中的⾏⾛的状态
cc.SimpleMove(transform.forward*speed);
animator.SetBool("Walk ",true);//移动的时候播放跑步动画
}
}
}
结合上⾯的注释,是不是很清楚这些功能的实现原理了,⾄少当我忘记的时候看到这个笔记就会明⽩了。有问题可以留⾔,⼀起交流学习。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论