问题描述
A框架camera docs说要创建像这样的HUD:
<a-entity camera look-controls>
<a-entity geometry="primitive: plane; height: 0.2; width: 0.2" position="0 0 -1"
material="color: gray; opacity: 0.5"></a-entity>
</a-entity>
但是,这会导致HUD元素被游戏中的对象剪切。通常,HUD渲染在所有其他游戏对象上方的单独图层上。有解决此问题的简单方法吗?
解决方法
您必须:
- 设置
renderer.sortObjects = true;
- 设置实体
this.el.object3D.renderOrder = 100;
的渲染顺序 - 禁用材料深度测试
material.depthTest = false;
我创建了一个简单的overlay
组件,可以轻松地将以上内容应用于任何实体。
AFRAME.registerComponent("overlay",{
dependencies: ['material'],init: function () {
this.el.sceneEl.renderer.sortObjects = true;
this.el.object3D.renderOrder = 100;
this.el.components.material.material.depthTest = false;
}
});
<a-entity camera look-controls wasd-controls position="0 1.6 0">
<a-plane id="hud" overlay rotation="0 0 0" position="0 0 -2" width="1" height="1" color="purple" shadow></a-plane>
</a-entity>
glitch上的示例