如何在脚本中访问Collider的GameObject?

时间:2013-02-13 11:32:09

标签: c# unity3d gameobject

我正在Unity3d制作纸牌游戏。我使用c#以编程方式将卡片创建为游戏对象。我想知道如何使每个对象(卡)移动鼠标按钮单击,我尝试使用Raycast对撞机,但它无法正常工作。我正在尝试使用网格和它的碰撞对象/组件来访问作为整个封面的父GameObject,我想通过它来访问子GameObject(只是为了移动一个位置)。有一种简单的方法可以修复这个或者你有更好的方法以其他方式完成所有这些吗?

更新

if (Input.GetMouseButton (0)) {                    
    RaycastHit hit = new RaycastHit ();
    Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
    if (Physics.Raycast (ray, out hit)) { 
        print (hit.collider.gameObject.name);
    }
} 

2 个答案:

答案 0 :(得分:0)

Input.GetMouseButton(0)应为Input.GetMouseButtonDown(0)

您尝试使用Input.GetMouseButton(0),它注册鼠标停止的每一帧,与Input.GetMouseButtonDown(0)相对,if (Input.GetMouseButtonDown(0)) print ("Pressed"); else if (Input.GetMouseButtonUp(0)) print ("Released"); 仅在用户点击的第一帧上注册。

示例代码:

if (Input.GetMouseButton(0))
    print ("Pressed");
else
    print ("Not pressed");

if (Physics.Raycast (ray, out hit)) {

如果仍无法解决此问题,请尝试将if (Physics.Raycast (ray, out hit, 1000)) {替换为{{1}}

答案 1 :(得分:0)

我偶然发现了这个问题,试试这个问题(顺便说一句,你也可以使用GetMouseButtonUp)

if (Input.GetMouseButtonDown (0)) 
{                    
RaycastHit hit = new RaycastHit ();
Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
if (Physics.Raycast (ray, out hit)) { 
    print (hit.collider.transform.gameObject.name);
}

}

在某种程度上它可以通过Transform访问,它为我做了诀窍! 如果你想访问父母:

hit.collider.transform.parent.gameObject;

现在孩子有点棘手:

// You either access it by index number
hit.collider.transform.getChild(int index);
//Or you could access some of its component ( I prefer this method)
hit.collider.GetComponentInChildren<T>();

希望我能提供帮助。 干杯!