Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/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# 为场景中的每个对象返回true的光线投射_C#_Unity3d_Collision Detection_Raycasting - Fatal编程技术网

C# 为场景中的每个对象返回true的光线投射

C# 为场景中的每个对象返回true的光线投射,c#,unity3d,collision-detection,raycasting,C#,Unity3d,Collision Detection,Raycasting,我有一个预设数组,玩家可以点击它。我已将此脚本附加到预设,当出现Raycast冲突时,该预设将返回true public bool Clicked() { if (Input.GetMouseButtonDown(0)) { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if (Physics.Raycast(ray, out

我有一个预设数组,玩家可以点击它。我已将此脚本附加到预设,当出现
Raycast
冲突时,该预设将返回
true

public bool Clicked()
{
    if (Input.GetMouseButtonDown(0))
    {
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        RaycastHit hit;
        if (Physics.Raycast(ray, out hit))
        {
            return true;
        }
        else return false;
    }
    else
        return false;
}
在处理与预置
数组的交互的
类中
检测到鼠标单击时,我正在数组中循环每个帧。在每个预置中,我获取脚本组件并调用上面的脚本。但是,当我单击单个对象时,它们都返回
true
,或者当我错过时,它们返回
false

以下是交互脚本:

public GameObject prefab;   
private GameObject[,] pointers;

private float xOffset = -2f;
private float yOffset = -1f;


void Start () {
    pointers = new GameObject[4,4];

    for (int y = 0; y < pointers.GetLength(1); y++)
    {
        for (int x = 0; x < pointers.GetLength(0); x++)
        {
            pointers[x,y] = Instantiate(prefab, new Vector3(xOffset + x, 0, yOffset + y), Quaternion.identity) as GameObject;
            }
        }
    }

void Update () {
    if (Input.GetMouseButtonDown(0))
    {
        for (int y = 0; y < pointers.GetLength(1); y++)
        {
            for (int x = 0; x < pointers.GetLength(0); x++)
            {
                if (pointers[x,y].GetComponent<Pointer>().Clicked())
                {
                    print ("Clicked!"); //Returns for all when clicked a single object.
                }
                else
                {
                    print ("Not clicked...");
                }
            }
        }
    }
}
公共游戏对象预制;
私有游戏对象[,]指针;
专用浮点xOffset=-2f;
私人浮动yOffset=-1f;
无效开始(){
指针=新游戏对象[4,4];
for(int y=0;y
没错,这很有道理<代码>物理。光线投射
不会神奇地知道你从哪个物体调用它;相反,它应该只调用一次,被光线击中的对象将在
hit
结构中返回。@luqui谢谢,修复了它。必须适应这种基于组件的系统。