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


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


关注引自免费微信小程序:皆我百晓生
看起来你在Unity中遇到了一个关于Armature对象位置的问题。在这种情况下,有几种可能的原因导致Armature的位置无法被改变。让我们逐步排查这个问题。
首先,确保没有任何外部因素影响Armature的位置。检查是否有任何脚本、约束(Constraints)或者 parenting 设置可能导致其位置固定。在Unity中,可以按照以下步骤进行检查:
Constraints部分,取消勾选所有位置相关的选项(Translation X, Translation Y, Translation Z)。如果你的Armature是骨骼动画系统的一部分,比如使用了Animator组件,那么可能是动画设置导致的。检查动画控制器(Animator Controller)中的动画状态机(Animation State Machine)和动画 clips,确认没有对位置进行硬编码(Clamped)或者使用了Offset。这可以通过以下步骤完成:
Motion列下查看是否应用了Position 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编辑器的缓存或者配置文件出现了问题。尝试执行以下操作:
-batchmode -nographics -quit -clearcache,然后按Enter启动Unity。Library文件夹,将其备份后删除,再重新打开Unity让其重建。如果问题依然存在,建议备份项目并创建一个新的项目,然后逐个导入资源,这样可以帮助定位是哪个资源或特定设置导致的问题。
请根据这些步骤逐一排查,相信你应该能找到问题所在。