【发布时间】:2019-12-04 06:54:12
【问题描述】:
似乎很难让已配置的求解器在某个方向上实例化,就像在 SolverTarget 之前一样。看来您必须手动设置转换值、SolverHandler 的目标值,并在您正在使用的 Solver 上另外调用 SnapTo,否则您将进行某种插值。 我正在尝试使用 RadialView 进行此操作,但我已经花了很长时间才能正确完成旋转和所有操作...
正确的方法是什么?设置位置、旋转,完成了吗?
【问题讨论】:
标签: mrtk
似乎很难让已配置的求解器在某个方向上实例化,就像在 SolverTarget 之前一样。看来您必须手动设置转换值、SolverHandler 的目标值,并在您正在使用的 Solver 上另外调用 SnapTo,否则您将进行某种插值。 我正在尝试使用 RadialView 进行此操作,但我已经花了很长时间才能正确完成旋转和所有操作...
正确的方法是什么?设置位置、旋转,完成了吗?
【问题讨论】:
标签: mrtk
如果具有 RadialView 的对象是在编辑时创建的并且处于活动状态,它将按照您的描述捕捉其方向。
不幸的是,实例化一个对象,或使用解算器重新启用现有对象将导致它“解算”到其原始位置。我发现强制正确位置的最简单方法是将单帧的 lerp 时间设置为“0”。
[SerializeField]
private GameObject objectWithSolver = null;
private IEnumerator InitialSolve(Solver solver)
{
float originalMoveLerp = solver.MoveLerpTime;
float originalRotateLerp = solver.RotateLerpTime;
solver.MoveLerpTime = 0.0f;
solver.RotateLerpTime = 0.0f;
yield return null;
solver.MoveLerpTime = originalMoveLerp;
solver.RotateLerpTime = originalRotateLerp;
}
void Update()
{
if (Input.GetKeyDown(KeyCode.J))
{
GameObject newObject = Instantiate(objectWithSolver);
newObject.SetActive(true);
StartCoroutine(InitialSolve(newObject.GetComponent<Solver>()));
}
}
也就是说,这听起来像是一个很棒的功能请求。
【讨论】: