Raycast 使用相同的脚本击中多个对象但只减少被击中对象的值?

Raycast to hit mutiple objects with the same script but only decrease the value of the object being hit?

我有 4 个对象,每个对象都附有 planhealth 脚本,因为现在这只会影响其中一个,我尝试为每个游戏对象制作 4 个单独的脚本,但最终得到一个错误,不知道为什么。我假设这是一个非常糟糕的方法来完成这个,所以如果有人能帮助我弄清楚如何使光线投射区分不同的对象,以便只有当光线击中该特定对象时值才会增加。

 void Ray()
{
    Vector2 downward = rayOrigin.transform.TransformDirection(Vector2.down) * rayDistance;
    Debug.DrawRay(rayOrigin.transform.position, downward, Color.green);
    if (Physics.Raycast(rayOrigin.transform.position, rayOrigin.TransformDirection(Vector2.down), rayDistance, plant))
    {
        print("wew");
        Plant_Health plant = plantRef.GetComponent<Plant_Health>();
        plant.health += 0.25f;
    }

首先,不要将其附加到每个游戏对象。仅将其附加到一个游戏对象。也许,一个空的游戏对象。

您当前正在使用 Raycast 函数重载:

bool Raycast(Vector3 origin, Vector3 direction, float maxDistance, int layerMask);

而且这无法确定点击了哪个GameObject。如果单击对象,它将简单地 return 为真。

您必须使用函数 Raycast 之一,它给出 RaycastHit 作为输出。你可以从这里找到哪个对象被击中。

bool Raycast(Vector3 origin, Vector3 direction, out RaycastHit hitInfo, float maxDistance, int layerMask);

您可以按名称查看命中的游戏对象:

RaycastHit hit;
Vector2 downward = rayOrigin.transform.TransformDirection(Vector2.down) * rayDistance;
Debug.DrawRay(rayOrigin.transform.position, downward, Color.green);

if (Physics.Raycast(rayOrigin.transform.position, rayOrigin.TransformDirection(Vector2.down),
    out hit, rayDistance, plant))
{
    if (hit.collider.name == "object1")
    {

    }
    else if (hit.collider.name == "object2")
    {

    }
    else if (hit.collider.name == "object3")
    {

    }
    else if (hit.collider.name == "object4")
    {

    }
}

通过标签:

if (hit.collider.CompareTag("tag1"))
{

}
else if (hit.collider.CompareTag("tag2"))
{

}
else if (hit.collider.CompareTag("tag3"))
{

}
else if (hit.collider.CompareTag("tag4"))
{

}

按图层:

if (hit.collider.gameObject.layer == yourLayerNum)

或者通过变换、游戏对象或对撞机的实例。您选择的方式是您的选择,但我建议您使用 TAGS.