【问题标题】:Accessing transform of a game object in a list访问列表中游戏对象的变换
【发布时间】:2017-04-16 12:37:48
【问题描述】:

我的拼图机制有问题,我似乎无法理解。我有一个可以将光束射入端点的塔架,然后这些端点将为其他东西供电。

每个谜题都有多个端点,但没有一个谜题的数量相同,所以我认为最好的方法是使用一个公共列表,然后将其设置为与特定谜题中的所有端点相同的大小。如果拼图有 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");
            }
        }
    }

【问题讨论】:

  • 您可以像访问数组元素一样访问列表元素。如果你不清楚,我会发布一个详细的答案。
  • 对,这让我更进一步。搜索数组比搜索列表要容易得多。现在我可以访问它,但只能访问我自己指定的一个特定的。我不确定如何使其更具动态性,或者在这种情况下,光线投射命中列表的哪个元素并不重要。所有端点都必须工作。
  • 好的,请稍等,我会发布答案。

标签: c# list unity3d


【解决方案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

【讨论】:

  • 非常感谢!这真的很有帮助!
  • @Eldy hit.transform == endPoints[i].transformhit.transform.position == endPoints[i].transform.position 好,因为您只是比较参考。无论如何,都不应该使用它们。使用标签识别您的对象,然后使用CompareTag 函数查看单击了哪个对象。
猜你喜欢
  • 2011-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-18
  • 1970-01-01
相关资源
最近更新 更多