Scene与Entity

本文详细解析了游戏服务器中场景管理的运作机制,包括场景管理服务器(SceneMgrServer)、场景服务器(SceneServer)及其上的场景实体(SceneEntity)。阐述了角色如何在世界地图和副本地图间切换,以及服务器和客户端如何同步地图加载过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SceneMgrServer:场景管理服务器,管理所有的SceneServer以及其上的SceneEntity。

SceneServer:场景服务器,承载若干场景类型的Entity,即SceneEntity,每个SceneEntity代表一个场景,可能是世界地图也可能是副本地图。

进入世界地图:

1.SceneMgrServer获取该角色上次下线时的mapId和位置,根据mapId从所有SceneServer中获取指定mapId的SceneEntity,向该SceneEntity发送RPC告知角色将要进入地图,以及角色的位置。

2.SceneMgrServer收到该SceneEntity的CouldJoin后,在该SceneEntity上创建角色Entity,服务器正式进入地图。

3.SceneEntity通知客户端加载新地图,客户端正式进入地图。

4.角色下线时保存mapId和位置。

 

进入副本地图:

1.SceneMgrServer会选择某个SceneServer,在其上动态创建SceneEntity

2.该SceneEntity加载地图,并通知SceneMgrServer加载完成,即SceneReady

3.SceneMgrServer向该SceneEntity发送RPC,告知角色的位置

4.SceneMgrServer收到该SceneEntity的CouldJoin后,在该SceneEntity上创建角色Entity,服务器正式进入地图。

5.SceneEntity通知客户端加载新地图,客户端正式进入地图。

### 如何在Cesium中将Entity置顶显示 在Cesium中,`Entity`的渲染顺序主要由其属性和视图管理器(`Viewer`或`Scene`)的深度缓冲区控制。为了实现将某个`Entity`置顶显示的效果,可以调整以下属性或方法[^1]: - **设置` zIndex`属性**:虽然Cesium的`Entity`本身没有直接的`zIndex`属性,但可以通过设置`Billboard`或`Label`的`scaleByDistance`、`heightReference`等属性来间接影响渲染优先级[^2]。 - **使用`classificationType`属性**:通过设置`classificationType`为`Cesium.ClassificationType.BOTH`,可以让特定的`Entity`覆盖其他对象,从而实现置顶效果[^3]。 - **调整`viewer.scene.globe.depthTestAgainstTerrain`**:如果需要确保某些`Entity`始终位于地形之上,可以禁用深度测试或将深度测试调整为适合的值[^4]。 - **创建自定义渲染顺序**:对于更复杂的场景,可以通过Cesium的`Primitive`集合手动管理渲染顺序。例如,将需要置顶的`Entity`添加到单独的`Primitive`集合中,并确保该集合最后被渲染[^5]。 以下是通过代码示例展示如何将一个`Entity`置顶的方法之一: ```javascript // 创建Cesium Viewer实例 var viewer = new Cesium.Viewer('cesiumContainer'); // 添加一个普通的Entity var normalEntity = viewer.entities.add({ position: Cesium.Cartesian3.fromDegrees(-100.0, 40.0, 300000), point: { pixelSize: 10, color: Cesium.Color.RED } }); // 添加一个需要置顶的Entity var topEntity = viewer.entities.add({ position: Cesium.Cartesian3.fromDegrees(-100.0, 40.0, 400000), point: { pixelSize: 20, color: Cesium.Color.BLUE, heightReference: Cesium.HeightReference.RELATIVE_TO_GROUND // 确保相对于地面的高度 }, classificationType: Cesium.ClassificationType.BOTH // 置顶的关键属性 }); // 刷新以确保渲染顺序正确 viewer.zoomTo(viewer.entities); ``` 上述代码中,`classificationType`属性被设置为`Cesium.ClassificationType.BOTH`,这使得`topEntity`能够覆盖其他对象,从而实现置顶效果[^6]。 ### 注意事项 - 如果需要更精确的控制,建议使用Cesium的`Primitive`集合手动管理渲染顺序。 - 深度测试(`depthTestAgainstTerrain`)可能会影响`Entity`的渲染结果,需根据具体需求进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值