---恢复内容开始---
1.导入场景:
2.开始 的时候 欢饮界面:直接定位到所在场景 的位置ctrl+shift+f
3.托人UICanvas
4.欢饮界面是17
5.UI的交互是世界坐标,加入BOxCollider
6.手柄功能:
6.创建一个Teleport交互 的功能:负责传送挂手柄身上
7.创建一个管理类。调用所有的脚本,GameMain
8.在所有的UI里创建一个管理UId的UIMain的脚本
9.先显示UI,所以先在UI里写代码:
9.1拿到GameMain脚本
9.2定义一个数组,拿到场景中所有 的Panels:
给数组一个数量,也即是面板上有多少个就是多少
9.3在OnEnable()里
9.3.//找到GameMain脚本
//数组实例化
//把所有Panel存入数组,用for循环
//让所有面板关闭
10.一个新方法把需要用到的面板显示出来
//想显示那个面板,也就是几号面板
//想应酬的面板
想显示谁 关闭谁
点到一个按钮的时候 要做什么
在GameMain添加一个方法
在UImain里添加一个方法
要想知道是那个按钮,用切割开 找到最后一位:
找到的是要用的button8的脚本,把
到教室后 模型场景只要一个了
获取两个模型:
到教室的时做 的操作:
添加一个ID控制人物到达某一个位置:
专门写一个传送的方法,根据ID
找到所有可以移动的点,用数组存放这些点:
第一个位置;
后边的位置:
1.楼道位置
2.教室门口
3.往前走了一小步
传送的时候,根据点去传说,在Start()里初始化,查看有多少个点
存数组长度:
传送方法里:
先查看Id是否存在:
越界的时候不显示地标:
得到地标:
地标(要拖入场景):
除了电梯的时候。是不能进入的,其他都可以,所以除了电梯,其他都可以进入:
人的高度:
传过去的目标点:
关闭当前的界面:
查看自己在什么位置:
再添加一个显示地标的方法:告诉我你在什么地方
看看Id越界没有:
越界的情况
没有越界的时候,地标的位置等于数组2的位置:
让ID等于数组的位置????????
然后显示地标:
总的:
实现走都爱教室:
1.把烟雾的粒子效果修改正确
通过教室 找到烟雾:用名字找 gameObject没有find的 要用Transform
关闭粒子特效
当点击到这个图标的时候
当点击到地标,地标变大。
再把地标变大的方法再GameMain的脚本里面实现,
添加两个地标放大的样子
正常的样子
确定场景中有这个物体,没有就returnn
有的时候。
点到地标就放大 没有就原样
当点击了一个键的时候,进行移动
调用传送方法:
已经到第三个位置(数组里 的第四个)
到达第三步的时候 等待警报
到达火灾预警里
把烟雾打开,
烟雾的报警提升,这个Ui永远在眼前,放WaveVrt头部下面:
先加载这三个UI:创建一个数组来存放
找到Canvas
定义长度为3的数组:找这三个 然后关闭
一步一步的走
过两秒钟后 提示关闭电闸,当火警的提示显示出来时候:
显示第四个地标(第五个值)
1.创建一个新的脚本 改变A值
2.用一个list存放所有
3.所有 的参数
4.Panel关闭后 再打开所有这些功能都能实现,所以用ONenable
脚本挂在 panel上
所以加入物体
for循环几次,取决于下边有多少个物体
5. 开始添加闪烁效果
如果图片存在 就可以改变a值,
4.1判断图片的a值是多少 看是大于1的还是小于1
4.1.1添加一个参数 控制a值
什么时候关闭,给它一个倒计时的时间,
如果剩余的次数已经小于0,就闪烁完成
再创建一个方法 影藏所有UI
因为下边的也要隐藏,所以用fou循环,找到list里所有物体,
找到image,如果是Image ,就把image的所有a值都改成1,下次就直接使用,,颜色的rgb就是image自己的
所有的text跟image是\一样的
总的隐藏方法:
就调用隐藏的方法:
当没有小于0的时候,次数就减一次
当image的a的值大于等于1 的时候,减少它的a值,
用bool值控制到底是减小 还是增加
当要
如果值等于false的时候,就减少透明度,
增加的时候就加上
修改完所有image以后 修改text
找都爱text组件,
如果判断值为false就让颜色改变:
总的部分:
都哟啊挂这个脚本 canves要激活 panels步激活
关电闸部分
走到第五步了
新写一个关闭电闸的方法,
把第0个Ui关闭掉。
然后把电闸的颜色改成红色,
拿到电闸:
加载电闸
关闭电闸:
展示关闭电闸的方法:
找到那个关闭图标:
调用UImain里面的 显示出来
到点击部分 电闸:
关闭电闸后处理的事件:一个新方法:
当电闸关闭:箭头Ui关闭 红色恢复
找到所有的灯光:
在start(()里加载
在方法里使用
等待一下 2s去打开应急灯:
新建一个方法去打开应急灯:
拿到所有的灯光:通过for循环:找到名字后再找它的light组件
开应急灯的时候,遍历两个灯的组件 改变灯的强度,然后把灯打开:
应急灯打开 你的跑了 就到第6的位置了
新添加位置:
把电闸拉下来:
1 using System.Collections; 2 using System.Collections.Generic; 3 using UnityEngine; 4 using UnityEngine.UI; 5 6 public class AlphaManager : MonoBehaviour { 7 8 List<GameObject> m_listUI; 9 10 bool m_bAdd = false; 11 public float m_DelaAlpha=0.02f;//Alpha变化值 12 public int m_FlickerTimes = 5;//闪烁轮次 13 public bool m_IsHide = true;//闪烁之后是否隐藏 14 public bool m_IsSpeedUp=true;//是否闪烁越来越快 15 16 17 int m_nChangeTimes;//剩余闪烁次数 18 float m_fChangeAlpha;//改变完的alpha 19 // Use this for initialization 20 private void OnEnable() 21 { 22 m_fChangeAlpha = m_DelaAlpha; 23 m_nChangeTimes = m_FlickerTimes * 2; 24 m_listUI = new List<GameObject>(); 25 m_listUI.Add(gameObject); 26 for (int i = 0; i < transform.childCount; i++) 27 { 28 m_listUI.Add(transform.GetChild(i).gameObject); 29 } 30 } 31 private void Update() 32 { 33 for (int i = 0; i < m_listUI.Count; i++) 34 { 35 Image img = m_listUI[i].GetComponent<Image>(); 36 if (img) 37 { 38 if (img.color.a<=0)//增加Alpha 39 { 40 if (m_IsSpeedUp) 41 { 42 m_fChangeAlpha += 0.003f; 43 } 44 if (m_IsHide) 45 { 46 if (m_nChangeTimes<=0)//闪烁完成 47 { 48 Hide(); 49 return; 50 } 51 m_nChangeTimes -= 1; 52 } 53 m_bAdd = true; 54 } 55 else if (img.color.a>=1)//减小Alpha 56 { 57 m_bAdd = false; 58 } 59 if (!m_bAdd) 60 { 61 img.color -= new Color(0, 0, 0, m_fChangeAlpha); 62 } 63 else 64 { 65 img.color += new Color(0, 0, 0, m_fChangeAlpha); 66 } 67 } 68 69 Text text = m_listUI[i].GetComponent<Text>(); 70 if (text) 71 { 72 if (!m_bAdd) 73 { 74 text.color -= new Color(0, 0, 0, m_fChangeAlpha); 75 } 76 else 77 { 78 text.color += new Color(0, 0, 0, m_fChangeAlpha); 79 } 80 } 81 } 82 } 83 void Hide()//隐藏UI 84 { 85 transform.gameObject.SetActive(false); 86 for (int i = 0; i < m_listUI.Count; i++) 87 { 88 Image img = m_listUI[i].GetComponent<Image>(); 89 if (img) 90 { 91 img.color = new Color(img.color.r,img.color.g,img.color.b,1); 92 } 93 Text text = m_listUI[i].GetComponent<Text>(); 94 if (text) 95 { 96 text.color = new Color(text.color.r, text.color.g, text.color.b, 1); 97 } 98 } 99 } 100 }
1 using System.Collections; 2 using System.Collections.Generic; 3 using UnityEngine; 4 5 public class GameMain : MonoBehaviour { 6 public UIMain m_UIMain; 7 public GameObject m_ClassRoom; 8 public GameObject m_PassageWay; 9 public Transform m_PositionMarket;//地标 10 private int m_nCurTransID; 11 private int m_nPosCount; 12 private float m_Height = 1.4f; 13 private Vector3 m_largeScale = new Vector3(0.8f, 0.8f, 0.8f); 14 private Vector3 m_normalScale = new Vector3(0.5f, 0.5f, 0.5f); 15 16 private GameObject m_classroomSmoke;//烟雾粒子特效 17 private GameObject m_waringPanel;//警告 18 private GameObject[] m_waringPanels;//所有警告Panel 19 private Material m_brake;//开关的材质球 20 private GameObject m_classroomLights; 21 private Light[] m_emergencylamp; 22 23 private Vector3[] m_markPosition = new Vector3[] 24 { 25 new Vector3(-4.7f,2.02f,-60f),//0 楼道里 26 new Vector3(16.2f,0.01f,-3.5f),//1 教室门口 27 new Vector3(17.2f,0.01f,-2.5f),//2 28 new Vector3(18f,0.01f,-1.4f),//3 课桌前 29 new Vector3(19.4f,0.01f,-2.4f),// 4 30 new Vector3(21.9f,0.01f,-3.6f),//5 电闸位置 31 new Vector3(20f,0.01f,-2.4f) //6 32 }; 33 // Use this for initialization 34 void Start () {//加载 35 m_classroomLights = m_ClassRoom.transform.Find("light").gameObject; 36 m_emergencylamp = new Light[2]; 37 for (int i = 0; i < 2; i++) 38 { 39 m_emergencylamp[i] = m_classroomLights.transform.Find("DirectionalLight" + i).GetComponent<Light>(); 40 } 41 42 m_brake = m_ClassRoom.transform.Find("model/Brake").GetComponent<Renderer>().material; 43 44 m_waringPanel = transform.Find("head/Canvas").gameObject; 45 m_waringPanels = new GameObject[3]; 46 //0 火灾突发 1 离开洗手间 2 弯腰提示 47 for (int i = 0; i < m_waringPanels.Length; i++) 48 { 49 m_waringPanels[i] = m_waringPanel.transform.Find("Panel"+i).gameObject; 50 m_waringPanels[i].SetActive(false); 51 } 52 m_classroomSmoke = m_ClassRoom.transform.Find("smoke").gameObject; 53 m_nPosCount = m_markPosition.Length; 54 ShowEnterSystem(); 55 56 } 57 public void ShowEnterSystem()//初始化数据 58 { 59 m_classroomSmoke.SetActive(false); 60 61 ShowWelcomeEnter(); 62 } 63 void ShowWelcomeEnter()//显示欢迎界面 64 { 65 m_UIMain.ShowPanel(17, true); 66 } 67 // Update is called once per frame 68 void Update () { 69 70 } 71 public void OnConfirmButtonClicked(string sName) 72 { 73 m_UIMain.UIConfirmBtnClick(sName); 74 TransportToClassRoom(); 75 } 76 void TransportToClassRoom()//传送到教室 77 { 78 m_ClassRoom.gameObject.SetActive(true); 79 m_PassageWay.gameObject.SetActive(false); 80 m_nCurTransID = 1; 81 TransPort(); 82 } 83 public void TransPort()//传送 84 { 85 if (m_nCurTransID>=m_nPosCount)//ID越界 86 { 87 m_PositionMarket.gameObject.SetActive(false); 88 return; 89 } 90 if (m_nCurTransID!=22)//不是电梯 91 { 92 Vector3 pos = new Vector3(m_markPosition[m_nCurTransID].x,m_markPosition[m_nCurTransID].y+m_Height,m_markPosition[m_nCurTransID].z); 93 transform.position = pos; 94 } 95 m_PositionMarket.gameObject.SetActive(false); 96 if (m_nCurTransID==1)//教室门口 97 { 98 ShowMark(2); 99 } 100 else if (m_nCurTransID==2) 101 { 102 ShowMark(3); 103 } 104 else if (m_nCurTransID==3) 105 { 106 Invoke("ShowFireWaring",3f); 107 } 108 else if (m_nCurTransID==4) 109 { 110 ShowMark(5); 111 } 112 else if (m_nCurTransID==5) 113 { 114 TrunOffBrake(); 115 } 116 117 } 118 public void ShowMark(int nindex)//显示地标位置 119 { 120 m_nCurTransID = nindex; 121 if (m_nCurTransID>=m_nPosCount) 122 { 123 m_PositionMarket.gameObject.SetActive(false); 124 return; 125 } 126 m_PositionMarket.position = m_markPosition[m_nCurTransID]; 127 m_PositionMarket.gameObject.SetActive(true); 128 } 129 public void HitPositionMarket(bool bhit) 130 { 131 if (!m_PositionMarket.gameObject.activeSelf) 132 { 133 return; 134 } 135 if (bhit) 136 { 137 m_PositionMarket.localScale = m_largeScale; 138 } 139 else 140 { 141 m_PositionMarket.localScale = m_normalScale; 142 } 143 } 144 void ShowFireWaring()//火灾预警 145 { 146 m_classroomSmoke.SetActive(true); 147 m_waringPanels[0].SetActive(true); 148 Invoke("ShowTurnOffBrake",2f); 149 } 150 void ShowTurnOffBrake()//关闭电闸UI 显示下一个地标 151 { 152 m_UIMain.ShowPanel(0, true); 153 ShowMark(4); 154 } 155 void TrunOffBrake() 156 { 157 m_UIMain.ShowPanel(0,false); 158 m_brake.color = Color.red; 159 m_UIMain.ShowBreakArrow(true); 160 } 161 public void OnBrakeClicked()//当电闸被关闭 162 { 163 m_UIMain.ShowBreakArrow(false); 164 m_brake.color = Color.white; 165 m_classroomLights.SetActive(false);//灯光关掉 166 Invoke("EmergencyLamp",2f); 167 } 168 void EmergencyLamp()//应急灯 169 { 170 for (int i = 0; i < 2; i++) 171 { 172 m_emergencylamp[i].intensity = 0.4f; 173 m_classroomLights.SetActive(true); 174 ShowMark(6); 175 } 176 } 177 }
1 using System.Collections; 2 using System.Collections.Generic; 3 using UnityEngine; 4 using wvr; 5 6 public class Teleport : MonoBehaviour { 7 private GameMain m_Main; 8 private GameObject m_WaveVR; 9 private WaveVR_SimplePointer m_pointer; 10 // Use this for initialization 11 void Start () { 12 m_pointer = transform.GetComponent<WaveVR_SimplePointer>(); 13 m_Main = transform.parent.GetComponent<GameMain>(); 14 } 15 16 // Update is called once per frame 17 void Update () { 18 if (WaveVR_Controller.Input(WVR_DeviceType.WVR_DeviceType_Controller_Right).GetPressDown(wvr.WVR_InputId.WVR_InputId_Alias1_Menu)) 19 { 20 Application.Quit(); 21 } 22 if (!m_pointer||!m_pointer.GetHitTrans()) 23 { 24 return; 25 } 26 GameObject hititem=m_pointer.GetHitTrans().gameObject; 27 if (hititem.name == "PositionMarker")//将地标放大 28 { 29 m_Main.HitPositionMarket(true); 30 if (WaveVR_Controller.Input(WVR_DeviceType.WVR_DeviceType_Controller_Right).GetPressDown(WVR_InputId.WVR_InputId_Alias1_Touchpad)) 31 { 32 m_Main.TransPort(); 33 } 34 } 35 else 36 { 37 m_Main.HitPositionMarket(false); 38 } 39 if (WaveVR_Controller.Input(WVR_DeviceType.WVR_DeviceType_Controller_Right).GetPressDown(WVR_InputId.WVR_InputId_Alias1_Touchpad)) 40 { 41 if (hititem.name.Contains("ConfirmButton"))//点到按钮 42 { 43 m_Main.OnConfirmButtonClicked(hititem.name); 44 } 45 if (hititem.name== "Brake") 46 { 47 m_Main.OnBrakeClicked(); 48 } 49 50 } 51 } 52 }
1 using System.Collections; 2 using System.Collections.Generic; 3 using UnityEngine; 4 5 public class UIMain : MonoBehaviour { 6 private GameMain m_gameMain; 7 private GameObject[] m_Panels;//面板数组 8 private int m_nPanelCount=20;//面板数量 9 private GameObject m_brakeArrow; 10 private void Start() 11 { 12 m_brakeArrow = transform.Find("BrakeArrow").gameObject; 13 m_brakeArrow.SetActive(false); 14 } 15 private void OnEnable() 16 { 17 m_gameMain = GameObject.Find("WaveVR").GetComponent<GameMain>(); 18 m_Panels = new GameObject[m_nPanelCount]; 19 for (int i = 0; i < m_nPanelCount; i++) 20 { 21 m_Panels[i]= transform.Find("Panel" + i).gameObject; 22 m_Panels[i].SetActive(false); 23 } 24 } 25 public void ShowPanel(int index,bool bShow)//显示面板 26 { 27 m_Panels[index].SetActive(bShow); 28 } 29 public void UIConfirmBtnClick(string sName) 30 { 31 int index=int.Parse(sName.Substring(sName.Length - 1));//找到最后一位数字 32 if (index == 8) 33 { 34 ShowPanel(17, false); 35 } 36 } 37 public void ShowBreakArrow(bool bshow) 38 { 39 m_brakeArrow.SetActive(bshow); 40 } 41 }
脚本的挂法: