平滑的光线定位

时间:2016-05-19 09:44:48

标签: unity3d raycasting rigid-bodies

我写了一个脚本,通过光线投射将物体移动到地形上的位置,但是我不能为我的生活似乎使这个运动平稳。我已经尝试过各种各样的方法来解决这个问题(正如你可以通过下面注释掉的代码量来判断的那样);禁用各种刚体变量,但无济于事。

(一种)工作的一种方法是禁用附着在物体上的对撞机,但是这会导致物体无意中下沉到地形下面。

任何人都可以告诉我这方面的最佳方法是什么?我觉得这应该很简单,但我过于复杂了。

<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">&nbsp;</td>
  <td class="Class 2">&nbsp;</td>
  <td class="Class 3">&nbsp;</td>
  <td class="Class 4">&nbsp;</td>
  <td class="Class 5">&nbsp;</td>
  <td class="Class 6">&nbsp;</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; 
        }

1 个答案:

答案 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;
    }
}