1
This commit is contained in:
@@ -31,19 +31,19 @@ public class VR2 : MonoBehaviour
|
||||
Register register = new();
|
||||
Logout logout = new();
|
||||
VRInfo vrinfo = new();
|
||||
VRPos vrpos = new();//<EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>
|
||||
VRPos vrpos = new();//自己的位置
|
||||
ObjPos gPos = new();
|
||||
Ask ask = new();
|
||||
Inform inform = new();
|
||||
BackInfo backInfo = new();
|
||||
float statHight = 0; //<EFBFBD><EFBFBD>ʼ<EFBFBD>ĸ߶<EFBFBD>
|
||||
Vector3 lastPos; //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>
|
||||
float distance = 0; //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD>ú<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD>õľ<EFBFBD><EFBFBD><EFBFBD>
|
||||
Vector3 myPositionChang; //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><EFBFBD>Ĺ<EFBFBD><EFBFBD>ĸ߶ȣ<EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
float statHight = 0; //开始的高度
|
||||
Vector3 lastPos; //最后的位置
|
||||
float distance = 0; //最后的位置和最新位置的距离
|
||||
Vector3 myPositionChang; //这个是自己修改过的高度,要传给服务器
|
||||
|
||||
Vector3 db_myPosition; //<EFBFBD>Լ<EFBFBD><EFBFBD>ԱȾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>
|
||||
Vector3 db_otherPosition; //<EFBFBD><EFBFBD><EFBFBD>˶ԱȾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>
|
||||
float db_distance = 0; //<EFBFBD>Աȵľ<EFBFBD><EFBFBD><EFBFBD>
|
||||
Vector3 db_myPosition; //自己对比距离的位置
|
||||
Vector3 db_otherPosition; //别人对比距离的位置
|
||||
float db_distance = 0; //对比的距离
|
||||
//TimelineProgress timelineProgress = new();
|
||||
|
||||
string user = "u";
|
||||
@@ -61,11 +61,11 @@ public class VR2 : MonoBehaviour
|
||||
public GameObject cubeObj;
|
||||
|
||||
internal UnityEvent<uint, int> OnTimelineProgress = new();
|
||||
// <EFBFBD>洢<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Good<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>
|
||||
// 存储所有Good对象的字典
|
||||
private Dictionary<string, Good> goodsDictionary = new Dictionary<string, Good>();
|
||||
|
||||
int erorrCount;
|
||||
private Memory<byte> _receiveMemory = Memory<byte>.Empty; //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
private Memory<byte> _receiveMemory = Memory<byte>.Empty; //缓冲区
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
@@ -83,15 +83,32 @@ public class VR2 : MonoBehaviour
|
||||
|
||||
GlobalEventMgr.Listen<int>(GameEvent.EventAnimalSend, GameDataManage_EventAnimalSend);
|
||||
|
||||
// MyLoadSceneAsync(1);//<EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><EFBFBD><EFBFBD>
|
||||
// MyLoadSceneAsync(1);//加载第一个内容场景
|
||||
}
|
||||
|
||||
void Init()
|
||||
void ReadConfig()
|
||||
{
|
||||
if (File.Exists(Config.IpConfig))
|
||||
Config.TcpHost = File.ReadAllText(Config.IpConfig);
|
||||
{
|
||||
string[] str = File.ReadAllText(Config.IpConfig).Split('\n');
|
||||
Config.TcpHost = str[0];
|
||||
WebNet.webIp = str[1];
|
||||
|
||||
WebNet.assetsUrl = $"{WebNet.webIp}/api/dev/login";
|
||||
WebNet.DownAssetsUrl = $"{WebNet.webIp}/storage/resource";
|
||||
WebNet.UploadInfoUrl = $"{WebNet.webIp}/api/dev/uploadUsageInfo";
|
||||
WebNet.getDeviceList = $"{WebNet.webIp}/api/tablet/getDeviceList";
|
||||
WebNet.uploadEQ = $"{WebNet.webIp}/api/dev/uploadEQ";
|
||||
}
|
||||
else
|
||||
File.WriteAllText(Config.IpConfig, Config.TcpHost);
|
||||
{
|
||||
string str = $"{Config.TcpHost}\n{WebNet.webIp}";
|
||||
File.WriteAllText(Config.IpConfig, str);
|
||||
}
|
||||
}
|
||||
void Init()
|
||||
{
|
||||
ReadConfig();
|
||||
|
||||
|
||||
cameraTran = Camera.main.transform;
|
||||
statHight = Camera.main.transform.position.y;
|
||||
@@ -123,7 +140,7 @@ public class VR2 : MonoBehaviour
|
||||
_messageHandlers[21] = HandleTimeLineProgress;
|
||||
}
|
||||
|
||||
//<EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>
|
||||
//发送创建动物事件
|
||||
void GameDataManage_EventAnimalSend(int animalType)
|
||||
{
|
||||
sendCom(3, animalType, 0);
|
||||
@@ -131,7 +148,7 @@ public class VR2 : MonoBehaviour
|
||||
|
||||
void Update()
|
||||
{
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//测试
|
||||
if (Input.GetKeyDown(KeyCode.Space))
|
||||
{
|
||||
//Logout logout = new Logout();
|
||||
@@ -150,7 +167,7 @@ public class VR2 : MonoBehaviour
|
||||
MyLoadSceneAsync(1);
|
||||
}
|
||||
|
||||
//<EFBFBD>˳<EFBFBD><EFBFBD><EFBFBD>Ϸ
|
||||
//退出游戏
|
||||
if (Input.GetKey(KeyCode.JoystickButton0))
|
||||
{
|
||||
quitTimers += Time.deltaTime;
|
||||
@@ -193,7 +210,7 @@ public class VR2 : MonoBehaviour
|
||||
}
|
||||
}
|
||||
|
||||
//ͷ<EFBFBD><EFBFBD><EFBFBD>仯
|
||||
//头盔变化
|
||||
if (Application.platform == RuntimePlatform.Android)
|
||||
{
|
||||
if (InputDevices.GetDeviceAtXRNode(XRNode.Head).TryGetFeatureValue(CommonUsages.userPresence, out bool userPresence))
|
||||
@@ -210,7 +227,7 @@ public class VR2 : MonoBehaviour
|
||||
}
|
||||
|
||||
|
||||
//<EFBFBD><EFBFBD><EFBFBD>ӷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//连接服务器
|
||||
if (client != null)
|
||||
{
|
||||
if (!isConnecting)
|
||||
@@ -218,9 +235,7 @@ public class VR2 : MonoBehaviour
|
||||
if (DateTime.Now > connTime.AddSeconds(2))
|
||||
{
|
||||
connTime = DateTime.Now;
|
||||
Debug.Log("<22><>ʼ<EFBFBD><CABC>ַ:"+ Config.IpConfig);
|
||||
Config.TcpHost = File.ReadAllText(Config.IpConfig);
|
||||
Debug.Log($"<22><><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD>ip:{Config.TcpHost}");
|
||||
Debug.Log($"连接中。。。ip:{Config.TcpHost}");
|
||||
client.Open(new Host(Config.TcpHost, Config.TcpPort));
|
||||
Invoke("sendRegister", 1f);
|
||||
}
|
||||
@@ -237,7 +252,7 @@ public class VR2 : MonoBehaviour
|
||||
if (DateTime.Now > posTime.AddSeconds(0.5f))
|
||||
{
|
||||
posTime = DateTime.Now;
|
||||
if (cameraTran.position.y < (statHight * 0.7f)) //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><EFBFBD>ж<EFBFBD><EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
if (cameraTran.position.y < (statHight * 0.7f)) //这个是自己判断自己的状态后加的 蹲着
|
||||
{
|
||||
myPositionChang = new Vector3(cameraTran.position.x, 3, cameraTran.position.z);
|
||||
//cameraTran.position = new Vector3(cameraTran.position.x, 3, cameraTran.position.z);
|
||||
@@ -245,20 +260,20 @@ public class VR2 : MonoBehaviour
|
||||
else
|
||||
{
|
||||
distance = Vector3.Distance(lastPos, cameraTran.position);
|
||||
//Debug.Log("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>:" + lastPos + "||" + cameraTran.position+"||"+ distance);
|
||||
//Debug.Log("最后的位置:" + lastPos + "||" + cameraTran.position+"||"+ distance);
|
||||
if (distance <= 0.1f)
|
||||
{
|
||||
myPositionChang = new Vector3(cameraTran.position.x, 1, cameraTran.position.z);
|
||||
//cameraTran.position = new Vector3(cameraTran.position.x, 1, cameraTran.position.z); //վ<EFBFBD><EFBFBD>
|
||||
//cameraTran.position = new Vector3(cameraTran.position.x, 1, cameraTran.position.z); //站立
|
||||
}
|
||||
else
|
||||
{
|
||||
myPositionChang = new Vector3(cameraTran.position.x, 2, cameraTran.position.z);
|
||||
//cameraTran.position = new Vector3(cameraTran.position.x, 2, cameraTran.position.z); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//cameraTran.position = new Vector3(cameraTran.position.x, 2, cameraTran.position.z); //行走
|
||||
}
|
||||
}
|
||||
lastPos = cameraTran.position;
|
||||
//Debug.Log("<EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʲô״̬:" + myPositionChang.y);
|
||||
//Debug.Log("自己传的是什么状态:" + myPositionChang.y);
|
||||
sendvrPos(Config.SN, user, Config.Group, myPositionChang, cameraTran.rotation);
|
||||
}
|
||||
|
||||
@@ -284,14 +299,14 @@ public class VR2 : MonoBehaviour
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// ע<EFBFBD><EFBFBD>Good<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
/// 注册Good对象
|
||||
/// </summary>
|
||||
/// <param name="good">Ҫע<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Good<EFBFBD><EFBFBD><EFBFBD><EFBFBD></param>
|
||||
/// <param name="good">要注册的Good对象</param>
|
||||
public void RegisterGood(Good good)
|
||||
{
|
||||
if (good == null) return;
|
||||
|
||||
string key = good.gameObject.name; // ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>
|
||||
string key = good.gameObject.name; // 使用物体名作为键
|
||||
|
||||
if (!goodsDictionary.ContainsKey(key))
|
||||
{
|
||||
@@ -299,15 +314,15 @@ public class VR2 : MonoBehaviour
|
||||
}
|
||||
else
|
||||
{
|
||||
// <EFBFBD>Ѵ<EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>滻<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 已存在同名对象,可以选择替换或忽略
|
||||
goodsDictionary[key] = good;
|
||||
Debug.LogWarning($"<EFBFBD>Ѵ<EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><EFBFBD>Good<EFBFBD><EFBFBD><EFBFBD><EFBFBD>: {key}, <20><><EFBFBD>滻Ϊ<E6BBBB>¶<EFBFBD><C2B6><EFBFBD>");
|
||||
Debug.LogWarning($"已存在同名Good对象: {key}, 已替换为新对象");
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// ע<EFBFBD><EFBFBD>Good<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
/// 注销Good对象
|
||||
/// </summary>
|
||||
/// <param name="good">Ҫע<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Good<EFBFBD><EFBFBD><EFBFBD><EFBFBD></param>
|
||||
/// <param name="good">要注销的Good对象</param>
|
||||
public void UnregisterGood(Good good)
|
||||
{
|
||||
if (good == null) return;
|
||||
@@ -316,7 +331,7 @@ public class VR2 : MonoBehaviour
|
||||
|
||||
if (goodsDictionary.ContainsKey(key))
|
||||
{
|
||||
// ȷ<EFBFBD><EFBFBD><EFBFBD>Ƴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬһ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 确保移除的是同一个对象
|
||||
if (goodsDictionary[key] == good)
|
||||
{
|
||||
goodsDictionary.Remove(key);
|
||||
@@ -324,35 +339,35 @@ public class VR2 : MonoBehaviour
|
||||
}
|
||||
}
|
||||
|
||||
#region <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#region 网络
|
||||
void sendMessage<T>(uint type, T msg)
|
||||
{
|
||||
try
|
||||
{
|
||||
// <EFBFBD><EFBFBD><EFBFBD>л<EFBFBD><EFBFBD><EFBFBD>Ϣ
|
||||
// 序列化消息
|
||||
string json = JsonConvert.SerializeObject(msg);
|
||||
Debug.Log($"<EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>json: {json}");
|
||||
Debug.Log($"发送的json: {json}");
|
||||
byte[] msgBytes = NE.GetBytes(json);
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܳ<EFBFBD><EFBFBD>ȣ<EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> + <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD> + <20><>β<EFBFBD><CEB2>0<EFBFBD><30>
|
||||
int totalLength = sizeof(uint) + msgBytes.Length + 1; // <EFBFBD><EFBFBD><EFBFBD>ͳ<EFBFBD><EFBFBD><EFBFBD> + <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD> + 1<><31><EFBFBD><EFBFBD>β<EFBFBD><CEB2>0<EFBFBD><30>
|
||||
// 计算总长度(消息类型 + 消息内容 + 结尾的0)
|
||||
int totalLength = sizeof(uint) + msgBytes.Length + 1; // 类型长度 + 消息长度 + 1(结尾的0)
|
||||
|
||||
// ʹ<EFBFBD><EFBFBD> MemoryStream <EFBFBD><EFBFBD> BinaryWriter <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 使用 MemoryStream 和 BinaryWriter 构建字节数组
|
||||
using (var stream = new MemoryStream())
|
||||
using (var writer = new BinaryWriter(stream))
|
||||
{
|
||||
writer.Write(totalLength); // д<EFBFBD><EFBFBD><EFBFBD>ܳ<EFBFBD><EFBFBD><EFBFBD>
|
||||
writer.Write(type); // д<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
writer.Write(msgBytes); // д<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
writer.Write((byte)0); // д<EFBFBD><EFBFBD><EFBFBD><EFBFBD>β<EFBFBD><EFBFBD>0
|
||||
writer.Write(totalLength); // 写入总长度
|
||||
writer.Write(type); // 写入消息类型
|
||||
writer.Write(msgBytes); // 写入消息内容
|
||||
writer.Write((byte)0); // 写入结尾的0
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 发送数据
|
||||
client.ToData(stream.ToArray());
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.LogError("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣʧ<EFBFBD><EFBFBD>: " + ex.Message);
|
||||
Debug.LogError("发送消息失败: " + ex.Message);
|
||||
}
|
||||
}
|
||||
//
|
||||
@@ -366,7 +381,7 @@ public class VR2 : MonoBehaviour
|
||||
}
|
||||
void error(Exception e)
|
||||
{
|
||||
Debug.LogError($"<EFBFBD><EFBFBD><EFBFBD>Ӵ<EFBFBD><EFBFBD><EFBFBD>:{e.Message}");
|
||||
Debug.LogError($"连接错误:{e.Message}");
|
||||
}
|
||||
void msgEvent(string name, byte[] bytes)
|
||||
{
|
||||
@@ -377,7 +392,7 @@ public class VR2 : MonoBehaviour
|
||||
{
|
||||
if (bytes == null || bytes.Length == 0)
|
||||
{
|
||||
Debug.LogError("<EFBFBD><EFBFBD>Ч<EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
|
||||
Debug.LogError("无效数据包:空数据");
|
||||
return;
|
||||
}
|
||||
//string hexResult = "";
|
||||
@@ -385,10 +400,10 @@ public class VR2 : MonoBehaviour
|
||||
//{
|
||||
// hexResult += b.ToString("X2") + " ";
|
||||
//}
|
||||
//Debug.Log($"<EFBFBD><EFBFBD>Ϣ<EFBFBD>ֽ<EFBFBD>: {hexResult}");
|
||||
//Debug.Log($"消息字节: {hexResult}");
|
||||
|
||||
#region Memory<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#region Memory缓冲区
|
||||
// 将新数据追加到缓冲区
|
||||
_receiveMemory = CombineMemory(_receiveMemory, bytes.AsMemory());
|
||||
|
||||
try
|
||||
@@ -396,77 +411,77 @@ public class VR2 : MonoBehaviour
|
||||
while (_receiveMemory.Length >= 8)
|
||||
{
|
||||
var bufferSpan = _receiveMemory.Span;
|
||||
int contentLength = BitConverter.ToInt32(bufferSpan.Slice(0, 4));//<EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><EFBFBD><EFBFBD>
|
||||
int type = BitConverter.ToInt32(bufferSpan.Slice(4, 4));// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int contentLength = BitConverter.ToInt32(bufferSpan.Slice(0, 4));//数据长度
|
||||
int type = BitConverter.ToInt32(bufferSpan.Slice(4, 4));// 数据类型
|
||||
if (type > 100)
|
||||
{
|
||||
// <EFBFBD>ҵ<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD> 0 <20>ֽڵ<D6BD>λ<EFBFBD><CEBB>
|
||||
// 找到第一个 0 字节的位置
|
||||
int zeroIndex = _receiveMemory.Span.IndexOf((byte)0);
|
||||
if (zeroIndex >= 0)
|
||||
{
|
||||
_receiveMemory = _receiveMemory.Slice(zeroIndex + 1); // <EFBFBD>Ƴ<EFBFBD><EFBFBD><EFBFBD> 0 <20>ֽ<EFBFBD>֮<EFBFBD><D6AE>
|
||||
Debug.LogError($"<EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD><EFBFBD>: {type}<7D><><EFBFBD>Ƴ<EFBFBD><C6B3><EFBFBD> 0 <20>ֽ<EFBFBD>֮<EFBFBD><D6AE>");
|
||||
_receiveMemory = _receiveMemory.Slice(zeroIndex + 1); // 移除到 0 字节之后
|
||||
Debug.LogError($"数据包类型错误: {type},移除到 0 字节之后");
|
||||
}
|
||||
else
|
||||
{
|
||||
_receiveMemory = Memory<byte>.Empty; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD> 0 <20>ֽڣ<D6BD><DAA3><EFBFBD><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
|
||||
Debug.LogError($"<EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD><EFBFBD>: {type}<7D><>û<EFBFBD><C3BB> 0 <20>ֽڣ<D6BD><DAA3><EFBFBD><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>");
|
||||
_receiveMemory = Memory<byte>.Empty; // 如果没有 0 字节,清空缓冲区
|
||||
Debug.LogError($"数据包类型错误: {type},没有 0 字节,清空缓冲区");
|
||||
}
|
||||
break;
|
||||
}
|
||||
int totalPacketLength = 4 + contentLength;
|
||||
int msgLength = contentLength - 5;//(<EFBFBD><EFBFBD>4<EFBFBD><EFBFBD>1)
|
||||
int msgLength = contentLength - 5;//(减4减1)
|
||||
try
|
||||
{
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD>յ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>
|
||||
//检查是否收到完整的数据包
|
||||
if (_receiveMemory.Length >= totalPacketLength)
|
||||
{
|
||||
// <EFBFBD><EFBFBD>֤<EFBFBD><EFBFBD>β<EFBFBD>ֽ<EFBFBD><EFBFBD>Ƿ<EFBFBD>Ϊ0
|
||||
// 验证结尾字节是否为0
|
||||
if (bufferSpan[totalPacketLength - 1] != 0)
|
||||
{
|
||||
_receiveMemory = Memory<byte>.Empty;
|
||||
Debug.LogError("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>: ȱ<>ٽ<EFBFBD>β0<CEB2>ֽ<EFBFBD>");
|
||||
Debug.LogError("清除缓冲区,数据包格式错误: 缺少结尾0字节");
|
||||
break;
|
||||
}
|
||||
|
||||
var msgMemory = _receiveMemory.Slice(8, msgLength);
|
||||
string msg = Encoding.UTF8.GetString(msgMemory.Span);
|
||||
Debug.Log($"<EFBFBD>յ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ:{msg}");
|
||||
Debug.Log($"收到的消息:{msg}");
|
||||
if (_messageHandlers.TryGetValue(type, out var handler))
|
||||
{
|
||||
try
|
||||
{
|
||||
handler(msg);//ҵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
handler(msg);//业务处理
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Debug.LogError($"ҵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>{e.Message}");
|
||||
Debug.LogError($"业务逻辑处理报错:{e.Message}");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//Debug.LogError($"δ֪<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>: {type}");
|
||||
//Debug.LogError($"未知的消息类型: {type}");
|
||||
}
|
||||
//Debug.Log("<EFBFBD>ӻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƴ<EFBFBD><EFBFBD>Ѵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
|
||||
//Debug.Log("从缓冲区移除已处理的数据");
|
||||
_receiveMemory = _receiveMemory.Slice(totalPacketLength);
|
||||
erorrCount = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.LogError($"<EFBFBD><EFBFBD><EFBFBD>ݲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD>{type}<7D><>Ԥ<EFBFBD>ڳ<EFBFBD><DAB3><EFBFBD>: {totalPacketLength}, ʵ<EFBFBD>ʳ<EFBFBD><EFBFBD><EFBFBD>: {_receiveMemory.Length}");
|
||||
Debug.LogError($"数据不完整,类型:{type},预期长度: {totalPacketLength}, 实际长度: {_receiveMemory.Length}");
|
||||
erorrCount++;
|
||||
if (erorrCount >= 10)
|
||||
{
|
||||
erorrCount = 0;
|
||||
_receiveMemory = Memory<byte>.Empty;
|
||||
Debug.LogError("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>10<EFBFBD><EFBFBD>");
|
||||
Debug.LogError("清除缓冲区,数据不完整超过10次");
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Debug.LogError($"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>: {e.Message}");
|
||||
Debug.LogError($"清除缓冲区,处理数据包时出错: {e.Message}");
|
||||
_receiveMemory = Memory<byte>.Empty;
|
||||
}
|
||||
}
|
||||
@@ -474,7 +489,7 @@ public class VR2 : MonoBehaviour
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Debug.LogError($"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>쳣: {e.Message}");
|
||||
Debug.LogError($"清除缓冲区,消息处理异常: {e.Message}");
|
||||
_receiveMemory = Memory<byte>.Empty;
|
||||
}
|
||||
|
||||
@@ -482,7 +497,7 @@ public class VR2 : MonoBehaviour
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// <EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>
|
||||
/// 加载更新玩家位置
|
||||
/// </summary>
|
||||
void LoadPlayer(VRPos vrpos, ref Player player)
|
||||
{
|
||||
@@ -499,9 +514,19 @@ public class VR2 : MonoBehaviour
|
||||
player.isOtherPlayer = true;
|
||||
player.transform.name = vrpos.sn;
|
||||
player.sn = vrpos.sn;
|
||||
if(player.user)
|
||||
if (player.user)
|
||||
{
|
||||
player.user.text = vrpos.user;
|
||||
player.human = vrpos.human;
|
||||
if (vrpos.human > 1)
|
||||
{
|
||||
player.human = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
player.human = vrpos.human;
|
||||
}
|
||||
|
||||
}
|
||||
player.group = vrpos.group;
|
||||
player.x = vrpos.x;
|
||||
player.y = vrpos.y;
|
||||
@@ -512,11 +537,11 @@ public class VR2 : MonoBehaviour
|
||||
player.r = vrpos.r;
|
||||
player.LastTime = Time.time;
|
||||
|
||||
if (Config.Group == player.group) //ͬ<EFBFBD><EFBFBD>
|
||||
if (Config.Group == player.group) //同组
|
||||
{
|
||||
player.gameObject.SetActive(true);
|
||||
}
|
||||
else //<EFBFBD><EFBFBD>ͬ<EFBFBD><EFBFBD>
|
||||
else //不同组
|
||||
{
|
||||
db_myPosition.x = lastPos.x;
|
||||
db_myPosition.y = 0;
|
||||
@@ -525,8 +550,8 @@ public class VR2 : MonoBehaviour
|
||||
db_otherPosition.y = 0;
|
||||
db_otherPosition.z = player.z/ Config.times;
|
||||
db_distance = Vector3.Distance(db_myPosition, db_otherPosition);
|
||||
//Debug.Log("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:"+ db_distance);
|
||||
if (db_distance < 3)
|
||||
//Debug.Log("多少米:"+ db_distance);
|
||||
if (db_distance < 5)
|
||||
player.gameObject.SetActive(true);
|
||||
else
|
||||
player.gameObject.SetActive(false);
|
||||
@@ -535,7 +560,7 @@ public class VR2 : MonoBehaviour
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// <EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>
|
||||
/// 加载更新物体位置
|
||||
/// </summary>
|
||||
void LoadGood(Good good, ObjPos gPos)
|
||||
{
|
||||
@@ -552,10 +577,10 @@ public class VR2 : MonoBehaviour
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region <EFBFBD><EFBFBD>Ϣ
|
||||
#region 消息
|
||||
|
||||
/// <summary>
|
||||
/// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
/// 发送时间轴进度
|
||||
/// </summary>
|
||||
public void sendTimeLineProgress(uint scene, int progress)
|
||||
{
|
||||
@@ -564,11 +589,11 @@ public class VR2 : MonoBehaviour
|
||||
//timelineProgress.scene = scene;
|
||||
//timelineProgress.progress = progress;
|
||||
//sendMessage(16, timelineProgress);
|
||||
//Debug.Log($"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ: {timelineProgress.scene}+++++{timelineProgress.progress}");
|
||||
//Debug.Log($"发送时间轴消息: {timelineProgress.scene}+++++{timelineProgress.progress}");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>vr<EFBFBD>豸<EFBFBD><EFBFBD>Ϣ
|
||||
/// 发送vr设备信息
|
||||
/// </summary>
|
||||
void sendvrInfo(string sn, string name, uint power, uint status, uint wear)
|
||||
{
|
||||
@@ -582,7 +607,7 @@ public class VR2 : MonoBehaviour
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>vrλ<EFBFBD><EFBFBD>
|
||||
/// 发送vr位置
|
||||
/// </summary>
|
||||
void sendvrPos(string sn, string name, uint group, Vector3 v3, Quaternion qua)
|
||||
{
|
||||
@@ -601,7 +626,7 @@ public class VR2 : MonoBehaviour
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>
|
||||
/// 发送物体位置
|
||||
/// </summary>
|
||||
public void sendGoodPos(string objname, Vector3 v3, Quaternion qua)
|
||||
{
|
||||
@@ -620,7 +645,7 @@ public class VR2 : MonoBehaviour
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// ע<EFBFBD><EFBFBD>
|
||||
/// 注册
|
||||
/// </summary>
|
||||
void sendRegister()
|
||||
{
|
||||
@@ -631,7 +656,7 @@ public class VR2 : MonoBehaviour
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// ע<EFBFBD><EFBFBD>
|
||||
/// 注销
|
||||
/// </summary>
|
||||
public void sendLogout()
|
||||
{
|
||||
@@ -645,7 +670,7 @@ public class VR2 : MonoBehaviour
|
||||
Application.Quit();
|
||||
}
|
||||
/// <summary>
|
||||
/// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
/// 请求人物全量数据
|
||||
/// </summary>
|
||||
void sendAskInfo()
|
||||
{
|
||||
@@ -653,7 +678,7 @@ public class VR2 : MonoBehaviour
|
||||
sendMessage(5, ask);
|
||||
}
|
||||
/// <summary>
|
||||
/// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒȫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
/// 请求物品全量数据
|
||||
/// </summary>
|
||||
void sendGoodAskInfo()
|
||||
{
|
||||
@@ -662,7 +687,7 @@ public class VR2 : MonoBehaviour
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>֪ͨ
|
||||
/// 发送通知
|
||||
/// </summary>
|
||||
void sendCom(uint com, int value, float f)
|
||||
{
|
||||
@@ -676,7 +701,7 @@ public class VR2 : MonoBehaviour
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// <EFBFBD>ظ<EFBFBD>ƽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
||||
/// 回给平板消息
|
||||
/// </summary>
|
||||
void sendBackInfo()
|
||||
{
|
||||
@@ -686,13 +711,13 @@ public class VR2 : MonoBehaviour
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region <EFBFBD>յ<EFBFBD><EFBFBD><EFBFBD>Ϣִ<EFBFBD><EFBFBD>
|
||||
#region 收到消息执行
|
||||
private void HandleTimeLineProgress(string msg)
|
||||
{
|
||||
try
|
||||
{
|
||||
//TimelineProgress timelineProgress = JsonConvert.DeserializeObject<TimelineProgress>(msg);
|
||||
//Debug.Log($"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ: {msg}");
|
||||
//Debug.Log($"解析时间轴消息: {msg}");
|
||||
//if (Config.Group == timelineProgress.group)
|
||||
//{
|
||||
// OnTimelineProgress.Invoke(timelineProgress.scene, timelineProgress.progress);
|
||||
@@ -700,7 +725,7 @@ public class VR2 : MonoBehaviour
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.LogError($"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: {ex.Message}");
|
||||
Debug.LogError($"解析时间轴时遇到错误: {ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -721,7 +746,7 @@ public class VR2 : MonoBehaviour
|
||||
// if (Config.SN != inform.sn)
|
||||
// {
|
||||
// Player player = otherPlayers.Find(inform.sn).GetComponent<Player>();
|
||||
// GlobalEventMgr.Dispatch(GameEvent.EventAnimalSync, inform.value, player.transform.position); //<EFBFBD>յ<EFBFBD>ͬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// GlobalEventMgr.Dispatch(GameEvent.EventAnimalSync, inform.value, player.transform.position); //收到同组玩家创建动物
|
||||
// }
|
||||
// break;
|
||||
// default:
|
||||
@@ -730,7 +755,7 @@ public class VR2 : MonoBehaviour
|
||||
//}
|
||||
//catch (Exception ex)
|
||||
//{
|
||||
// Debug.LogError($"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֪ͨʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: {ex.Message}");
|
||||
// Debug.LogError($"解析玩家通知时遇到错误: {ex.Message}");
|
||||
//}
|
||||
}
|
||||
private void HandleVRControl(string msg)
|
||||
@@ -761,13 +786,13 @@ public class VR2 : MonoBehaviour
|
||||
case 6:
|
||||
switch (vrControl.volume)
|
||||
{
|
||||
case 0://<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
case 0://启动
|
||||
|
||||
break;
|
||||
case 1://<EFBFBD><EFBFBD>ͣ
|
||||
case 1://暂停
|
||||
|
||||
break;
|
||||
case 2://<EFBFBD>ر<EFBFBD>
|
||||
case 2://关闭
|
||||
|
||||
break;
|
||||
}
|
||||
@@ -777,7 +802,7 @@ public class VR2 : MonoBehaviour
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.LogError($"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: {ex.Message}");
|
||||
Debug.LogError($"解析控制设备时遇到错误: {ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -787,16 +812,16 @@ public class VR2 : MonoBehaviour
|
||||
try
|
||||
{
|
||||
var allIfo = JsonConvert.DeserializeObject<AllIfo>(msg);
|
||||
var currentSNs = new HashSet<string>(); // <EFBFBD><EFBFBD>ǰ֡<EFBFBD><EFBFBD> SN <20><><EFBFBD><EFBFBD>
|
||||
var currentSNs = new HashSet<string>(); // 当前帧的 SN 集合
|
||||
foreach (var vrGroupInfo in allIfo.all)
|
||||
{
|
||||
foreach (var vrpos in vrGroupInfo.vrs)
|
||||
{
|
||||
// <EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD><EFBFBD><EFBFBD> vrpos.sn
|
||||
// 记录所有 vrpos.sn
|
||||
currentSNs.Add(vrpos.sn);
|
||||
|
||||
Player p;
|
||||
if (string.Equals(vrpos.sn, Config.SN))//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>dz<EFBFBD>
|
||||
if (string.Equals(vrpos.sn, Config.SN))//如果是自己,则获得组名,获得体验者昵称
|
||||
{
|
||||
p = cameraTran.Find("Player").GetComponent<Player>();
|
||||
p.group = Config.Group = vrpos.group;
|
||||
@@ -811,19 +836,19 @@ public class VR2 : MonoBehaviour
|
||||
}
|
||||
}
|
||||
|
||||
// <EFBFBD>ԱȲ<EFBFBD><EFBFBD>첢<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD> SN
|
||||
// 对比差异并隐藏消失的 SN
|
||||
var missingSNs = _previousSNs.Except(currentSNs);
|
||||
foreach (var sn in missingSNs)
|
||||
{
|
||||
otherPlayers.Find(sn).gameObject.SetActive(false);
|
||||
}
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD>»<EFBFBD><EFBFBD><EFBFBD>
|
||||
// 更新缓存
|
||||
_previousSNs = currentSNs;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.LogError($"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: {ex.Message}");
|
||||
Debug.LogError($"解析所有玩家信息时遇到错误: {ex.Message}");
|
||||
}
|
||||
|
||||
}
|
||||
@@ -839,7 +864,7 @@ public class VR2 : MonoBehaviour
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.LogError($"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: {ex.Message}");
|
||||
Debug.LogError($"解析物体位置时遇到错误: {ex.Message}");
|
||||
}
|
||||
}
|
||||
void HandleVRPosition(string msg)
|
||||
@@ -852,7 +877,7 @@ public class VR2 : MonoBehaviour
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.LogError($"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: {ex.Message}");
|
||||
Debug.LogError($"解析玩家位置时遇到错误: {ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -866,13 +891,13 @@ public class VR2 : MonoBehaviour
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.LogError($"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: {ex.Message}");
|
||||
Debug.LogError($"解析玩家注销时遇到错误: {ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
int lastSceneIndex;//<EFBFBD>ϴγ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int lastSceneIndex;//上次场景索引
|
||||
IEnumerator loadSceneAsync(int index)
|
||||
{
|
||||
if (lastSceneIndex > 0)
|
||||
@@ -888,14 +913,14 @@ public class VR2 : MonoBehaviour
|
||||
lastSceneIndex = index;
|
||||
}
|
||||
/// <summary>
|
||||
/// ж<EFBFBD>ؾɳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ټ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>³<EFBFBD><EFBFBD><EFBFBD>
|
||||
/// 卸载旧场景再加载新场景
|
||||
/// </summary>
|
||||
public void MyLoadSceneAsync(int index)
|
||||
{
|
||||
StartCoroutine(loadSceneAsync(index));
|
||||
}
|
||||
|
||||
// <EFBFBD>ϲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Memory<byte><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD> List<byte>.AddRange<EFBFBD><EFBFBD>
|
||||
// 合并两个 Memory<byte>(模拟 List<byte>.AddRange)
|
||||
private Memory<byte> CombineMemory(Memory<byte> a, Memory<byte> b)
|
||||
{
|
||||
if (a.IsEmpty) return b;
|
||||
|
||||
Reference in New Issue
Block a user