Unity3D 使用备忘(三) 实现相机自动漫游开始、暂停、停止及相机角度切换。 您所在的位置:网站首页 unity第一人称切换 Unity3D 使用备忘(三) 实现相机自动漫游开始、暂停、停止及相机角度切换。

Unity3D 使用备忘(三) 实现相机自动漫游开始、暂停、停止及相机角度切换。

2023-08-23 01:48| 来源: 网络整理| 查看: 265

    在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; //初始化当前相机 public GameObject currCamera; //创建开始/暂停自动漫游、停止自动漫游及改变界面的按钮,stopButton表示开始、暂停交替变化; public Button stopButton; public Button exitButton; public Button viewButton; //创建改变界面时相机的位置和旋转角度 private Vector3 position = new Vector3(-3.37f, 10f,2.9f); private Quaternion qu = Quaternion.Euler(90f, -90f, 0); //创建是否点击了改变界面的按钮 public bool isClickViewButton = false; //MainSceneManager管理对象 public static MainSceneManager Instance; private void Awake() { //初始化MainSceneManager管理对象,方便其他cs脚本文件调用时使用。 MainSceneManager.Instance = this; } void Start () { //游戏物体按轨迹开始移动,这里相当于启动自动漫游路径。 doTweenPath.DORestart(); //这里绑定两个按钮的点击事件 stopButton.onClick.AddListener(StopAuto); exitButton.onClick.AddListener(ExitAuto); viewButton.onClick.AddListener(ChangeView); } //创建停止/开始自动漫游、退出自动漫游和改变界面的方法 private void StopAuto() { //重新给isClickViewButton赋值为false,然后传值到CameraManager.cs脚本文件中,否则相机无法看向(0,0,0)坐标 isClickViewButton = false; //在变化过程中执行该方法,停止、开始、停止、开始 doTweenPath.DOTogglePause(); } private void ExitAuto() { //重新给isClickViewButton赋值为false,然后传值到CameraManager.cs脚本文件中,否则相机无法看向(0,0,0)坐标 isClickViewButton = false; //变化过程中执行该方法,回到原始位置 doTweenPath.DORewind(); } private void ChangeView() { //点击了ViewButton将isClickViewButton设置为true;然后传值到CameraManager.cs脚本文件中。 isClickViewButton = true; //1f 秒内 currCamera的坐标变化到position1 currCamera.transform.DOMove(position, 1f); //1f 秒内 currCamera的旋转角度变化到qu1 currCamera.transform.DORotateQuaternion(qu, 3f); } void Update () { } }    上面背景为黄色的部分为本次添加的代码,注意下面和CameraManager.cs脚本文件的联系;

(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 () { //实时接收MainSceneManager中的isClickViewButton属性 bool isClickViewButton = MainSceneManager.Instance.isClickViewButton; //判断是否点击了ViewButton,这一步很重要,否则MainCamera一直看向(0,0,0)坐标,无法完成角度的变化 if (isClickViewButton==false) { //使相机始终看向坐标(0,0,0) this.transform.DOLookAt(new Vector3(0, 0, 0), 0.0001f); } } }    从代码中可以看出,这里判断了MainSceneManager中的isClickViewButton的值,然后决定相机指向的位置,如果这里不进行设置,在MainSceneManger中就无法重置相机的旋转角度,相机会一直看向(0,0,0)坐标。

(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幅图中都是通过点击按钮发生的变化,在图里面点击按钮时按钮颜色瞬间发生了轻微的变灰,可能看的不是特别清楚。

                      



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有