我正在嘗試使用 Unity 在移動設備上做一個小游戲,但我遇到了迷宮旋轉的問題。
添加背景關系:當您在螢屏上移動手指時,迷宮會自行旋轉。里面有一個球,你需要讓它進入一個牢房才能贏得關卡。
當迷宮旋轉太快時,球會掉下來穿過地面,我不知道如何修復它。我試著玩重力,對撞機......當球在跳躍時(當迷宮快速上下移動時)也是如此。
目前我只是在你摔倒時重置球的位置。
{
ball.transform.position = new Vector3(0, 2, 0);
maze.transform.position = Vector3.zero;
maze.transform.rotation = Quaternion.identity;
}
你們有什么想法嗎?謝謝
uj5u.com熱心網友回復:
在剛體中(對于球),將碰撞檢測設定為連續,在迷宮的剛體中(如果有的話)將碰撞檢測設定為連續動態。希望這可以幫助!
uj5u.com熱心網友回復:
我認為如果你允許玩家自由移動平臺,這是不可避免的。我建議你限制玩家可以傾斜平臺的速度。這樣,球就會有更多的幀數來適應新的坡度
uj5u.com熱心網友回復:
在我參與的傾斜迷宮迷你游戲中,我遇到了類似的問題。理想情況下,實施jkimishere 的解決方案是可行的,但我認為迷宮移動得太快,碰撞無法正確注冊。您需要使用 Lerp 平滑迷宮的旋轉。在我們的例子中,我們有一個帶有傾斜值的壓力板,所以它不會直接轉化為您的移動使用,但可能會給您一個正確的方向。我們用了:
public GameObject maze;
private float _lerpTime;
private bool _isRotating;
private Quaternion _startingRot, _desiredRot;
private void Awake()
{
_startingRot = maze.transform.localRotation;
}
private void Update()
{
//Don't want to move the maze if we don't ask for it
if(!_isRotating)
return;
//Lerp the maze's rotation
_lerpTime = Mathf.Clamp(_lerpTime Time.deltaTime * 0.5f, 0f, 1f);
maze.transform.localRotation = Quaternion.Lerp(_startingRot, _desiredRot, _lerpTime);
//Once the maze gets where it needs to be, stop moving it
if(affectedObject.transform.localRotation.Equals(_desiredRot)
_isRotating = false;
}
private void ActivateTilt()
{
//Set the new starting point of the rotation.
_startingRot = maze.transform.localRotation;
//However you want to calculate the desired rotation here
//Reset our lerp and start rotating again
_lerpTime = 0f;
_isRotating = true;
}
隨著時間的推移,這將緩解迷宮的旋轉。使球能夠適應新的對撞機位置。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/467730.html