调试渲染器
**调试渲染器(Debug renderer)**是一个占位渲染器,可配合脚本打印调试信息。默认情况下,调试渲染器作为游戏入口点的子级包含在图形合成器中。

创建调试渲染器
要创建调试渲染器,请右键单击图形合成器编辑器,然后选择 Debug renderer。

将调试渲染器连接到入口点
在大多数情况下,你希望调试渲染器与一个或多个前向渲染器共享同一个入口点。为此,请使用场景渲染器集合,并将调试渲染器和前向渲染器选为子级,如下图所示:

使用调试渲染器
要使用调试渲染器,请在脚本中引用它并添加调试渲染阶段。
例如,Stride 自带的 Debug physics shapes 脚本就使用调试渲染器在运行时显示碰撞体形状。
using System.Linq;
using System.Threading.Tasks;
using Stride.Input;
using Stride.Engine;
using Stride.Physics;
using Stride.Rendering;
using Stride.Rendering.Compositing;
namespace MyGame
{
public class DebugPhysicsShapes : AsyncScript
{
public RenderGroup RenderGroup = RenderGroup.Group7;
public override async Task Execute()
{
// 如果存在 debug 入口点,则在其中设置渲染
var compositor = SceneSystem.GraphicsCompositor;
var debugRenderer =
((compositor.Game as SceneCameraRenderer)?.Child as SceneRendererCollection)?.Children.Where(
x => x is DebugRenderer).Cast<DebugRenderer>().FirstOrDefault();
if (debugRenderer == null)
return;
var shapesRenderState = new RenderStage("PhysicsDebugShapes", "Main");
compositor.RenderStages.Add(shapesRenderState);
var meshRenderFeature = compositor.RenderFeatures.OfType<MeshRenderFeature>().First();
meshRenderFeature.RenderStageSelectors.Add(new SimpleGroupToRenderStageSelector
{
EffectName = "StrideForwardShadingEffect",
RenderGroup = (RenderGroupMask)(1 << (int)RenderGroup),
RenderStage = shapesRenderState,
});
meshRenderFeature.PipelineProcessors.Add(new WireframePipelineProcessor { RenderStage = shapesRenderState });
debugRenderer.DebugRenderStages.Add(shapesRenderState);
var simulation = this.GetSimulation();
if (simulation != null)
simulation.ColliderShapesRenderGroup = RenderGroup;
var enabled = false;
while (Game.IsRunning)
{
if (Input.IsKeyDown(Keys.LeftShift) && Input.IsKeyDown(Keys.LeftCtrl) && Input.IsKeyReleased(Keys.P))
{
if (simulation != null)
{
if (enabled)
{
simulation.ColliderShapesRendering = false;
enabled = false;
}
else
{
simulation.ColliderShapesRendering = true;
enabled = true;
}
}
}
await Script.NextFrame();
}
}
}
}
有关如何使用此脚本的信息,请参阅碰撞体。