| class SimpleServer { HostID m_playerGroup = HostID_None; void Run() { ... m_playerGroup = m_netServer->CreateP2PGroup(); m_netServer->JoinP2PGroup(HostID_Server, m_playerGroup); ... |
| DEFRMI_Simple_JoinGameScene(SimpleServer) { ... // P2P group join m_netServer->JoinP2PGroup(remote, m_playerGroup); |
| class NetManger { HostID m_playerP2PGroup = HostID.None; void Start() { ... m_netClient.P2PMemberJoinHandler = (HostID memberHostID, HostID groupHostID, int memberCount, ByteArray customField) => { m_playerP2PGroup = groupHostID; }; |
| global Simple 1000 { ... Player_Move( [in] float x, [in] float y, [in] float z, [in] float vx, [in] float vy, [in] float vz, [in] float angle); } |
| class NetManager { float m_lastSendTime = -1; void Update() { if (m_netClient != null) { // If connection online if (m_netClient.GetLocalHostID() != HostID.HostID_None) // (1) { // send player move message if (m_lastSendTime < 0 || Time.time - m_lastSendTime > 0.1) { var sendOption = new RmiContext(); // (2) sendOption.reliability = MessageReliability.MessageReliability_Unreliable; sendOption.maxDirectP2PMulticastCount = 30; sendOption.enableLoopback = false; var pc = m_localPlayer.GetComponent<PlayControl>(); m_proxy.Player_Move(m_playerP2PGroup, sendOption, m_localPlayer.transform.position.x, m_localPlayer.transform.position.y, m_localPlayer.transform.position.z, 0, 0, 0, pc.carAngle); m_lastSendTime = Time.time; ... |
| m_stub.Player_Move = (Nettention.Proud.HostID remote, Nettention.Proud.RmiContext rmiContext, float x, float y, float z, float vx, float vy, float vz, float angle) => { var g = GameObject.Find("RemotePlayer/" + remote.ToString()); if (g != null) { g.transform.rotation = new UnityEngine.Vector3(x, y, z); var rot = Quaternion.AngleAxis(angle, new UnityEngine.Vector3(0, 1, 0)); g.transform.rotation = rot; } return true; }; |
| DEFRMI_Simple_Player_Move(SimpleServer) { CriticalSectionLock lock(m_critSec, true); // validation check auto it = m_remoteClients.find(remote); if (it == m_remoteClients.end()) { return true; } auto& rc = it->second; // update player info rc->m_x = x; rc->m_y = y; rc->m_z = z; rc->m_vx = vx; rc->m_vy = vy; rc->m_vz = vz; rc->m_angle = angle; return true; } |
登录 后参与讨论
暂无评论,来抢沙发








