Unity3D 使用備忘(三) 實現相機自動漫遊開始、暫停、停止及相機角度切換。
(1)將Main Camera遊戲物體附加給SceneManager的MainSceneManager(Script)元件下的doToweenPath屬性(可通過點選doTweenPath在Scene中選擇Main Camera 或者直接將Main Camera 拖拽到doToweenPath屬性中)。
(2)我們先將MainSceneManager.cs指令碼檔案進行完善。
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using UnityEngine.UI;
- using DG.Tweening; //DOTween的名稱空間
- using System;
- public class MainSceneManager : MonoBehaviour {
- //初始化按軌跡移動的遊戲物體
- public DOTweenPath doTweenPath;
- <spanstyle="background-color:rgb(255,255,0);">//初始化當前相機</span>
- public GameObject currCamera;
- <spanstyle="background-color:rgb(255,255,0);">//建立開始/暫停自動漫遊、停止自動漫遊及改變介面的按鈕,stopButton表示開始、暫停交替變化;</span>
- public Button stopButton;
- public Button exitButton;
- public Button viewButton;
- <spanstyle="background-color:rgb(255,255,0);">//建立改變介面時相機的位置和旋轉角度</span>
- private Vector3 position
- private Quaternion qu = Quaternion.Euler(90f, -90f, 0);
- <spanstyle="background-color:rgb(255,255,0);">//建立是否點選了改變介面的按鈕</span>
- public bool isClickViewButton = false;
- <spanstyle="background-color:rgb(255,255,0);">//MainSceneManager管理物件</span>
- public static MainSceneManager Instance;
- private void Awake()
- {
- <spanstyle="background-color:rgb(255,255,0);">//初始化MainSceneManager管理物件,方便其他cs指令碼檔案呼叫時使用。</span>
- MainSceneManager.Instance = this;
- }
- void Start () {
- //遊戲物體按軌跡開始移動,這裡相當於啟動自動漫遊路徑。
- doTweenPath.DORestart();
- <spanstyle="background-color:rgb(255,255,0);">//這裡繫結兩個按鈕的點選事件</span>
- stopButton.onClick.AddListener(StopAuto);
- exitButton.onClick.AddListener(ExitAuto);
- viewButton.onClick.AddListener(ChangeView);
- }
- <spanstyle="background-color:rgb(255,255,0);">//建立停止/開始自動漫遊、退出自動漫遊和改變介面的方法</span>
- private void StopAuto()
- {
- <spanstyle="background-color:rgb(255,255,0);">//重新給isClickViewButton賦值為false,然後傳值到CameraManager.cs指令碼檔案中,否則相機無法看向(0,0,0)座標</span>
- isClickViewButton = false;
- <spanstyle="background-color:rgb(255,255,0);">//在變化過程中執行該方法,停止、開始、停止、開始 </span>
- doTweenPath.DOTogglePause();
- }
- private void ExitAuto()
- {
- <spanstyle="background-color:rgb(255,255,0);">//重新給isClickViewButton賦值為false,然後傳值到CameraManager.cs指令碼檔案中,否則相機無法看向(0,0,0)座標</span>
- isClickViewButton = false;
- <spanstyle="background-color:rgb(255,255,0);">//變化過程中執行該方法,回到原始位置</span>
- doTweenPath.DORewind();
- }
- private void ChangeView()
- {
- <spanstyle="background-color:rgb(255,255,0);">//點選了ViewButton將isClickViewButton設定為true;然後傳值到CameraManager.cs指令碼檔案中。</span>
- isClickViewButton = true;
- <spanstyle="background-color:rgb(255,255,0);">//1f 秒內 currCamera的座標變化到position1</span>
- currCamera.transform.DOMove(position, 1f);
- <spanstyle="background-color:rgb(255,255,0);">//1f 秒內 currCamera的旋轉角度變化到qu1 </span>
- currCamera.transform.DORotateQuaternion(qu, 3f);
- }
- void Update () {
- }
- }
(3)將CameraManager.cs指令碼檔案進行完善:
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using DG.Tweening; //DOTween的名稱空間
- public class CameraManager : MonoBehaviour {
- public static CameraManager Instance; //相機管理物件
- void Awake()
- {
- CameraManager.Instance = this; //在這裡初始化CameraManager
- }
- // Use this for initialization
- void Start () {
- }
- // Update is called once per frame
- void Update () {
- <spanstyle="background-color:rgb(255,255,0);">//實時接收MainSceneManager中的isClickViewButton屬性</span>
- bool isClickViewButton = MainSceneManager.Instance.isClickViewButton;
- <spanstyle="background-color:rgb(255,255,0);">//判斷是否點選了ViewButton,這一步很重要,否則MainCamera一直看向(0,0,0)座標,無法完成角度的變化</span>
- if (isClickViewButton==false) {
- //使相機始終看向座標(0,0,0)
- this.transform.DOLookAt(new Vector3(0, 0, 0), 0.0001f);
- }
- }
- }
(4)回到Unit3D介面。在Hierarchy檢視中單擊SceneManger遊戲物體,其Inspector檢視中如下顯示:
上圖中紅色線框內的屬性為SceneManager管理的遊戲物件。CurrentCamera為當前相機,我們先直接將Hierarhy檢視中的MainCamera拖拽到該文字框內。
(5)在Hierarchy檢視中建立3個Button,並將名字和Text中的內容進行更改,如下圖:
(6)將新建立的3個Button遊戲物體附加到SceneManager遊戲物體的3個Button屬性中。此時SceneManager的Inspector檢視如下顯示。
上圖為將CurrCamera和3個Button附加到SceneManager後的效果。
(7)開始進行遊戲測試:
1、點選Stop/StartButton的效果如下圖所示:
2、點選ExitAuto的效果如下圖所示:
3、點選ChangeView的效果如下圖所示:
注:上述3幅圖中都是通過點選按鈕發生的變化,在圖裡麵點擊按鈕時按鈕顏色瞬間發生了輕微的變灰,可能看的不是特別清楚。