本来是在unity mirror插件下实现一个VR下的三维场景中的多用户玩家联网的虚拟自行车角色漫游任务,但是目前需要在每个用户的自行车角色头顶加入一个电脑摄像头的画面,并且当互相联网时在VR眼睛中可以看到彼此的位置的变化以及头顶上电脑摄像头拍摄的该用户自己的实时画面(有声音的互动更好)。
前期已经使用Mirror自带的NetworkManager将自行车角色prefab拖入,并给prefab挂了Network Transform脚本,这样实现了多用户联网时的位置移动。接着为了实现电脑摄像头的采集功能,引用了林新发@林新发 做好的Mirror下的视频通话packagehttps://blog.csdn.net/linxinfa/article/details/119136203,并把视频通话canvas置于前面做好的自行车prefab内,这样就完成了电脑摄像头画面对自行车位置的跟随。但林新发的视频通话中挂载于gameobject下的video chat network脚本与mirror自带的network Manager脚本会冲突(一个场景中只能有一个Network Manager),故无法实现。
林新发的video chat network脚本
public class VideoChatNetwork : NetworkManager
{
private Action onStartHost;
private Action onStartClient;
public struct CreatePlayerMessage : NetworkMessage
{
public string name;
}
public void DoStartHost(Action cb)
{
onStartHost = cb;
StopHost();
StopClient();
StartHost();
}
public void DoStartClient(Action cb)
{
onStartClient = cb;
StopHost();
StopClient();
StartClient();
}
public override void OnStartServer()
{
base.OnStartServer();
NetworkServer.RegisterHandler(OnCreatePlayer);
if (null != onStartHost)
{
onStartHost();
}
}
[Obsolete]
public override void OnClientConnect(NetworkConnection conn)
{
base.OnClientConnect(conn);
// tell the server to create a player with this name
conn.Send(new CreatePlayerMessage { name = MainLogic.instance.accountName });
if (null != onStartClient)
{
onStartClient();
}
}
[Obsolete]
public override void OnClientDisconnect(NetworkConnection conn)
{
base.OnClientDisconnect(conn);
// 返回到登录界面
MainLogic.instance.OnClientDisconnect();
}
void OnCreatePlayer(NetworkConnection connection, CreatePlayerMessage createPlayerMessage)
{
// create a gameobject using the name supplied by client
GameObject playergo = Instantiate(playerPrefab);
playergo.GetComponent().accountName = createPlayerMessage.name;
// set it as the player
NetworkServer.AddPlayerForConnection((NetworkConnectionToClient)connection, playergo);
}
我还尝试了在scene中加入了camera并让其在屏幕右上角显示为小地图形式,其内容为林新发视频通话的canvas,这样的话untiy无法正常运行
可以在VR眼镜中看到多个用户的自行车位置变化以及头顶摄像头采集的该用户自己的实时画面。
你在项目里用的是Mirror的NetworkManager,可以像我一样写一个类继承NetworkManager,比如你的就叫VRNetworkManager,然后把我的VideoChatNetwork的逻辑代码搬进去就可以了
3-4行,11-39行需要替换下
改动是比较大的,不是一句两句能说清,发哥是自己改写的network Manager,你也需要自己改写。在编写player脚本的时候同步视频内容。