您最多选择25个主题 主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 
 

41 行
1.6 KiB

using Unity.Burst;
using Unity.Collections;
using Unity.Entities;
using Unity.Jobs;
using Unity.Mathematics;
using Unity.Transforms;
using UnityEngine;
namespace Unity.Rendering
{
[UpdateAfter(typeof(EndFrameBarrier))]
[UpdateBefore(typeof(MeshInstanceRendererSystem))]
public class MeshRenderBoundsUpdateSystem : JobComponentSystem
{
[RequireSubtractiveComponent(typeof(Frozen))]
[BurstCompile]
struct BoundsJob : IJobProcessComponentData<MeshRenderBounds, LocalToWorld, WorldMeshRenderBounds>
{
public void Execute([ChangedFilter] [ReadOnly] ref MeshRenderBounds inLocalBounds, [ChangedFilter] [ReadOnly] ref LocalToWorld inTransform, ref WorldMeshRenderBounds outWorldBounds)
{
outWorldBounds.Center = math.mul(inTransform.Value, new float4(inLocalBounds.Center,1.0f)).xyz;
float3 scaleSqr = new float3(
math.lengthSquared(inTransform.Value.c0),
math.lengthSquared(inTransform.Value.c1),
math.lengthSquared(inTransform.Value.c2)
);
float largestScaleSqr = math.cmax(scaleSqr);
float largestScale = math.sqrt(largestScaleSqr);
outWorldBounds.Radius = largestScale * inLocalBounds.Radius;
}
}
protected override JobHandle OnUpdate(JobHandle dependency)
{
var boundsJob = new BoundsJob { };
dependency = boundsJob.Schedule(this, dependency);
return dependency;
}
}
}