hand
_1_7_55
4
返回栏目
1k
0.2k
0.5k
0.1k
0k
0.2k
0k
0.7k
0k
0k
0.4k
0.1k
4k
0.2k
0.1k
2k
0.2k
0.2k
0k
0k
0.5k
0k
0.9k
0.1k
1k
0.9k
2k
1k
2k
0.9k
1k
0k
1k
0k
1k
1k
1k
1k
0k
1k
1k
1k
0k
3k
1k
0k
0.3k
1k
0.3k
0.9k
0k
8k
9k
6k
2k
1k
2k
1k
1k
2k
0.6k
1k
0.6k
1k
0.5k
0.2k
2k
2k
2k
1k
2k
0k
0.8k
0.8k
1k
0k
0k
0k
0k
0k
0k
0k
0k
0.3k
0.4k
0.8k
0.3k
5k
1k
3k
7k
6k
3k
3k
1k
0.2k
2k
3k
2k
0.4k
0.5k
3k
2k
7k
3k
4k
2k
1k
6k
6k
1k
1k
0.9k
0.2k
0.3k
0.9k
1k
0k
0.8k
2k
0k
0.4k
0.1k
1k
0.9k
0.2k
1k
1k
0.5k
0k
0k
0.4k
4k
0.4k
2k
3k
1k
1k
1k
3k
5k
0k
1k
2k
0.5k
0k
1k
0k
1k
0.5k
0.8k
返回Unity - 游戏引擎栏目
作者:
贺及楼
成为作者
更新日期:2024-06-06 19:38:13
解决方案资源管理器—解决方案“MyGameServer”—右键—添加—新建项—文件夹
命名为:
Threads
解决方案资源管理器—解决方案“MyGameServer”—Threads—右键—添加—新建项—类库
命名为:
SyncPositionThread.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using Common;
using System.Xml.Serialization;
using System.IO;
using Photon.SocketServer;
//线程
namespace MyGameServer.Threads
{
public class SyncPositionThread
{
private Thread t;
//开启线程
public void Run()
{
t = new Thread(UpdatePosition);
t.IsBackground = true;
t.Start();
}
//停止线程
public void Stop()
{
t.Abort();
}
private void UpdatePosition()
{
Thread.Sleep(5000);//休息5秒
while (true)
{
Thread.Sleep(200);//休息0.2秒
//进行同步
SendPosition();
}
}
//发送位置
private void SendPosition()
{
//封装位置信息
List<PlayerData> playerDataList = new List<PlayerData>();
foreach (ClientPeer peer in MyGameServer.Instance.peerList)//遍历所有客户端
{
if (string.IsNullOrEmpty(peer.username) == false)
{
PlayerData playerData = new PlayerData();//实例化
playerData.Username = peer.username;//用户名
playerData.Pos = new Vector3Data() { x = peer.x, y = peer.y, z = peer.z };//位置
playerDataList.Add(playerData);//放入集合
}
}
StringWriter sw = new StringWriter();
XmlSerializer serializer = new XmlSerializer(typeof(List<PlayerData>));
serializer.Serialize(sw, playerDataList);
sw.Close();
string playerDataListString = sw.ToString();
Dictionary<byte, object> data = new Dictionary<byte, object>();
data.Add((byte)ParameterCode.PlayerDataList, playerDataListString);
foreach (ClientPeer peer in MyGameServer.Instance.peerList)
{
if (string.IsNullOrEmpty(peer.username) == false)
{
EventData ed = new EventData((byte) EventCode.SyncPosition );//实例化
ed.Parameters=data;
peer.SendEvent(ed, new SendParameters());
}
}
}
}
}
Unity - 游戏引擎
整章节共151节
快分享给你的小伙伴吧 ~