weixin_59079963 2024-04-27 20:01 采纳率: 0%
浏览 32

tranform的position无法更改.

在unity3d中,每当运行项目,Armature物体的position自动变成(0,-1,0),也无法更改(不过该物体transform组件的rotation和scale仍可改动),重启了u3d也无济于事,脚本文件挂载在父物体上,除了控制父物体global行走和跳跃的代码,也没有涉及到更改该物体position的代码,其他的物体的position可自由改动。

img

img

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-04-27 20:01
    关注

    引自免费微信小程序:皆我百晓生

    看起来你在Unity中遇到了一个关于Armature对象位置的问题。在这种情况下,有几种可能的原因导致Armature的位置无法被改变。让我们逐步排查这个问题。

    首先,确保没有任何外部因素影响Armature的位置。检查是否有任何脚本、约束(Constraints)或者 parenting 设置可能导致其位置固定。在Unity中,可以按照以下步骤进行检查:

    1. 打开Armature游戏对象的Inspector面板。
    2. 确认没有启用任何限制位置(Position)的刚体约束(Rigidbody Constraints)。
    3. Constraints部分,取消勾选所有位置相关的选项(Translation X, Translation Y, Translation Z)。

    如果你的Armature是骨骼动画系统的一部分,比如使用了Animator组件,那么可能是动画设置导致的。检查动画控制器(Animator Controller)中的动画状态机(Animation State Machine)和动画 clips,确认没有对位置进行硬编码(Clamped)或者使用了Offset。这可以通过以下步骤完成:

    1. 找到Armature上的Animator组件。
    2. 双击打开Animator Controller窗口。
    3. 检查各状态机(State Machines)下的各个动画 clips,在Motion列下查看是否应用了Position Offset。
    4. 如果存在,删除或调整这些Offset。

    如果以上都没有问题,那么可能是场景中其他脚本无意间影响了Armature的位置。检查整个项目的脚本,特别是那些与运动控制相关或者遍历场景中所有对象的脚本,确保没有意外地修改Armature的位置。这是一个基本的搜索脚本的例子,用于查找可能影响位置的代码:

    using UnityEngine;
    
    public class PositionChanger : MonoBehaviour
    {
        private void Update()
        {
            // 检查Update函数中是否存在改变Armature位置的代码
            if (FindObjectOfType<Armature>().transform.position != Vector3.zero)
            {
                Debug.LogError("Armature position is being modified in Update function");
            }
        }
    
        private void FixedUpdate()
        {
            // 同样检查FixedUpdate函数
            if (FindObjectOfType<Armature>().transform.position != Vector3.zero)
            {
                Debug.LogError("Armature position is being modified in FixedUpdate function");
            }
        }
    }
    

    将这段代码附加到任意空的游戏对象上,它会监控Update和FixedUpdate函数中对Armature位置的修改,并在控制台输出错误信息。

    如果上述方法都无法解决问题,那么可能是Unity编辑器的缓存或者配置文件出现了问题。尝试执行以下操作:

    1. 清除缓存:右键点击Unity快捷方式 -> 属性 -> 在目标文本框中添加 -batchmode -nographics -quit -clearcache,然后按Enter启动Unity。
    2. 删除Library文件夹:关闭Unity后,找到项目根目录下的Library文件夹,将其备份后删除,再重新打开Unity让其重建。

    如果问题依然存在,建议备份项目并创建一个新的项目,然后逐个导入资源,这样可以帮助定位是哪个资源或特定设置导致的问题。

    请根据这些步骤逐一排查,相信你应该能找到问题所在。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月27日