# RhinoX-MultiUser-Battle **Repository Path**: PolyEngine_Ent/rhinox-multiuser-battle ## Basic Information - **Project Name**: RhinoX-MultiUser-Battle - **Description**: 多用户对战Demo - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-09-28 - **Last Updated**: 2021-11-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # RhinoX-MultiUser-Battle #### 介绍 多用户对战Demo,需要在同个局域网里,可以多个玩家进入游戏进行射击 #### 使用说明 ##### 1. 多用户SDK使用注意点 1.1 Reliable方法 使用TCP协议,用于比重较要的数据发送,比如玩家Avatar的创建和血量的更新等 TiNetMessage.SendToAllReliable(); TiNetMessage.SendToReliable(I_TiNetNode Node); 1.2 Unreliable方法 使用UDP协议,用于不太重要的数据发送,可以允许偶尔丢失,比如玩家Avatar的位置同步等 TiNetMessage.SendToAllUnreliable(); TiNetMessage.SendToUnreliable(I_TiNetNode Node); ##### 2. 如何管理多人游戏中的资源生命周期 2.1 Avatar 2.1.1 创建Avatar 继承TiNetMonoBehaviour,重写TiNet_OnNodeConnected方法,当有玩家加入时会触发,可在此方法里发送本地Avatar信息进行创建 2.1.2 更新Avatar Avatar预设上添加SyncIdentity和SyncTransform脚本,设置NetworkID,可以进行位置和方向的同步 2.1.3 销毁Avatar 继承TiNetMonoBehaviour,重写TiNet_OnNodeDisconnected方法,当玩家断线时会触发,可在此方法里销毁其他玩家Avatar 2.2 同步Gun 添加SyncController脚本,选择PlayerHandPrefab和SyncControllerIndex,当有手柄加入时会同步Gun位置和方向 2.3 同步Bullet RXInput.IsButtonDown(RhinoXButton.ControllerTrigger, ControllerIndex.Controller_Right_Controller) 当手柄触发Trigger键时发送创建Bullet消息,位置同步与Avatar类似,销毁也发送对应消息,可以考虑使用对象池进行管理 ##### 3. 关于定位问题的一些注意要点 3.1 游戏中需要添加GroundPlane,右键选择RhinoX/Ground Plane/Beacon 01/02/03,ARCamera上的TrackingProfile需要设置 进入游戏时玩家需要看向Beacon进行位置定位,如果在游戏中双方玩家位置不匹配,可以在GroundPlane上添加RuntimeGizmos脚本,在头显里查看Gizmos是否Beacon匹配 3.2 玩家Avatar的原点位置需要设置在头上,与ARCamera位置匹配,可参考Demo设置的参数,Gun与手柄的位置也可参考Demo