# Day 15 | 魔術方塊AR遊戲開發Part4 - 面的旋轉(下)+遊戲機制 ###### tags: `Unity` `AR手遊` 在上一篇我們完成面的旋轉,卻發現旋轉途中若點擊放開,面會停留在旋轉途中,今天我們就要來解決這個問題。 > **目錄** > 面的旋轉 > 遊戲機制 ## 面的旋轉 ### 旋轉到正確角度 * 新增布林變數控制是否自動旋轉 * 新增Quaternion來儲存數值 ``` private bool autoRotating = false; private Quaternion targetQuaternion; ``` RotateToRightAngle()函式中: * 新增vue變數紀錄旋轉角度 * 使用Mathf.Round()來得到最靠近90的角度 ``` public void RotateToRightAngle() { Vector3 vec = transform.localEulerAngles; vec.x = Mathf.Round(vec.x / 90) * 90; vec.y = Mathf.Round(vec.y / 90) * 90; vec.z = Mathf.Round(vec.z / 90) * 90; targetQuaternion.eulerAngles = vec; autoRotating = true; } ``` 並在Update()中加入 RotateToRightAngle() ### 自動旋轉 新增自動旋轉速度 ``` private float speed = 300f; ``` AutoRotate()中: * 計算旋轉一步的時間 * 如果開始旋轉,旋轉到底 * 旋轉角度 * 更新面的狀態及布林值 ``` private void AutoRotate() { dragging = false; var step = speed * Time.deltaTime; transform.localRotation = Quaternion.RotateTowards(transform.localRotation, targetQuaternion, step); //如果開始旋轉,旋轉到底 if (Quaternion.Angle(transform.localRotation, targetQuaternion) <= 1) { transform.localRotation = targetQuaternion; readCube.ReadState(); autoRotating = false; dragging = false; } } ``` 在Update()中新增是否執行AutoRotate()的程式 ``` if (autoRotating) { AutoRotate(); } ``` ### 取消選取 在CubeStae中新增PutDown(),之後才可以選取別的面 ``` public void PutDown(List<GameObject> littleCubes, Transform pivot) { foreach (GameObject littleCube in littleCubes) { if (littleCube != littleCubes[4]) { littleCube.transform.parent.transform.parent = pivot; } } } ``` 並在AutoRotate()加入 ``` cubeState.PutDown(activeSide, transform.parent); ``` 魔術方塊的旋轉就完成嘍! ## 遊戲機制 魔術方塊的機制完成後,要來新增遊戲機制了。 ### 碰撞 首先要先將角色與道具放置在魔術方塊上  新增Rigidbody,因為不需要重力,所以勾選 Is Kinematic  並且幫他們都加上碰撞器,因為遊戲機制是在同一面即可,碰撞器大小要確保可以碰到同面的道具。 新增PlayerController(),並加入碰撞偵測 ``` private void OnTriggerEnter(Collider other) { Debug.Log("Coll" + other.gameObject.name); } ``` ### 場景切換 在撰寫場景切換程式碼前,要先在File>Build Settings>Scenes In Build中,確認場景都有被加入。 新增SceneManager,並在其中加入場景傳換、重新開始的程式碼。 ``` //場景轉換 SceneManager.LoadScene(0); ``` ``` //重新開始 SceneManager.LoadScene(SceneManager.GetActiveScene().name); ``` 如此一來,魔術方塊AR遊戲就完成嘍! --- 以上就是魔術方塊AR遊戲的教學,下一篇會是FPS滅火遊戲的製作,明天見!
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up