Unity,把Capsule换成Box,后面的radius划了红色波浪线

第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();//FY:目标=获取组件<导航网格代理>();
        StartCoroutine(UpdatePath(0.25f, new Vector3()));
        currentState = State.Chasing;//使之刷新出来就是追逐状态
//----------------------------------------------------
        myCollisonRadius = GetComponent().radius;                      //我是34行及就近
        targetCollisonRadius = target.GetComponent().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时一样,这个能做到吗?如果不能,希望根据上下文代码给一个相似作用的另一个可行方案

该回答引用GPTᴼᴾᴱᴺᴬᴵ
在Unity中,BoxCollider和CapsuleCollider具有不同的属性,它们的半径属性也不同。BoxCollider的半径属性被称为size,而CapsuleCollider的半径属性被称为radius。因此,你不能将BoxCollider的size属性直接替换为CapsuleCollider的radius属性。
如果你要替换BoxCollider的size属性,可以通过以下方式来实现类似CapsuleCollider的行为:

1.将BoxCollider的size属性设置为一个Vector3,其中y和z值相等,而x值为所需的半径大小。

2.将BoxCollider的center属性设置为一个Vector3,其中y值为所需的半径大小的一半,而xz值为0。

例如,可以按如下方式更改第34行和第35行的代码:

myCollisonRadius = GetComponent<BoxCollider>().size.x / 2f;  // 获取BoxCollider的size,并将其除以2以获得半径
targetCollisonRadius = target.GetComponent<CapsuleCollider>().radius;


然后你可以在其他代码中使用myCollisonRadius和targetCollisonRadius来计算距离和位置。

请注意,这种方法仅适用于将BoxCollider替换为CapsuleCollider的简单情况,并且只是一种相似的解决方案,不能保证所有情况都可以完全替换。如果你需要更复杂的碰撞体形状,你可能需要使用其他类型的Collider,例如SphereCollider或MeshCollider。