我可以仅根据名称移动游戏对象吗?

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 的初始化阶段保留对游戏对象的引用。在小游戏或游戏项目中,这不是什么大问题,但它是一个“昂贵”的命令,因此需要小心使用。