0
我已經寫了一個腳本來移動一個對象通過射線投射到地形上的位置,但是我不能爲我的生活似乎使這個運動平穩。我嘗試了所有的方法來試圖解決這個問題(你可以通過下面的註釋代碼的數量來判斷);禁用各種剛體變量,但無濟於事。平滑光線定位
(種類)工作的一種方法是禁用連接到物體的碰撞器,但是這會導致物體無意中下沉到地形下方。
任何人都可以請告訴我最好的方法去做這件事嗎?我覺得這應該很簡單,但我過分複雜。
//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;
}
}
對。還要注意,你經常這樣做:有一個新的獨立標記(即空GameObject)稱爲「Tracker」。但是爲了開發目的,它上面有一個小的白色立方體,所以你可以看到它。將Jorel的腳本放在Tracker上(不在您的實際飛機上)。讓用戶真正引導,等等,Tracker。接下來,讓你的飛機實際上*追蹤追蹤到處*。通過這種方式,您可以*使飛機上的Y *運動平滑;這樣做通常更簡單和合乎邏輯。 – Fattie
@joreldraw對不起,在我的文章中應該已經更清楚了:''moveObject()'函數正在從'FixedUpdate()'的'Input.GetKey(KeyCode.E)'中調用;這是否符合你所說的? 我也改變了從使用對象的轉換到使用它的剛體的定位: 'var movRb = modObj.GetComponent。 ();' 'movRb.position = Vector3.Lerp(initPos,hit.point,speed);' 根據我收到的其他反饋。這無疑有助於解決問題。任何進一步的反饋將不勝感激。 –
嘗試在一段時間內調用協程,我爲此編輯協程。 – joreldraw