【问题标题】:UNITY 2D - Can't change Child's positionUNITY 2D - 不能改变孩子的位置
【发布时间】:2018-07-16 11:32:47
【问题描述】:

我创建了一个项目并在其中放置了一个角色,一个忍者。我画了他身体的每一部分,并将它们组合成一个有组织的游戏对象。它是这样组织的。 Ninja Organization

注意:Left_Arm GameObject 有一个父对象,因此它可以像真正的手臂一样被肩膀旋转

现在问题来了。我已经搜索和搜索了几个小时,但还没有找到一个解决方案来解决肯定如此简单和愚蠢的事情。在一个脚本中,我尝试移动 Left_Arm 父级以制作一个小动画。这是脚本:

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

public class NinjaShooting : MonoBehaviour {

    [Header("GameObjects")]
    public Transform leftArm;
    public Transform rightArm;

    [Header("Other")]
    public bool shooting = false;

    // Update is called once per frame
    void Update () {

            Debug.Log(leftArm.localPosition);
            leftArm.localPosition = new Vector3(100, 100, 100);
            Debug.Log(leftArm.localPosition);
            shooting = false;

    }  
}

公共变量全部赋值,一切正常,控制台没有错误,但leftArm.localPosition = new Vector3(100, 100, 100);这行似乎对我的角色没有任何影响。

这是运行后的控制台:Image

控制台似乎没问题。起始位置是 (-0.3, 0.2, 0),在 leftArm.localPosition = new Vector3(100, 100, 100); 之后,该位置被调试为 (100, 100, 100),应该是这样。但是检查器中的位置发生了变化,游戏窗口中也没有……

此外,每帧都会调试起始位置,但不应该这样做。所以我假设我的立场没有被考虑在内。

我已经这样做了很多次,而且一直都有效。

我什至尝试了一个新项目并重新创建了它,然后,神秘地,它成功了。所以我的组织或其他地方出了点问题。对不起,如果这是一个愚蠢的问题。

提前谢谢你

PS : 这是编辑器中的脚本图像,以防万一出现问题:Image

PS : 这个脚本很奇怪,因为我简化了它:)。但这也行不通

【问题讨论】:

  • 游戏对象中是否有任何动画/动画师处于活动状态?您是否尝试过逐帧浏览? (暂停并使用跳帧按钮,两者都在“在编辑器中播放”按钮旁边)。
  • 尝试将字段类型“Transform”更改为“GameObject”并将手臂拖入其中。
  • @Kwinten 是的,有动画和动画师,但只是想让手臂移动。也许动画是我的问题中使用的错误词。是的,我已经尝试逐帧进行。 t 我看不到任何问题....
  • @Immorality 我试过了也没有用....
  • 我说的是 Unity AnimatorAnimation 组件。在许多情况下,动画将“锁定”它们所针对的属性,即使它们没有为任何东西设置动画。尝试禁用所有此类组件,仅使用“自定义”脚本来激活手臂的动画。

标签: unity3d position 2d


【解决方案1】:

此问题可能是由Animator 控制器“锁定”属性引起的,而这些属性实际上并不是其Motion 的一部分。在这种情况下,它“锁定”了Transform 的位置。当您尝试修改这些属性时,Unity 不会报告任何警告或错误,即使它们是由动画控制的。

典型的违规行为是在动画控制器中将Animation StatesWrite Defaults 属性设置为true。查看here 的文档以了解Write Defaults 的作用,这对您来说会更有意义。对于所有不需要的动画状态,我建议将其更改为 false。

【讨论】:

  • 你的权利!当我禁用 Animator 时,它可以工作,但即使我将每个状态都写入默认设置为 false。它不起作用。有什么问题 ?抱歉问了这么多问题...
  • 尝试一一禁用和启用动画,找出违规的Animator。当您找到导致问题的原因时,请上传屏幕截图以便我们查看。最好知道您正在为层次结构中的哪些对象设置动画。一般来说,为根对象设置动画是不好的做法(因为它可能会导致这样的问题)。
  • 更改写入默认值没有做任何事情。但是我将 Update() 更改为 LateUpadte() 并解决了它。再次感谢你! :)
猜你喜欢
  • 1970-01-01
  • 2019-09-03
  • 2021-07-25
  • 2020-12-02
  • 1970-01-01
  • 2014-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多