0

所以我为我正在制作的游戏设置了这三个类。Infection Controller,然后是 2 个子类,InfectedClass 和 BloaterClass。这是在 InfectionController 中:

void UpdateTarget()
{
    GameObject[] Humans = GameObject.FindGameObjectsWithTag(humanTag);
    GameObject[] Vaccines = GameObject.FindGameObjectsWithTag(vaccineTag);
    GameObject[] HV = Humans.Concat(Vaccines).ToArray();

    float shortestDistance = Mathf.Infinity;
    GameObject nearestHuman = null;
    Vector3 currentPosition = this.transform.position;

    foreach (GameObject huvacs in HV)
    {
        Vector3 directionToTarget = huvacs.transform.position - currentPosition;

        float distanceToTarget = directionToTarget.sqrMagnitude;
        if (distanceToTarget < shortestDistance)
        {
            shortestDistance = distanceToTarget;
            nearestHuman = huvacs;
        }
        else
        {
            targetHuman = null;
        }
    }

    if (nearestHuman != null && shortestDistance <= range)
    {
        targetHuman = nearestHuman.transform;
        infectionAgent.SetDestination(targetHuman.transform.position);
    }
}

所以 Infected 和 Bloater 都共享这个脚本,但我希望它们具有不同的速度。我遇到了一个问题,如果我在 Start() 函数中更改 NavMeshAgent 的速度,我会将所有感染单元的速度更改为相同的速度。

那么......我应该把这个运动方法放在子类中吗?或者有没有办法根据父类内部的子类来改变速度?

4

1 回答 1

1

那么......我应该把这个运动方法放在子类中吗?

它会是完全相同的代码吗?那就不要。切勿将相同的代码复制并粘贴到多个位置。

如果我在 Start() 函数中更改 NavMeshAgent 的速度,我会将所有感染单元的速度更改为相同的东西 [...] 有没有办法根据内部的子类更改速度父类?

您还没有显示您的Start()方法,但您应该从子类而不是父类设置速度值。请注意,Unity 魔术名称(如Start)不能很好地继承。您可以创建自己的方法(从 调用Start())并标记为virtual允许您的子类覆盖它并获得您想要的行为。

于 2018-08-13T20:24:29.947 回答