如何使用滑块统一旋转关节

Posted

技术标签:

【中文标题】如何使用滑块统一旋转关节【英文标题】:how to use slider to rotate the joint in unity 【发布时间】:2022-01-20 04:54:59 【问题描述】:

我使用滑块来改变关节角度,这是我的代码。

void Update()
    

a = sliderx.GetComponent<slider>().value;
b = slidery.GetComponent<slider>().value;
headjoint.transform.Rotate(a, b, 0);
    


在我滑动杆后,关节会旋转并且不会停止。喜欢

a += 值

而不是

a = 值

,滑块没有给出确定的数字?

为什么?我需要使用 eularangle 吗?

当我使用时

headjoint.transform.rotation = Quaternion.Euler(a, b, 0); 

它在运行时将我的对象的旋转角度更改为 0,0,0

有什么想法吗?

【问题讨论】:

"并且在我滑动杆后,关节会旋转并且不会停止" -> Update() 中有 headjoint.transform.Rotate(a, b, 0); 吗?请显示您正在处理旋转的整个单一行为 sn-p 嗨,我已将其放入 update() @rustyBucketBay 我不是说你应该把它放在那里,我在问,因为如果它在更新中,你的旋转不停止是正常的。如果您需要准确的帮助,请提供整个 sn-p。无法评估代码的备用部分不知道它们在哪里被调用的问题 【参考方案1】:

Rotate 顾名思义,将对象旋转给定的量。如果你不断地用相同的值调用它,你的对象就会不断地旋转大约相同的量。

您宁愿设置轮播。

你的尝试

headjoint.transform.rotation = Quaternion.Euler(sliderX.value, sliderY.value, 0);

实际上很接近,是的。 但是默认Rotate应用于本地空间。所以如果你想要同样的行为,你宁愿使用

// First of all use the correct type and don't use GetComponent repeatedly
public Slider sliderX;
public Slider sliderY;

void Update()

    headjoint.transform.localRotation = Quaternion.Euler(sliderX.value, sliderY.value, 0);

【讨论】:

以上是关于如何使用滑块统一旋转关节的主要内容,如果未能解决你的问题,请参考以下文章

如何像在 MotionBuilder 中一样计算旋转

如何快速制作垂直滑块?

如何计算每个骨骼的起始矩阵(t-pose)(使用 collada 和 opengl)

7.Libgdx扩展学习之Box2D_距离关节 旋转关节

7.Libgdx扩展学习之Box2D_距离关节 旋转关节

如何使用 jQuery 自定义动画 <ul> 轮播滑块?