我写了一个脚本,通过光线投射将物体移动到地形上的位置,但是我不能为我的生活似乎使这个运动平稳。我已经尝试过各种各样的方法来解决这个问题(正如你可以通过下面注释掉的代码量来判断的那样);禁用各种刚体变量,但无济于事。
(一种)工作的一种方法是禁用附着在物体上的对撞机,但是这会导致物体无意中下沉到地形下面。
任何人都可以告诉我这方面的最佳方法是什么?我觉得这应该很简单,但我过于复杂了。
<tr>
<td class="name">Sarvanna Shikshan- Swapna Navhe Hakka!</td>
<td class="Language">Marathi</td>
<td class="Pages">64</td>
<td class="Author">Vinaya Deshpande</td>
<td class="Publisher">Bharat Gyan Vigyan Samuday (BGVS) Maharashtra</td>
<td class="Category">Uncategorized</td>
<td class="Class 1"> </td>
<td class="Class 2"> </td>
<td class="Class 3"> </td>
<td class="Class 4"> </td>
<td class="Class 5"> </td>
<td class="Class 6"> </td>
</tr>
//Move
if (Input.GetKey(KeyCode.E)) {
// if (Input.GetKeyDown(KeyCode.E))
// {
// modObj.GetComponent(BoxCollider).enabled = false;
initPos = modObj.transform.position;
var initRotation = modObj.transform.rotation;
// }
//
// modObj.GetComponent(Rigidbody).isKinematic = true;
// modObj.GetComponent(Rigidbody).useGravity = false;
moveObject(modObj, initPos, initRotation);
} else {
// modObj.GetComponent(BoxCollider).enabled = true;
// modObj.GetComponent(Rigidbody).isKinematic = false;
// modObj.GetComponent(Rigidbody).useGravity = true;
}
答案 0 :(得分:1)
如果可能的话,你需要调用moveObject来频繁地重新计算位置 - 每一帧。例如来自Update或coroutine:
void Update()
{
modObj.transform.position = Vector3.Lerp(initPos, hit.point, speed);
}
IEnumerator MoveObject(Vector3 initPos, Vector3 endPos, float speed)
{
while (initPos != endPos)
{
modObj.transform.position = Vector3.Lerp(initPos, endPos, speed);
yield return null;
}
}