虚拟现实大作业——VR游乐园(无设备开发)之4.游乐项目场景

1. 放置VR摄像机

  • 该部分就是将VR摄像机放入场景中即可,所以将之前设置的VR摄像机置为预制体(也可以按照之前放置VR摄像机中的步骤进行设置)
    虚拟现实大作业——VR游乐园(无设备开发)之4.游乐项目场景_第1张图片
  • 设置该预制体:将该预制体下的所有子物体的位置进行重置(清除掉之前的设置:在图中位置右键->Reset),再进行相关设置
    虚拟现实大作业——VR游乐园(无设备开发)之4.游乐项目场景_第2张图片
    虚拟现实大作业——VR游乐园(无设备开发)之4.游乐项目场景_第3张图片
  • 打开任意一个游乐项目场景,这里以过山车为例,将VR摄像机放置到合适位置
    虚拟现实大作业——VR游乐园(无设备开发)之4.游乐项目场景_第4张图片
  • 运行看看视野是否正常

2. 控制欢呼音效的播放时机和跳转场景

游乐项目结束时有一个欢呼音效并且倒数3秒后跳转回设备选择场景
通过项目Animation组件获取整个动画的时长,判断动画剩余时间小于等于10说明快到达终点了,开始播放欢呼音效并进行场景跳转

  • 在Scripts文件夹下新建一个名为AnimController的脚本并挂载到游乐设备身上
    虚拟现实大作业——VR游乐园(无设备开发)之4.游乐项目场景_第5张图片
  • 编辑代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class AnimController : MonoBehaviour
{
    // 欢呼音效
    public AudioSource m_CheersAudio;
    private Animation m_Anim;
    //动画片段时间
    private float m_ClipTime;
    //是否播放欢呼音效,保证欢呼音效只播放一次
    private bool m_IsPlayCheersAudio = false;
    //动画是否播放完毕
    private bool m_IsEnd = false;
    // 计时器
    private float m_Timer = 0f;

    private void Awake()
    {
        // 获取到动画组件
        m_Anim = GetComponent();
        // 动画时长
        m_ClipTime = m_Anim.clip.length;
    }

    private void Update()
    {
        m_ClipTime -= Time.deltaTime;
        if (m_ClipTime <= 10 && m_IsPlayCheersAudio == false)
        {
            m_CheersAudio.Play();
            m_IsPlayCheersAudio = true;
        }
        // 判断是否结束
        if (m_ClipTime <= 0 && m_IsEnd == false)
        {
            // 跳转场景
            SceneManager.LoadScene("MainScene");
            m_IsEnd = true;
        }
    }
}

  • 将Sound中的Cheers音效拖入Cheers Audio槽中
    虚拟现实大作业——VR游乐园(无设备开发)之4.游乐项目场景_第6张图片
  • 运行看看能否正常播放欢呼音效和跳转场景

3. 场景跳转倒计时UI

  • 在VR摄像机中的Neck下创建一个Canvas,Position和Rotation全部置为0,修改其渲染模式为World Space,再在其下创建一个Image子物体并填充至一样大小以方便查看Canvas
    虚拟现实大作业——VR游乐园(无设备开发)之4.游乐项目场景_第7张图片

  • 自行调整Canvas的缩放和位置,让Canvas以一个合适大小在摄像机前面
    虚拟现实大作业——VR游乐园(无设备开发)之4.游乐项目场景_第8张图片+ 再在Canvas下创建一体个Text
    虚拟现实大作业——VR游乐园(无设备开发)之4.游乐项目场景_第9张图片

  • 在Res文件夹在创建一个名为Material文件夹并将资料中的Overlay.shader导入到该文件夹中,再在该文件夹中新建一个材质命名为Overlay并进行设置(Shader->UI->Overlay)
    虚拟现实大作业——VR游乐园(无设备开发)之4.游乐项目场景_第10张图片
    虚拟现实大作业——VR游乐园(无设备开发)之4.游乐项目场景_第11张图片

  • 将刚刚设置好的Overlay拖拽至Image的Material槽中,Text也是一样的操作
    虚拟现实大作业——VR游乐园(无设备开发)之4.游乐项目场景_第12张图片
    虚拟现实大作业——VR游乐园(无设备开发)之4.游乐项目场景_第13张图片

  • 之后再运行可以看到UI界面始终显示在3D物体的前面

  • 将Image删除,重新调整Text大小和位置,将内容改为3(因为倒计时从3开始),复制一份Text移动到上方,分别命名为Txt_CountDown、Txt_Hint并进行样式和内容设置(自行调整到适合位置就可以了)
    虚拟现实大作业——VR游乐园(无设备开发)之4.游乐项目场景_第14张图片

  • 将Canvas命名为CountDownCanvas,在Scripts的UI文件夹下创建有个同名脚本并挂载到CountDownCanvas上,进行编辑

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class CountDownCanvas : MonoBehaviour
{
    public static CountDownCanvas Instance;
    private Text txt_CountDown;
    // 倒数时间
    private int m_Time = 3;   

    private void Awake()
    {
        Instance = this;
        txt_CountDown = transform.Find("Txt_CountDown").GetComponent();
        // 开始的时候隐藏,当倒计时的时候才出现
        gameObject.SetActive(false);
    }

    // 倒计时
    public void ReduceTime()
    {
        if (m_Time > 0)
        {
            // 开始将Canvas显示出来
            gameObject.SetActive(true);
            txt_CountDown.text = m_Time.ToString();
            m_Time--;
        }

    }
}
  • 修改AnimController.cs脚本的 Update部分
private void Update()
{
    m_ClipTime -= Time.deltaTime;
    if (m_ClipTime <= 10 && m_IsPlayCheersAudio == false)
    {
        m_CheersAudio.Play();
        m_IsPlayCheersAudio = true;
    }
    // 判断是否结束
    if (m_ClipTime <= 0 && m_IsEnd == false)
    {
        // 跳转场景
        SceneManager.LoadScene("MainScene");
        m_IsEnd = true;
    }
    // 倒计时
    if (m_ClipTime <= 4)
    {
        m_Timer += Time.deltaTime;
        if (m_Timer >= 1)
        {
            m_Timer = 0;
            CountDownCanvas.Instance.ReduceTime();
        }
    }
}
  • 其他游乐项目一样的操作

你可能感兴趣的:(虚拟现实大作业)