You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity游戏对象位置重置异常求助:触发后对象旋转而非归位

Unity游戏对象X轴越界重置位置问题修复

修正后的完整代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerController : MonoBehaviour
{
    public float playerSpeed = 5.0f;
    private Rigidbody playerRb;
    private Vector3 startPos;

    void Start() 
    {
        playerRb = GetComponent<Rigidbody>();
        // 直接获取当前对象的初始位置,无需额外查找
        startPos = transform.position;
        // 冻结刚体旋转,避免加力时出现异常旋转
        playerRb.freezeRotation = true;
    }
    
    void RestartPlayerPosition() 
    {
        // 修正条件:仅当X轴超出±10范围时触发重置
        if(transform.position.x > 10 || transform.position.x < -10)
        {
            // 重置到初始位置
            transform.position = startPos;
            // 清空刚体速度,避免重置后立刻再次越界
            playerRb.velocity = Vector3.zero;
            playerRb.angularVelocity = Vector3.zero;
        }
    }

    void Update()
    {
        float horizontalInput = Input.GetAxis("Horizontal");
        float verticalInput = Input.GetAxis("Vertical");

        playerRb.AddForce(Vector3.forward * playerSpeed * verticalInput);
        playerRb.AddForce(Vector3.right * playerSpeed * horizontalInput);

        RestartPlayerPosition();
    }
}

问题拆解与修复说明

  • 条件判断逻辑错误:原代码中transform.position.x > 10 || transform.position.x < 10的逻辑等价于「所有X轴位置不等于10的情况」,导致游戏启动后无限触发位置重置,对象根本无法移动。修正为transform.position.x > 10 || transform.position.x < -10,仅当X轴超出±10范围时才触发重置。
  • 初始位置获取冗余且易出错:原代码用GameObject.Find("Player")获取初始位置完全没必要——脚本本身挂载在Player对象上,直接用transform.position即可。Find方法不仅运行效率低,还可能因场景中存在同名对象导致获取错误的位置。
  • 刚体旋转异常:给Rigidbody施加力时,如果未冻结旋转,刚体受侧向力会产生扭矩导致旋转。通过在Start方法中设置playerRb.freezeRotation = true,可以强制冻结刚体的所有旋转,也可以在Inspector面板的Rigidbody组件中手动勾选「Freeze Rotation」的X/Y/Z选项。
  • 重置位置未清空刚体速度:仅修改对象位置而不清空刚体速度的话,重置后的对象会带着之前的速度继续移动,立刻再次触发越界重置。因此在重置位置时,需要同时清空刚体的线速度velocity和角速度angularVelocity。

内容的提问来源于stack exchange,提问作者Single96

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 03:41:41