holotoolkit 客户端与服务器架构的建立

 

疑问,有空可以测试一下。

这两个脚本都没有继承自monobehaviour是不是只需要写好后,不需要给物体上挂就可以运行发送数据了。

1, HoloToolkit 远程实时传输视频

2,传数据和架构的建立。

a,导入holotoolkit后,界面自动会多一个 HoloToolkit按钮。

 

 运行服务器时holotoolkit----> sharing service -----> launch sharing service,这样服务器会运行起来。

如果运行时出现下面的错误

 

则需要把对应的资源包里面的External文件夹copy到本工程的Assets平级文件夹即可。

 

b,  每个客户端的建立只需要拖预制体:HoloToolkit/Sharing/Perfabs/Sharing就好了。

    需要修改IP地址,或写为localhost.

 

c,数据传输和1完全一样。修改这两个脚本。

 

d Loacl client, 这两个脚本都需要。

step1, RemoteHeadManager.cs

 

    private void Update()
        {
            // Grab the current head transform and broadcast it to all the other users in the session
            Transform headTransform = Camera.main.transform;

            // Transform the head position and rotation from world space into local space
            Vector3 headPosition = transform.InverseTransformPoint(headTransform.position);
            Quaternion headRotation = Quaternion.Inverse(transform.rotation) * headTransform.rotation;

           // CustomMessages.Instance.SendHeadTransform(headPosition, headRotation);
           // CustomMessages.Instance.SendHeadTransform();
            CustomMessages.Instance.Send_Messages();
        }CustomMessages.Instance.Send_Messages();
        }

 

step2, CustomMessages.cs

 

 

 
//发送数据的函数 
 public void Send_Messages() 
 { // If we are connected to a session, broadcast our info 
 if (serverConnection != null && serverConnection.IsConnected()) 
 { // Create an outgoing network message to contain all the info we want to send
 NetworkOutMessage msg = CreateMessage((byte)TestMessageID.HeadTransform); //把要发送的数据写这儿或在这儿从其他地方来调用,然后发送到服务器 //1,把要发送的数据先转换为
byte[] byteArray = ..... int inTest = 10; 
 msg.Write(inTest); 
 string str = "Hello Poem and poet!"; 
 msg.Write(str);
//基础数据类型都可以通过这样的方式传送 
 double doubleTest = 3.14159; byte[] inTestArray = BitConverter.GetBytes(doubleTest); 
 //byte[] data = inTestArray;
 2 把转换后byte[]数组的长度写入 
 msg.Write(Length); 
 msg.Write(inTestArray.Length); //uint len = (uint)inTestArray.Length; 3, 把数据转化为要求发送的格式 msg.WriteArray(byteArray,(uint)Length); 
 msg.WriteArray(inTestArray, (uint)inTestArray.Length); 
 // Send the message as a broadcast, which will cause the server to forward it to all other users in the session. serverConnection.Broadcast( msg, MessagePriority.Immediate, MessageReliability.UnreliableSequenced, MessageChannel.Avatar); } }

 

 

 

e, Remote Client。如果只负责接受数据则只需要RemoteHeadManager个脚本,如果要发送数据则两个都需要。

step1, RemoteHeadManager

      private void Start()
        {
            //CustomMessages.Instance.MessageHandlers[CustomMessages.TestMessageID.HeadTransform] = UpdateHeadTransform;
            CustomMessages.Instance.MessageHandlers[CustomMessages.TestMessageID.HeadTransform] = Recv_OtherClientMesssages;

            // SharingStage should be valid at this point, but we may not be connected.
            if (SharingStage.Instance.IsConnected)
            {
                Connected();
            }
            else
            {
                SharingStage.Instance.SharingManagerConnected += Connected;
            }
        }Recv_OtherClientMesssages;

            // SharingStage should be valid at this point, but we may not be connected.
            if (SharingStage.Instance.IsConnected)
            {
                Connected();
            }
            else
            {
                SharingStage.Instance.SharingManagerConnected += Connected;
            }
        }

 

..........................

 

        //接受来自其他客户端的信息
        private void Recv_OtherClientMesssages(NetworkInMessage msg)
        {
            // Parse the message
            long userID = msg.ReadInt64();

            int rec = msg.ReadInt32();
            Debug.Log("rec is " + rec);

            string str = msg.ReadString();
            Debug.Log("str" + str);

            int len = msg.ReadInt32();
            byte[] data = new byte[sizeof(double)];
            msg.ReadArray(data, (uint)len);

            double pi = BitConverter.ToDouble(data, 0);
            Debug.Log("pi" + pi);

        }Recv_OtherClientMesssages(NetworkInMessage msg)
        {
            // Parse the message
            long userID = msg.ReadInt64();

            int rec = msg.ReadInt32();
            Debug.Log("rec is " + rec);

            string str = msg.ReadString();
            Debug.Log("str" + str);

            int len = msg.ReadInt32();
            byte[] data = new byte[sizeof(double)];
            msg.ReadArray(data, (uint)len);

            double pi = BitConverter.ToDouble(data, 0);
            Debug.Log("pi" + pi);

        }

step2, 如果要发数据写法和Local client的写法一样。

 

f, 如果unity5.6.3的程序运行没问题,在2017.3.1f的程序上直接打开时,选择我备份了的按钮,还有错误:

双击打开有错误的地方,只需要把VR修改为XR即可

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值