我想在Unity中更改手部跟踪的增益,但我在尝试移动手部时遇到了一些问题。事实上,当我试图移动右手时,有一个错误告诉我手的位置是无限的。你对此有想法吗?我在论坛上看到了很多东西,但我不明白问题出在哪里。
这是我的代码:
// Variables
public GameObject hand;
public GameObject handRenderer;
private Vector3 posOrigin;
// Settings
public float gain;
// Start is called before the first frame update
void Start()
{
Vector3 posOrigin = handRenderer.transform.position;
}
// Update is called once per frame
void Update()
{
float dx = transfo(handRenderer.transform.position.x, posOrigin.x);
float dz = transfo(handRenderer.transform.position.z, posOrigin.z);
hand.transform.position = new Vector3(posOrigin.x + dx, 0, posOrigin.z + dz);
}
float transfo ( float origin, float actual )
{
return gain * (actual - origin);
}
手渲染器是我计算的重点,因为它不能直接用于对象RightHand。非常感谢
首先在中的Start
中
Vector3 posOrigin = handRenderer.transform.position;
您正在创建一个新的局部变量。
你更想分配你的类字段
void Start()
{
posOrigin = handRenderer.transform.position;
}
然后CCD_ 2似乎被反向使用。。它应该始终是
current - original
但你首先传入当前的,然后传入导致的原始
original - current
我认为总的来说,你应该一步到位,而不是使用这种方法,例如
var delta = handRenderer.transform.position - posOrigin;
var sizedDelta = delta * gain;
sizedDelta.y = 0;
hand.transform.position = posOrigin + sizedDelta;
然后确保您没有意外地在hand
和handRenderer
中引用相同的对象,或者handRenderer
没有嵌套在hand
下。
否则,每当在Update
中移动hand
时,也移动handRenderer
,计算基于=>示例
- 在0,0,0时初始化,增益=2
- 将handRenderer移动到
1,1,1
- =>将手移至
2,2,2
- 将hanRenderer移动到现在的
3,3,3
- =>下一帧移到
6,6,6
- mves handRenderer到现在的
9, 9, 9
- =>下一帧移到
18,18,18