ParentLengthConstraintJob

This commit is contained in:
ousttrue
2024-11-20 20:57:08 +09:00
parent 423830cc76
commit e2674dda41
2 changed files with 34 additions and 6 deletions

View File

@@ -83,9 +83,6 @@ namespace RotateParticle.Jobs
+ external
;
// 位置を長さで拘束
newPosition = parentPosition + (newPosition - parentPosition).normalized * particle.InitLocalPosition.magnitude;
NextPositions[index] = newPosition;
}
else
@@ -98,16 +95,39 @@ namespace RotateParticle.Jobs
}
}
/// <summary>
/// 親の位置に依存。再帰
/// </summary>
public struct ParentLengthConstraintJob : IJobParallelFor
{
[ReadOnly] public NativeArray<WarpInfo> Warps;
[ReadOnly] public NativeArray<TransformInfo> Info;
[NativeDisableParallelForRestriction] public NativeArray<Vector3> NextPositions;
public void Execute(int index)
{
var warp = Warps[index];
for (int i = warp.StartIndex; i < warp.EndIndex - 1; ++i)
{
// 位置を長さで拘束
NextPositions[i + 1] = NextPositions[i] +
(NextPositions[i + 1] - NextPositions[i]).normalized
* Info[i + 1].InitLocalPosition.magnitude;
}
}
}
/// <summary>
/// 親の回転に依存。再帰
/// </summary>
public struct ApplyRotationJob : IJobParallelFor
{
[ReadOnly] public NativeArray<WarpInfo> Warps;
[ReadOnly] public NativeArray<TransformInfo> Info;
[ReadOnly] public NativeArray<TransformData> CurrentTransforms;
[ReadOnly] public NativeArray<Vector3> NextPositions;
[NativeDisableParallelForRestriction] public NativeArray<Vector3> NextPositions;
[NativeDisableParallelForRestriction] public NativeArray<Quaternion> NextRotations;
public void Execute(int index)
{
// warp 一本を親から子に再帰的に実行して回転を確定させる
var warp = Warps[index];
for (int i = warp.StartIndex; i < warp.EndIndex - 1; ++i)
{

View File

@@ -219,10 +219,18 @@ namespace RotateParticle.Jobs
NextRotations = _nextRotations,
}.Schedule(_info.Length, 128, handle);
// 親子の長さで拘束
handle = new ParentLengthConstraintJob
{
Warps = _warps,
Info = _info,
NextPositions = _nextPositions,
}.Schedule(_warps.Length, 1, handle);
// collision
handle = new CollisionJob
{
Colliders = _colliders,
Colliders = _colliders,
CurrentColliders = _currentColliders,
Info = _info,
NextPositions = _nextPositions,