| global Simple 1000 { JoinGameScene([in] float x, [in] float y, [in] float z, [in] float angle); Player_Appear([in] int hostID, [in] std::wstring userID, [in] float x, [in] float y, [in] float z, [in] float vx, [in] float vy, [in] float vz, [in] float angle); Player_Disappear([in] int hostID); ... |
| m_stub.NotifyLoginSuccess = (HostID remote, RmiContext rmiContext) => { // join the world! m_proxy.JoinGameScene(HostID.HostID_Server, RmiContext.ReliableSend, m_localPlayer.transform.position.x, m_localPlayer.transform.position.y, m_localPlayer.transform.position.z, m_localPlayer.GetComponent<PlayControl>().carAngle); // show 30 ends here ... |
| class SimpleServer { DECRMI_Simple_JoinGameScene; ... DEFRMI_Simple_JoinGameScene(SimpleServer) { // 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_angle = angle; |
| DEFRMI_Simple_JoinGameScene(SimpleServer) { ... assert(it->first == remote); // Let incomer know others, let others know incomers. for (auto otherIter : m_remoteClients) { if (otherIter.first != it->first) { auto& otherRC = otherIter.second; m_proxy.Player_Appear((HostID)it->first, RmiContext::ReliableSend, (HostID)otherIter.first, otherRC->m_userID, otherRC->m_x, otherRC->m_y, otherRC->m_z, otherRC->m_vx, otherRC->m_vy, otherRC->m_vz, otherRC->m_angle); m_proxy.Player_Appear((HostID)otherIter.first, RmiContext::ReliableSend, (HostID)it->first, rc->m_userID, rc->m_x, rc->m_y, rc->m_z, rc->m_vx, rc->m_vy, rc->m_vz, rc->m_angle); } } |
| m_netServer->OnClientLeave = [this](CNetClientInfo* info, ErrorInfo*, const ByteArray&) { // let others know the disappear vector<int> others; for (auto otherIter : m_remoteClients) { others.push_back(otherIter.first); } m_proxy.Player_Disappear((HostID*)others.data(), others.size(), RmiContext::ReliableSend, info->m_HostID); ... |
| public class NetManager : MonoBehaviour { public GameObject m_remotePlayerPrefab; void Start() { m_stub.Player_Appear = (HostID remote, RmiContext rmiContext, int hostID, System.String userID, float x, float y, float z, float vx, float vy, float vz, float angle) => { if (hostID != (int)m_netClient.GetLocalHostID()) { var rot = Quaternion.AngleAxis(angle, new UnityEngine.Vector3(0, 1, 0)); var remotePlayerCharacter = (GameObject)Instantiate(m_remotePlayerPrefab, new UnityEngine.Vector3(x, y, z), rot); remotePlayerCharacter.name = "RemotePlayer/" + hostID.ToString(); } return true; }; |
| m_stub.Player_Disappear = (Nettention.Proud.HostID remote, Nettention.Proud.RmiContext rmiContext, int hostID) => { var g = GameObject.Find("RemotePlayer/" + hostID.ToString()); if (g != null) { Destroy(g); } return true; }; |
登录 后参与讨论
暂无评论,来抢沙发








