C# 当我做SetParent()时,我的孩子离父母很远

C# 当我做SetParent()时,我的孩子离父母很远,c#,unity3d,C#,Unity3d,我试图制作一个玩家的对象子对象,以跟随玩家的移动,我不希望我的孩子离父对象太远,但不要太近,当我制作玩家的对象子对象时,它会远离玩家,但在变换中,它看起来有类似的坐标。发生这种情况是因为我希望成为子对象的对象在y轴上有一个动画 关于代码,我有一个oncliisionenter方法,它增加变量顺序,然后: if(order == 2) { Object1.transform.SetParent(playerLocation); //playerLocation already is a T

我试图制作一个玩家的对象子对象,以跟随玩家的移动,我不希望我的孩子离父对象太远,但不要太近,当我制作玩家的对象子对象时,它会远离玩家,但在变换中,它看起来有类似的坐标。发生这种情况是因为我希望成为子对象的对象在y轴上有一个动画

关于代码,我有一个
oncliisionenter
方法,它增加变量
顺序
,然后:

if(order == 2)
{
    Object1.transform.SetParent(playerLocation); //playerLocation already is a Transform
}
就这么简单。但经过一点讨论,我发现问题是因为动画的值总是在变化,所以我不认为这是一个代码问题

我将在这里留下一段视频,看看发生了什么:


感谢您的关注。

您确认问题实际上是由动画师引起的

问题是,只要任何AnimationClip中的某个特性存在任何关键帧,则动画师就会像“块”一样按住该关键帧并覆盖该值。在您的例子中,它似乎是一个动画的
localPosition
,因此子对象总是获得到其父对象的偏移量

我所知道的唯一解决方案是让球体对象在默认情况下始终具有父对象

Object1Parent
|-- Object1 (+Animator)
然后,让脚本不更改球体的父对象,而是更改其父对象,以便本地动画保持不变:

Player
|-- Object1Parent
    |-- Object1 (+Animator)
然后在脚本中,只需引用父对象,或者使用

Object1.transform.parent.SetParent(playerLocation);

您确认问题实际上是由动画师引起的

问题是,只要任何AnimationClip中的某个特性存在任何关键帧,则动画师就会像“块”一样按住该关键帧并覆盖该值。在您的例子中,它似乎是一个动画的
localPosition
,因此子对象总是获得到其父对象的偏移量

我所知道的唯一解决方案是让球体对象在默认情况下始终具有父对象

Object1Parent
|-- Object1 (+Animator)
然后,让脚本不更改球体的父对象,而是更改其父对象,以便本地动画保持不变:

Player
|-- Object1Parent
    |-- Object1 (+Animator)
然后在脚本中,只需引用父对象,或者使用

Object1.transform.parent.SetParent(playerLocation);

没有足够的信息来重现这个问题。请提供足够的代码和配置,以重现问题。如果我发布自己的代码,将更加混乱,因此我试图简化代码,但我可以说我有一个OnCollisionCenter方法,该方法增加了变量顺序,并有一个If(order==2)然后是SetParent行代码。让我问一个问题:禁用动画师会使问题消失吗?如果动画师是问题的一部分,则其配置需要是问题的一部分。目前,仍然没有足够的信息来重现这个问题,所以我投票决定暂缓这个问题。是的,确实如此。嗯,我不知道如何显示动画的配置,你有显示它的想法吗?是的,我的错,我没有想法,问题是因为动画师。我已经有了一个解决方案,但是我很感谢你的帮助。没有足够的信息来重现这个问题。请提供足够的代码和配置,以重现问题。如果我发布自己的代码,将更加混乱,因此我试图简化代码,但我可以说我有一个OnCollisionCenter方法,该方法增加了变量顺序,并有一个If(order==2)然后是SetParent行代码。让我问一个问题:禁用动画师会使问题消失吗?如果动画师是问题的一部分,则其配置需要是问题的一部分。目前,仍然没有足够的信息来重现这个问题,所以我投票决定暂缓这个问题。是的,确实如此。嗯,我不知道如何显示动画的配置,你有显示它的想法吗?是的,我的错,我没有想法,问题是因为动画师。我已经有了一个解决方案,但我很感谢你的帮助。我这么做了,我只是注意到球体正在消失,这是因为在动画中,x和z值总是相同的,并使对象移动。也许我需要再做一次动画。好了,完成了。谢谢你的帮助,理解和浪费时间。我非常感激。我这么做了,我只是注意到球体正在消失,这是因为在动画中,x和z值总是相同的,并使对象移动。也许我需要再做一次动画。好了,完成了。谢谢你的帮助,理解和浪费时间。我非常感激。