美文网首页虚拟现实开发程序员电竞·游戏
VR游戏开发501开发一款联网的VR社交游戏(上)

VR游戏开发501开发一款联网的VR社交游戏(上)

作者: 养薛定谔的猫 | 来源:发表于2016-07-10 00:50 被阅读614次

    VR游戏开发501 开发一款联网的VR社交游戏(上)

    自从Facebook收购了Oculus之后,VR的潜力开始在网络虚拟社交领域开始展现。虚拟现实作为科技前沿大火的同时,作为VR应用开发者的我们又如何去忽视VR社交呢?
    相对于传统的VR游戏而言,VR社交由于涉及网络编程,因此门槛稍微高一些。但在Unity5版本之后,Unity将以往繁琐的Network封装成了High Level API,这样极度的方便了Unity的网络游戏的开发,同时Unity也保留了Network Transport API来提供更灵活的网络工具。
    那么,今天我们来使用Unity的Network Manager,也就是第一类工具来开发Unity的VR网络社交游戏。

    搭建场景

    作为第一章,我们仅需简单的一个平面来模拟地面就好,在开始动工之前,我们需要导入Unity的Standard Assets 中的Character包。
    将Character中的FPSController拖入场景中,调整位置到合适,再给其添加一个Capsule和Cube的子物体,并调整为如图所示。最后更改Cube的位置和缩放到FPSController的前面位置,当做主角的眼睛(在测试时可以看清角色的旋转)。最终效果如下图。


    场景的搭建和角色的设置

    场景的阶层如下图:


    场景的阶层设置

    添加网络模块

    当场景搭建完毕之后,在FPSController上添加Network Identity和Network Transform脚本,选中Network Identity中的Local Player Authority,将Network Transform中的Transform Sync Mode修改为Sunc Transform,并将已经做好的FPSController拖入Prefab文件夹(需自己新建)下面并修改名称为Player以保存。
    在阶层视图中,添加一个空对象,并重命名为Network Manager,为其添加NetworkManager和NetworkManagerHUD脚本。


    添加Network组件

    以上两个脚本是Unity内建的脚本,在检视面板中,直接电脑Add Component并搜索Network即可添加。
    此时,保存场景为Main Scene(场景名),删除场景中的FPSController物体(确保已经保存为Player的Prefab),将Player从Prefab文件夹中拖入Network Manager下面的Spawn Info中的Player Prefab中。
    将当前场景添加到Build Scene中,并Build(Ctrl+B为快捷键)。


    添加场景到Build Setting中
    先在Unity中点击Play按钮,并LanHost作为主机,在Build的程序中,点击LAN Client以连接主机。
    测试连接
    当客户端连接完毕并移动的时候,你会发现屏幕在闪,并且操作Host的时候,Client的控制器也在移动。此时回到Unity中,观察会发现场景中拥有2个摄像机,那么问题就明了了。

    解决上面的问题
    很明显,解决上面问题的方案就是将主机和客户端做差别化处理。对于每个客户端而言,只能操控当前客户端的Player而不能操纵其他客户端的Player,并且其他客户端的Player应该不具有Camera这个组件。因此我们需要编写一个Player_NetworkSetup.cs的脚本。脚本内容如下。

    using UnityEngine;
    using System.Collections;
    using UnityEngine.Networking;
    
    public class Player_NetworkSetup : NetworkBehaviour {
        [SerializeField] Camera fpsCharacterCamera;
        [SerializeField] AudioListener audioListener;
        [SerializeField] GameObject body;
    
        void Start () {
            if (isLocalPlayer)
            {
                GameObject.FindWithTag("MainCamera").SetActive(false);
                GetComponent<CharacterController>().enabled = true;
                GetComponent<UnityStandardAssets.Characters.FirstPerson.FirstPersonController>().enabled = true;
                fpsCharacterCamera.enabled = true;
                audioListener.enabled = true;
                body.SetActive(false);
            }
        }
    }
    

    在上述脚本中,我们将Cube和Capsule放入一个叫body的空物体中,以便初始化。将上述脚本拖放到Player的Prefab中,取消Player的Prefab中的First Person Controller、Character Controller和其子物体firstPersonCharacter中的Camera的组件和Audio Listener的选中状态,并拖动Camera、Audio Listener和Body进入相应的位置并点击Apply按钮实施更改。
    再次Build并测试场景,发现2个角色成功地可以在场景中移动了。

    总结

    至此,初次接触Unity网络编程的同学可以去Unity官网查看一下API的文档,或是参考一些图书以更加深入地了解网络编程。
    在后面的几章,我们会更深入地探讨如何制作一款VR社交游戏。

    相关文章

      网友评论

      本文标题:VR游戏开发501开发一款联网的VR社交游戏(上)

      本文链接:https://www.haomeiwen.com/subject/fwhdjttx.html