我使用光線投射,將其RaycastHit放入一個名為 的變數中raycastHit,使用它來獲取raycastHit.transform.name,然后我可以使用來自名稱的資訊gameObject來移動它的位置嗎?或者如果沒有,我可以從raycastHitto獲取資訊而不是直接移動它嗎?(在 raycast 的功能之外)我已經在尋找答案,但我一直只找到有關如何移動任何gameObject.
EDIT1:我當前的無效版本:
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
uj5u.com熱心網友回復:
您不需要按名稱查找游戲物件,您可以在要從中移動游戲物件的腳本中添加對游戲物件的參考。
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");
}
不要GameObject.Find在Updates 中使用。使用它在Monobehaviours的初始化階段保持對游戲物件的參考。在小游戲或playaround專案中它不是什么大問題,但它是一個“昂貴”的命令,所以需要小心使用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/385936.html
下一篇:我的影片沒有在應該播放的時候播放
