Unity3D 使用备忘(三) 实现相机自动漫游开始、暂停、停止及相机角度切换。
Unity3D 使用备忘(三) 实现相机自动漫游开始、暂停、停止及相机角度切换。
在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;
- <span style="background-color:rgb(255,255,0);">//初始化当前相机</span>
- public GameObject currCamera;
- <span style="background-color:rgb(255,255,0);">//创建开始/暂停自动漫游、停止自动漫游及改变界面的按钮,stopButton表示开始、暂停交替变化;</span>
- public Button stopButton;
- public Button exitButton;
- public Button viewButton;
- <span style="background-color:rgb(255,255,0);">//创建改变界面时相机的位置和旋转角度</span>
- private Vector3 position = new Vector3(-3.37f, 10f,2.9f);
- private Quaternion qu = Quaternion.Euler(90f, -90f, 0);
- <span style="background-color:rgb(255,255,0);">//创建是否点击了改变界面的按钮</span>
- public bool isClickViewButton = false;
- <span style="background-color:rgb(255,255,0);">//MainSceneManager管理对象</span>
- public static MainSceneManager Instance;
- private void Awake()
- {
- <span style="background-color:rgb(255,255,0);">//初始化MainSceneManager管理对象,方便其他cs脚本文件调用时使用。</span>
- MainSceneManager.Instance = this;
- }
- void Start () {
- //游戏物体按轨迹开始移动,这里相当于启动自动漫游路径。
- doTweenPath.DORestart();
- <span style="background-color:rgb(255,255,0);">//这里绑定两个按钮的点击事件</span>
- stopButton.onClick.AddListener(StopAuto);
- exitButton.onClick.AddListener(ExitAuto);
- viewButton.onClick.AddListener(ChangeView);
- }
- <span style="background-color:rgb(255,255,0);">//创建停止/开始自动漫游、退出自动漫游和改变界面的方法</span>
- private void StopAuto()
- {
- <span style="background-color:rgb(255,255,0);">//重新给isClickViewButton赋值为false,然后传值到CameraManager.cs脚本文件中,否则相机无法看向(0,0,0)坐标</span>
- isClickViewButton = false;
- <span style="background-color:rgb(255,255,0);">//在变化过程中执行该方法,停止、开始、停止、开始 </span>
- doTweenPath.DOTogglePause();
- }
- private void ExitAuto()
- {
- <span style="background-color:rgb(255,255,0);">//重新给isClickViewButton赋值为false,然后传值到CameraManager.cs脚本文件中,否则相机无法看向(0,0,0)坐标</span>
- isClickViewButton = false;
- <span style="background-color:rgb(255,255,0);">//变化过程中执行该方法,回到原始位置</span>
- doTweenPath.DORewind();
- }
- private void ChangeView()
- {
- <span style="background-color:rgb(255,255,0);">//点击了ViewButton将isClickViewButton设置为true;然后传值到CameraManager.cs脚本文件中。</span>
- isClickViewButton = true;
- <span style="background-color:rgb(255,255,0);">//1f 秒内 currCamera的坐标变化到position1</span>
- currCamera.transform.DOMove(position, 1f);
- <span style="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 () {
- <span style="background-color:rgb(255,255,0);">//实时接收MainSceneManager中的isClickViewButton属性</span>
- bool isClickViewButton = MainSceneManager.Instance.isClickViewButton;
- <span style="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的效果如下图所示:
在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;
- <span style="background-color:rgb(255,255,0);">//初始化当前相机</span>
- public GameObject currCamera;
- <span style="background-color:rgb(255,255,0);">//创建开始/暂停自动漫游、停止自动漫游及改变界面的按钮,stopButton表示开始、暂停交替变化;</span>
- public Button stopButton;
- public Button exitButton;
- public Button viewButton;
- <span style="background-color:rgb(255,255,0);">//创建改变界面时相机的位置和旋转角度</span>
- private Vector3 position = new Vector3(-3.37f, 10f,2.9f);
- private Quaternion qu = Quaternion.Euler(90f, -90f, 0);
- <span style="background-color:rgb(255,255,0);">//创建是否点击了改变界面的按钮</span>
- public bool isClickViewButton = false;
- <span style="background-color:rgb(255,255,0);">//MainSceneManager管理对象</span>
- public static MainSceneManager Instance;
- private void Awake()
- {
- <span style="background-color:rgb(255,255,0);">//初始化MainSceneManager管理对象,方便其他cs脚本文件调用时使用。</span>
- MainSceneManager.Instance = this;
- }
- void Start () {
- //游戏物体按轨迹开始移动,这里相当于启动自动漫游路径。
- doTweenPath.DORestart();
- <span style="background-color:rgb(255,255,0);">//这里绑定两个按钮的点击事件</span>
- stopButton.onClick.AddListener(StopAuto);
- exitButton.onClick.AddListener(ExitAuto);
- viewButton.onClick.AddListener(ChangeView);
- }
- <span style="background-color:rgb(255,255,0);">//创建停止/开始自动漫游、退出自动漫游和改变界面的方法</span>
- private void StopAuto()
- {
- <span style="background-color:rgb(255,255,0);">//重新给isClickViewButton赋值为false,然后传值到CameraManager.cs脚本文件中,否则相机无法看向(0,0,0)坐标</span>
- isClickViewButton = false;
- <span style="background-color:rgb(255,255,0);">//在变化过程中执行该方法,停止、开始、停止、开始 </span>
- doTweenPath.DOTogglePause();
- }
- private void ExitAuto()
- {
- <span style="background-color:rgb(255,255,0);">//重新给isClickViewButton赋值为false,然后传值到CameraManager.cs脚本文件中,否则相机无法看向(0,0,0)坐标</span>
- isClickViewButton = false;
- <span style="background-color:rgb(255,255,0);">//变化过程中执行该方法,回到原始位置</span>
- doTweenPath.DORewind();
- }
- private void ChangeView()
- {
- <span style="background-color:rgb(255,255,0);">//点击了ViewButton将isClickViewButton设置为true;然后传值到CameraManager.cs脚本文件中。</span>
- isClickViewButton = true;
- <span style="background-color:rgb(255,255,0);">//1f 秒内 currCamera的坐标变化到position1</span>
- currCamera.transform.DOMove(position, 1f);
- <span style="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 () {
- <span style="background-color:rgb(255,255,0);">//实时接收MainSceneManager中的isClickViewButton属性</span>
- bool isClickViewButton = MainSceneManager.Instance.isClickViewButton;
- <span style="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的效果如下图所示: