第35行的CapsuleCollider是照抄别人代码的,我根据我的需求把这里放的胶囊改成了盒子,也就是34行的BoxCollider,但34行的radius却画了红色波浪线,而没有改动的CapsuleCollider的radius却一切正常。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
[RequireComponent(typeof(NavMeshAgent))]
public class Enemy : LivingEntilty
{
public enum State
{
Idle,//待机
Chasing,//追逐
Attack,//攻击
}
NavMeshAgent agent;//FY:导航网格代理 代理;
//public Transform target;//FY:建立公有 变换 目标;
Transform target;//FY:变换 目标;
float attackDistanceThreshold = 3*3;//攻击距离阈值
//float timebetweenAttack = 1f;//攻击时间的间隔
float nextAttackTime;//攻击时间的间隔的中间数(一位up说的,没能理解)
State currentState;//FY:状态 当前状态
public GameObject gongjitexiao;//建立一个游戏物体————攻击特效
float deltatime = 0;//设置deltatime的值为0;
float myCollisonRadius;//敌人碰撞器半径
float targetCollisonRadius;//玩家碰撞器半径
protected override void Start()//索敌机制2
{
target = GameObject.Find("Player").transform;//FY:目标 = 游戏对象.寻找(“玩家”).变换;这里的“玩家”是Unity中玩家操控角色的名字
base.Start();
agent = GetComponent<NavMeshAgent>();//FY:目标=获取组件<导航网格代理>();
StartCoroutine(UpdatePath(0.25f, new Vector3()));
currentState = State.Chasing;//使之刷新出来就是追逐状态
//----------------------------------------------------
myCollisonRadius = GetComponent<BoxCollider>().radius; //我是34行及就近
targetCollisonRadius = target.GetComponent<CapsuleCollider>().radius;
//----------------------------------------------------
}
void Update()
{
//print("攻击1");
//索敌机制1:agent.SetDestination(target.position);//FY:代理.设置目的地(目标.位置);但是如果把此行代码打在Update里,就会每帧获取一次目标位置,甚消耗性能
if (Time.time > nextAttackTime)
{
//print("攻击2");
//float distance = (target.position - transform.position).sqrMagnitude;//FY:浮点数 距离 = (代理.位置 - 变换.位置).平方量级;这里的平方量级是转换Vector3成为float用的;
float jvli = (target.position - transform.position).sqrMagnitude;
if (jvli < attackDistanceThreshold)
{
//print("攻击3");
//StartCoroutine(Attack());//调用Attack(攻击动画)的代码进行运行
}
}
}
#region 攻击动画
IEnumerator Attack()
{
currentState = State.Attack;
agent.enabled = false;
//deltatime += Time.deltaTime;//数值随时间而增加;
//print("攻击前");
GameObject GJTX = Instantiate(gongjitexiao,transform.position,transform.rotation);
Destroy(GJTX, 1);
if (deltatime<1)
{
yield return new WaitForSeconds(2f);
//print("攻击4");
currentState = State.Chasing;
agent.enabled = true;
//print("攻击5");
}
//print("攻击后");
}
#endregion
IEnumerator UpdatePath(float refreshRate,Vector3 targePosition)
{
while (target != null)
{
if(currentState == State.Chasing)
{
Vector3 dirToTarget = (target.position - transform.position).normalized;
targePosition = target.position - dirToTarget*(targetCollisonRadius+myCollisonRadius);
if (!dead)
{
agent.SetDestination(targePosition);
}
}
yield return new WaitForSeconds(refreshRate);
}
}
}
我的需求是34行和35行都改成BoxCollider,并且其作用与Capsule时一样,这个能做到吗?如果不能,希望根据上下文代码给一个相似作用的另一个可行方案