private void Split(NvBlastActor actor) { NvBlastActorSplitEvent split = new NvBlastActorSplitEvent(); split.newActors = _newActorsBuffer; var count = actor.Split(split, _leafChunkCount); Vector3 localPosition = Vector3.zero; Quaternion localRotation = Quaternion.identity; if (split.deletedActor != IntPtr.Zero) { if (actor.userData != null) { var parentRigidbody = (actor.userData as Rigidbody); localPosition = parentRigidbody.transform.localPosition; localRotation = parentRigidbody.transform.localRotation; } OnActorDestroyed(actor); } for (int i = 0; i < count; i++) { int elementSize = Marshal.SizeOf(typeof(IntPtr)); var ptr = Marshal.ReadIntPtr(split.newActors, elementSize * i); OnActorCreated(new NvBlastActor(_blastFamily, ptr), localPosition, localRotation); } }
public UInt32 Split(NvBlastActorSplitEvent result, UInt32 newActorsMaxCount) { var scratchSize = NvBlastActorGetRequiredScratchForSplit(ptr, NvBlastWrapper.Log); UInt32 newActorsCount = NvBlastActorSplit(result, ptr, newActorsMaxCount, NvBlastWrapper.GetScratch((int)scratchSize), NvBlastWrapper.Log, null); if (result.deletedActor != IntPtr.Zero) { ResetPtr(); } return(newActorsCount); }
static extern UInt32 NvBlastActorSplit([In, Out] NvBlastActorSplitEvent result, IntPtr actor, UInt32 newActorsMaxCount, IntPtr scratch, NvBlastWrapper.NvBlastLog logFn, NvBlastTimers timers);