访问列表中游戏对象的变换

时间:2017-04-16 12:37:49

标签: c# list unity3d

我的拼图机制有问题,我似乎无法绕过头脑。我有一个将光束射入终点的塔架,这些终点将为其他东西提供动力。

每个谜题都有多个终点,但没有谜题具有相同的数量,所以我认为最好的方法是使用公共列表,然后我将制作与特定谜题中所有终点相同的大小。如果拼图有3个端点,我将为列表分配3,然后将端点拖放到检查器的插槽中。

我的问题就在这一点上,因为我不知道现在如何访问列表中游戏对象内部的内容,例如检查光束的光线投射是否会触及它们,或者访问它们的变量。

以下代码不起作用,因为“if (hit.transform == endPoints.transform)”不正确,但我已经尝试了我能想到的所有内容并花了太多时间来搜索这个问题。我只是不知道如何继续。

public List<GameObject> endPoints;

void Raycaster()
    {
        RaycastHit hit;

        Debug.DrawRay(transform.position, transform.forward * rayDistance, Color.red);

        if (Physics.Raycast (transform.position, transform.forward * rayDistance, out hit)) // Check the raycast
        {
            if (hit.transform == endPoints.transform) // Does it hit the specified object?
            {
                Debug.Log ("It hit the thing");

            }
            else
            {
                Debug.Log ("It did not hit the thing");
            }
        }
    }

1 个答案:

答案 0 :(得分:1)

您需要检查endPoints中的每个元素。因此,您需要使用for循环。你可以这样做:

public List<GameObject> endPoints;

void Raycaster()
{
    RaycastHit hit;

    Debug.DrawRay(transform.position, transform.forward * rayDistance, Color.red);

    if (Physics.Raycast (transform.position, transform.forward * rayDistance, out hit)) // Check the raycast
    {
        for (var i = 0; i < endPoints.Count; i++) { // Do this for each element in endPoints
            if (hit.transform == endPoints[i].transform) // Does it hit the specified object?
            {
                Debug.Log ("It hit the thing number " + i);

            }
            else
            {
                Debug.Log ("It did not hit the thing");
            }
        }
    }
}

在旁注中,我不会这样做:hit.transform == endPoints[i].transform

由于Unity中的变换也包含有关比例和旋转的信息,因此我只会对位置执行此检查:hit.transform.position == endPoints[i].transform.position