unity3d 我如何在脚本中访问碰撞器的游戏对象?

6jygbczu  于 2023-01-09  发布在  其他
关注(0)|答案(2)|浏览(210)

我正在Unity3d中制作一个纸牌游戏。我用c#编程创建了纸牌作为游戏对象。我想知道如何制作每个对象(卡)移动鼠标按钮点击,我尝试了光线投射碰撞器,但它是不工作。我试图访问父游戏对象,这是整个覆盖的网格和它的碰撞器对象/组件,通过它我想访问一个子游戏对象(只是为了移动一个位置)。有没有一个简单的方法来修复这个问题或者你有没有一个更好的方法来以其他方式完成这一切?
更新:

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);
    }
}
bsxbgnwa

bsxbgnwa1#

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)) {

weylhg0b

weylhg0b2#

我也偶然发现了这个问题,试试这个(顺便说一句,你也可以用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>();

希望我能帮上忙。干杯!

相关问题