---恢复内容开始---
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 }
脚本的挂法:
来源:oschina
链接:https://my.oschina.net/u/4406565/blog/3225150