2 回答

TA貢獻1841條經驗 獲得超3個贊
你正在使用Vector2
位置,所以我假設你的游戲是 2D 的。如果是這樣,我相信您需要使用Physics
類的 2D 版本(請參閱此處):
void FixedUpdate() {
Vector2 diff = (PlayerMovement.playerTransform.position - transform.position).Normalized;
RaycastHit2D hit = Physics2D.Raycast(transform.position, diff);
Debug.DrawRay(transform.position, diff, Color.white, 0.01f, true);
if (hit.collider != null) {
Debug.Log("Raycast hit: " + hit.collider.gameObject.name);
if (hit.transform.tag == "Player") {
float rotZ = Mathf.Atan2(diff.y, diff.x) * Mathf.Rad2Deg;
transform.rotation = Quaternion.Euler(0f, 0f, rotZ);
}
}
}

TA貢獻1842條經驗 獲得超22個贊
對于您正在使用的 Ray 構造函數,方向應該是 Vector3:
https://docs.unity3d.com/ScriptReference/Ray.html
但是在您的代碼中,您傳遞的是 Vector2。如果是 2D 游戲,您應該使用不同的構造函數:
https://docs.unity3d.com/ScriptReference/Ray2D-ctor.html
除此之外,正如他們已經在評論中指出的那樣,您需要在 Physics.Raycast 中傳遞 Ray 的 maxDistance 參數:
ray 射線 的起點和方向。
hitInfo 如果返回 true,hitInfo 將包含有關碰撞器被擊中位置的更多信息。(另見:RaycastHit)。
maxDistance 光線應檢查碰撞的最大距離。
如果要使用圖層,則需要一個額外的參數:
layerMask 一個圖層蒙版,用于在投射光線時選擇性地忽略碰撞器。
https://docs.unity3d.com/ScriptReference/Physics.Raycast.html
- 2 回答
- 0 關注
- 197 瀏覽
添加回答
舉報