VR Masterclass

来源:互联网 发布:卖家淘宝差评回复大全 编辑:程序博客网 时间:2024/04/27 15:20
  • 把自己的游戏修改成VR模式
  • Unity设置网络多人联机

今天在龙之梦酒店参加Unity的课程,把一些操作要点记录一点。首先,用到unity的示例项目:
VR迷宫项目示例:链接:http://pan.baidu.com/s/1bpfV9Jh 密码:r8hq
多人联机项目示例:链接:http://pan.baidu.com/s/1qYSUd1E 密码:viki

1.首先打开window版的MazeVRProject_Start项目(mac版自行当中选择)
1
2.打开sence文件夹中的场景,这是游戏最初的样子,模拟我们原来的游戏(非VR版)
2
3.我们先把Canvas打勾去掉,使其无效,因为后面也用不到
3
4.从Main Camera上移除脚本Camera FOV Manager, Camera Aim
Main Camera加上CameraEditorControl脚本,角度归0并调好位置
4
5.将Prefabs->VRPrefabs->Orientation Arrows拉到Camera Poiot Rig下,指定摄像头给OrientationArrow里的Camera栏位
5
6.Main Camera底下添加一个空物件VRControls,VRControls加入VRInput和VR Eye Raycaster脚本,将Main Camera拉入Raycast Origin属性,Exclusion Layers指定IgnoreRayCast
6
7.Player身上的Player Movement脚本里的Can Move要打勾,这只是为了方便测试看效果
7
8.给予地板VR Interactive Item脚本,为了跟使射线产生交互
8
9.在VRControls底下新建一个Canvas(VRCameraUI),改变Render Mode为World Space,坐标长宽修改为(0,0,0)(1,1),Reference Pixels Per Unit改为1,删除Graphic Raycaster元件
9
10.在VRCameraUI底下新增一个UI Image(Reticle),Source Image指定图与颜色,Material指定GUIOverlay,调适位置与长宽到画面中心,Reticle物件添加Reticle脚本
10
11.指定回VRControls物件里的Reticle栏位
11
12.Camera Pivot Rig物体底下添加一个Canvas(sceneUI),设定为World Space,坐标位置设定为(0,0,0)(1,1),Dynamic Pixels Pre Unit设为4,Reference Pixels Per Unit 设为1,SceneUI底下添加UI Image(Left Arrow),指定图片颜色与大小(1,1)后移到场景边缘位置(-3,5,13,-11 X转90度),加入Box Collider 与 VR Interactive Item脚本
12
13.复制右边箭头(x改为正值,ScaleX改负值)
13
14.Camera Pivot Rig物件加入VR Camera Rotation脚本,脚本指定这两个箭头
14
15.SceneUI加入VR Prefabs里的VRinformationUI,VRinformationUI底下加入一个UI Sider,调整到适当位置,取消打勾Interactable,Transition设定为None,删除Slider底下的Handle Slide Area,Background颜色改黑色,Archor presets改为全屏,Fill全归0指定对齐左边,Slide底下添加UI Text Archor presets改为全屏与居中,输入文字
15
16.Slider加入Box Collider, Audio Source, VR Interactive Item,Selection Slider四个组件,Box Collider调整好位置,Audio Source关闭Play on awake, Selection Slider脚本指定:Audio->Slider, On Over Clip->MenuGazeOver,On Filled Clip->MenuSelect, InteractiveItem->Slider, Disable On Bar Fill关闭,将Player原本的Can Move取消掉
16
17.VRInformationUI添加一个Canvas Group元件和UIFader脚本(Start Visible 1)Slider里面的On Bar Filled事件添加Player->PlayMovement.Mobilize()和VR
ImformationUI->UIFader.StartFadeout
17
18.ctrl+d 复制另外一个VRInformationUI(VRGameOverText),Enable方块取消打勾,Title Text文字删除,Body Text文字改为Game Over, Slider里的文字改Play Again!
18
19.指定VRGameOverText给Player里的Restart Dialog栏位,Slider的On Bar Filled指定Player->PlayerState.Reload(float)=1
19
20.将Countdown Timer放入SceneUI, 并加入Countdown Timer,UI Fader脚本,指定颜色
20
21.VRInformationUI底下的Slider加入两个事件,CountdownTimer->UIFader.StartFadeIn(),CountdownTimer->CountdownTimer.BeginCountdown()
21
22.导入CardboardSDKForUnity.unitypackage,然后在Main Camera上赋予Stereo Controller脚本,这样就产生了双眼效果
22


23.现在我们学习下unity使用自带的控件来进行联机开发,首先导入多人联机项目,打开项目中的Start场景,我们添加一个空物体(network),然后添加Network Manager和Network Manager HUD组件,这样就可以看到联网的UI了
23
24.Tank需要添加Network Identity组件,相当于在网络连接中有自己的“身份证”
24
25.我们create空物体(spaw),添加NetworkStartPosition,这样就设置了物体的出生点
25
26.NetworkManager中的Player Prefab中拖入Tank预设,这样每次接入服务器都会产生Tank物体
26
27.这时会发现移动坦克时,另一个客户端接入的坦克也会同时移动,为了解决这样的问题,把ObjectMoverRB脚本组件替换为ObjectMoverRB_Net
27
28.在NetworkIdentify中的localPlayerAuthority打勾
28
29.我们再在Tank预设中添加NetworkTransform组件,其中Rotation Axis设置为Y(Top-Down 2D),因为坦克只绕Y轴方向上旋转,其他方向不存在旋转,所以这样设置保证最少的网络传输需求
29
30.客户端一连接上,服务端的镜头就突然变了为了解决这个问题,这是主要的代码
30
31.射击也有类似的问题,会同时发射子弹,需要以下代码解决,[Command]命令的方法名必须以Cmd开头
31
32.自然上述代码是需要把CannonSpawnController脚本组件修改为CannonSpawnController_Net
32
33.cannon也需要添加“联网身份证”NetworkIdentity和NetworkTransform
33
34.产生的物体需要在NetworkManager里注册
34
35.cannon里添加CannonballController组件,can kill打勾就能降低坦克的血量了
35
36.CannonballController中的update是[ServerCallback]同步子弹的生命周期
36
37.还记得修改Tank的Tag为Player
37
38.Tank添加TankHealth,设置坦克的生命值
38
39.胜利或失败后,显示提示文字信息,使用客户端RPC,BackToLobby返回大厅在中国还无法实现,在美国已经实现beta版,也就是unity提供一个游戏大厅方便开发者开发联网游戏
39

0 0
原创粉丝点击