如何访问对撞机';s脚本中的GameObject
本文关键字:脚本 GameObject 何访问 访问 对撞机 | 更新日期: 2023-09-27 17:58:52
我正在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);
}
}
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, 1000)) {
替换if (Physics.Raycast (ray, out hit)) {
我也偶然发现了这个问题,请尝试一下(顺便说一句,你也可以使用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>();
希望我能帮忙。干杯