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谢谢,修复了它。必须适应这种基于组件的系统。