Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 访问列表中游戏对象的变换_C#_List_Unity3d - Fatal编程技术网

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

C# 访问列表中游戏对象的变换,c#,list,unity3d,C#,List,Unity3d,我的益智技工有个问题,我似乎无法解决。我有一个发射光束到端点的塔架,这些端点将为其他东西供电 每个谜题都有多个端点,但没有一个谜题的数量是相同的,所以我想最好的方法是使用一个公共列表,然后我将其与特定谜题中的所有端点大小相同。如果拼图有3个端点,我将为列表指定3个端点,然后将端点拖放到检查器中的插槽中 我的问题出现在这一点上,因为我不知道现在如何访问列表中游戏对象中的内容,例如检查它们的变换,如果光线投射会击中它们,或者访问它们的变量 以下代码不起作用,因为“如果(hit.transform==

我的益智技工有个问题,我似乎无法解决。我有一个发射光束到端点的塔架,这些端点将为其他东西供电

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

我的问题出现在这一点上,因为我不知道现在如何访问列表中游戏对象中的内容,例如检查它们的变换,如果光线投射会击中它们,或者访问它们的变量

以下代码不起作用,因为“
如果(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");
            }
        }
    }
公共列表端点;
void Raycaster()
{
雷卡斯特击中;
Debug.DrawRay(transform.position,transform.forward*光线距离,Color.red);
if(Physics.Raycast(transform.position,transform.forward*光线距离,out-hit))//检查光线投射
{
if(hit.transform==endPoints.transform)//是否命中指定的对象?
{
Log(“它击中了目标”);
}
其他的
{
Log(“它没有击中目标”);
}
}
}

您需要检查端点中的每个元素。例如,您需要为循环使用
。您可以这样做:

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");
            }
        }
    }
}
公共列表端点;
void Raycaster()
{
雷卡斯特击中;
Debug.DrawRay(transform.position,transform.forward*光线距离,Color.red);
if(Physics.Raycast(transform.position,transform.forward*光线距离,out-hit))//检查光线投射
{
对于(var i=0;i
另一方面,我不会这样做:
hit.transform==端点[I].transform


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

您可以像访问数组元素一样访问列表元素。如果你还不清楚的话,我会发布一个详细的答案。对,这让我更进一步了。搜索数组比搜索列表容易得多。现在我可以访问它,但只能访问我自己指定的一个特定的。我不知道如何使它更具动态性,或者在本例中,光线投射命中列表中的哪个元素并不重要。所有的结束点都必须起作用。好的,等一下,我会发布一个答案。非常感谢!这真的很有帮助@Eldy
hit.transform==端点[i]。transform
优于
hit.transform.position==端点[i]。transform.position
,因为您只比较引用。无论如何,它们都不应该被使用。使用标记标识对象,然后使用函数查看单击的对象。