校园火灾项目结合Focus

---恢复内容开始---

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 }
AlphaManager
  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 }
GameMain
 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 }
Teleport
 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 }
UIMain

 脚本的挂法:

 

posted @ 2018-10-29 11:22  白纸菇凉  阅读(302)  评论(1编辑  收藏  举报