我可以仅根据名称移动游戏对象吗?
can i move a gameObject based on just its name?
我正在使用光线投射,将其 RaycastHit
放入一个名为 raycastHit
的变量中,使用它来获取 raycastHit.transform.name
,然后我可以使用来自 gameObject
移动它的位置?或者,如果没有,我可以从 raycastHit
获取信息而不是直接移动它吗? (在光线投射功能之外)我已经在寻找答案,但我只找到了关于如何移动任何 gameObject
.
的结果
编辑1:
我当前的 void 版本:
public RaycastHit raycastHit;
private void HandleHookShotStart()
{
if (TestInputDownHookShot())
{
int gm = LayerMask.NameToLayer("Ground");
int lwm = LayerMask.NameToLayer("LightWeight");
int layers = 1 << gm | 1 << lwm;
if (Physics.Raycast(Shoulder.transform.position, cam.transform.forward, out raycastHit, float.PositiveInfinity, layers))
{
//Hit Something
debugHitpointTransform.position = raycastHit.point;
hookshotPosition = raycastHit.point;
hookShotSize = 0f;
HookShotTransform.gameObject.SetActive(true);
HookShotTransform.localScale = Vector3.zero;
if (raycastHit.collider.gameObject.layer == gm)
{
Debug.Log("ground");
hitType = HitType.Ground;
}
else if (raycastHit.collider.gameObject.layer == lwm)
{
//Debug.Log("lightweight");
hitType = HitType.Lightweight;
goToMove = raycastHit.collider.gameObject;
string raycastHitObjectname = goToMove.name;
}
state = State.HookShotThrown;
}
}
}
编辑 2:
private void HandleHookShotGrab()
{
GameObject raycastHitObject = GameObject.Find(raycastHitObjectName);
}
出现错误 raycastHitObjectName
错误:
CS0103 the name 'raycastHitObjectName' does not exist in the current context
您不需要通过名称找到您的游戏对象,您可以在要从中移动游戏对象的脚本中添加对游戏对象的引用。
public RaycastHit raycastHit;
public GameObject goToMove;//drag in to your gameObject component in unity editor
private void HandleRayCast()
{
if (Physics.Raycast(transform.position, cam.transform.forward, out raycastHit))
{
//Hit Something
goToMove.transform.position = raycastHit.point;
}
}
如果您仍然需要通过名称找到游戏对象,您仍然可以进入Start
阶段。
void Start() {
goToMove = GameObject.Find("yourGameObjectName");
}
不要在 Update
秒内使用 GameObject.Find
。使用它在 Monobehaviour
的初始化阶段保留对游戏对象的引用。在小游戏或游戏项目中,这不是什么大问题,但它是一个“昂贵”的命令,因此需要小心使用。
我正在使用光线投射,将其 RaycastHit
放入一个名为 raycastHit
的变量中,使用它来获取 raycastHit.transform.name
,然后我可以使用来自 gameObject
移动它的位置?或者,如果没有,我可以从 raycastHit
获取信息而不是直接移动它吗? (在光线投射功能之外)我已经在寻找答案,但我只找到了关于如何移动任何 gameObject
.
编辑1: 我当前的 void 版本:
public RaycastHit raycastHit;
private void HandleHookShotStart()
{
if (TestInputDownHookShot())
{
int gm = LayerMask.NameToLayer("Ground");
int lwm = LayerMask.NameToLayer("LightWeight");
int layers = 1 << gm | 1 << lwm;
if (Physics.Raycast(Shoulder.transform.position, cam.transform.forward, out raycastHit, float.PositiveInfinity, layers))
{
//Hit Something
debugHitpointTransform.position = raycastHit.point;
hookshotPosition = raycastHit.point;
hookShotSize = 0f;
HookShotTransform.gameObject.SetActive(true);
HookShotTransform.localScale = Vector3.zero;
if (raycastHit.collider.gameObject.layer == gm)
{
Debug.Log("ground");
hitType = HitType.Ground;
}
else if (raycastHit.collider.gameObject.layer == lwm)
{
//Debug.Log("lightweight");
hitType = HitType.Lightweight;
goToMove = raycastHit.collider.gameObject;
string raycastHitObjectname = goToMove.name;
}
state = State.HookShotThrown;
}
}
}
编辑 2:
private void HandleHookShotGrab()
{
GameObject raycastHitObject = GameObject.Find(raycastHitObjectName);
}
出现错误 raycastHitObjectName
错误:
CS0103 the name 'raycastHitObjectName' does not exist in the current context
您不需要通过名称找到您的游戏对象,您可以在要从中移动游戏对象的脚本中添加对游戏对象的引用。
public RaycastHit raycastHit;
public GameObject goToMove;//drag in to your gameObject component in unity editor
private void HandleRayCast()
{
if (Physics.Raycast(transform.position, cam.transform.forward, out raycastHit))
{
//Hit Something
goToMove.transform.position = raycastHit.point;
}
}
如果您仍然需要通过名称找到游戏对象,您仍然可以进入Start
阶段。
void Start() {
goToMove = GameObject.Find("yourGameObjectName");
}
不要在 Update
秒内使用 GameObject.Find
。使用它在 Monobehaviour
的初始化阶段保留对游戏对象的引用。在小游戏或游戏项目中,这不是什么大问题,但它是一个“昂贵”的命令,因此需要小心使用。