【发布时间】:2016-05-19 09:44:48
【问题描述】:
我编写了一个脚本,通过光线投射将对象移动到地形上的位置,但是我似乎一辈子都无法让这个移动变得平滑。我已经尝试了各种各样的方法来解决这个问题(你可能可以通过下面注释掉的代码量来判断);禁用各种刚体变量,但无济于事。
一种(某种)有效的方法是禁用附加到对象的对撞机,但这会导致对象无意中沉入地形之下。
谁能告诉我解决这个问题的最佳方法是什么?我觉得这应该很简单,但我把它复杂化了。
//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;
}
function moveObject(modObj: GameObject, initPos: Vector3, initRotation: Quaternion) {
//Debug.Log("Moving Object");
var hit: RaycastHit;
var foundHit: boolean = false;
foundHit = Physics.Raycast(transform.position, transform.forward, hit);
//Debug.DrawRay(transform.position, transform.forward, Color.blue);
if (foundHit && hit.transform.tag == "Terrain") {
modifyObjGUIscript.activateMoveDisplay(initPos, hit.point);
// var meshHalfHeight = modObj.GetComponent.<MeshRenderer>().bounds.size.y /2; //helps account for large and small objects
modObj.transform.position = hit.point; //***method 01***
// modObj.transform.position = Vector3.Lerp(initPos, hit.point, speed); //***method 02***
// modObj.transform.position = Vector3.SmoothDamp(initPos, hit.point, velocity, smoothTime); //***method 02***
// modObj.transform.position.y = modObj.transform.position.y + meshHalfHeight + hoverHeight;
modObj.transform.rotation = initRotation;
}
}
【问题讨论】:
标签: unity3d raycasting rigid-bodies