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

Unity3D中Y轴位置数值不一致问题求助

问题排查与修复

核心问题分析

你的代码存在两个关键问题,直接导致编辑器显示位置和打印数值不一致:

  1. 坐标空间混用:一开始读取的是transform.localPosition(局部坐标),但赋值给的是transform.position(世界坐标)。如果物体有父物体,局部坐标和世界坐标会因为父物体的变换产生差异,自然数值对不上。
  2. 位置变量未实时同步:循环内只更新了本地的position变量,没有每次从transform上读取最新位置。如果有其他逻辑修改物体位置,这个变量会和实际位置脱节,进一步加剧数值偏差。

修复后的代码

using System.Collections;
using UnityEngine;

public class CharacterVisualization : MonoBehaviour
{
    // 统一使用局部坐标(如果需要世界坐标,把所有localPosition换成position即可)
    public IEnumerator UpRising(float finalLocalY, float riseVelocity)
    {
        while (transform.localPosition.y < finalLocalY)
        {
            // 每次从transform读取最新的局部位置
            var currentPos = transform.localPosition;
            // 更新Y轴数值
            currentPos = new Vector3(currentPos.x, currentPos.y + riseVelocity, currentPos.z);
            // 赋值回transform的局部位置
            transform.localPosition = currentPos;

            // 打印验证数值,和编辑器面板的Local Position对应
            Debug.Log($"当前局部Y坐标:{transform.localPosition.y}");
            yield return new WaitForSeconds(0.1f);
        }
    }
}

额外注意事项

  • 如果你的需求是基于世界坐标升起,只需把代码里的localPosition全部替换为position,同时确保finalLocalY参数改为世界坐标的目标Y值。
  • 检查物体是否有父物体:如果父物体的位置/旋转/缩放不为默认值,局部坐标和世界坐标必然存在差异,一定要明确自己需要使用的坐标空间。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 18:10:29