在上一篇我們完成面的旋轉,卻發現旋轉途中若點擊放開,面會停留在旋轉途中,今天我們就要來解決這個問題。
目錄
面的旋轉
遊戲機制
private bool autoRotating = false;
private Quaternion targetQuaternion;
RotateToRightAngle()函式中:
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滅火遊戲的製作,明天見!