专注VR多人联机的教程1-4章

专注VR多人联机的教程1-4章

🎮

前期准备

    建立普通的3d项目

    导入SDK

    在导出处修改纹理模式

    在player里修改色彩模式 选择线性

    install location 选择 automatic

    多线程运行

    quality

    XR Rig的 tracking origin mode 改为Floor

    在资产添加这两个

Snipaste20221108083818png

随后在项目设置里 过滤一些词语

Snipaste20221108084235png

删除之前xr rig 重新添加


主相机视野穿模解决办法

    设置头和body一个图层,然后在相机的渲染模式之下取消勾选该图层


优化传送区域

    手动去设置有一个碰撞盒子,并指定单独的图层(在控制器和地面都需要修改 Interaction Layer Mask)


XR Direct Interactor 这个组件允许手柄进行交互

最后别忘记 在主相机 和 镜子相机 内启用刚刚设置好的图层


被抓取物 以固定方向被抓取

首先找个坐标,扔进grab组件的这里即可

Snipaste20221108161036png


所有的键位管理器

Snipaste20221108173330png


解决两个碰撞盒的冲突

    在项目设置里的物理系统

    Snipaste20221109155639png


多人联机平台 PHOTO

资源商店 搜索pun 2

传送🚪
PUN 2 - FREE | 网络 | Unity Asset Store

导入进去后 会要求输入appID


先去 PHOTO官网申请个账号

传送🚪
https://www.photonengine.com/zh-CN/Photon

随后创建一个类型为Pun的应用,将出现的appid填入unity里即可

(可以更改一些设置,具体参考官网相关信息)


留意游戏的版本withPHOTO 他将用来区分新老玩家

如何连接服务器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Photon.Pun;

public class LoginManager : MonoBehaviourPunCallbacks
{
#region Unity Methods

// Start is called before the first frame update
void Start()
{
Debug.Log("OK不");
PhotonNetwork.ConnectUsingSettings();

//这句话表明链接到服务器
}

// Update is called once per frame
void Update()
{
}

#endregion

#region Photon Callback Methods

public override void OnConnected()
{
Debug.Log("连接成功");
}

public override void OnConnectedToMaster()
{
Debug.Log("连接到Master");
}

#endregion
}

使用开源的虚拟键盘

🚪
GitHub - campfireunion/VRKeys: A drum-style keyboard for VR in Unity

同样也在资源商店里可以找到 👉vrkeys

不建议下载最新版本而是使用教程提供的网盘下载

🚪
OneDrive


键盘生成位置是固定的

并且我个人感觉调节位置在VR眼镜里挺不好调节的


4-7

连接服务器需要使用全局魔法,否则将不会测试成功

4-8 具有自定义属性的房间

新UIprefab在附赠的下载链接内,不要恐慌

根据键值对决定进入房间的类型

const常量允许被其他脚本直接访问

4-12 实例化玩家

使用PhotonNetwork.Instantiate()来生成一个prefab

请留意一定要给prefab添加一个 photon view 的组件

而且他将自带头显,你必须要删除原本的摄像机

4-13 继续改进可被别人看到

需要给prefab挂载一个脚本

Snipaste20221115075914png

这个脚本用以生成prefab,但是剥夺了他们xr rig

4-14 修改一些潜在错误

掉到地底下

1
2
3
4
5
6
7
8
TeleportationArea[] teleportationAreas = GameObject.FindObjectsOfType<TeleportationArea>();
if (teleportationAreas.Length != 0)
{
foreach (var item in teleportationAreas)
{
item.teleportationProvider = localXRRigGameobject.GetComponent<TeleportationProvider>();
}
}

*遍历含有TeleportationArea脚本的游戏物体,如果存在(!=O),那么将该物体的TeleportationArea脚本下的公共变量将被赋予为👉某物体的组件下的provider就给他了 但是有个问题是所有的area都被赋予同样的provider*


好用的单例模式

1
2
3
4
5
6
7
8
9
10
11
12
public static VirtualWorldManager Instance;

private void Awake()
{
if (Instance != null && Instance != this)
{
Destroy(this.gameObject);
return;
}

Instance = this;
}

这是另一个脚本可以直接访问

Snipaste20221115150824png

作者

发布于

2022-11-15

更新于

2023-01-10

许可协议