Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using UnityEngine;
- using Unity.Collections;
- using Unity.Jobs;
- using UnityEngine.Jobs;
- using Unity.Mathematics;
- public class BURST2 : MonoBehaviour {
- public struct MoveJob : IJobParallelForTransform {
- [ReadOnly] public NativeArray<float3> positions;
- public float deltaTime;
- [SerializeField] public float3 playerPosition; // cant provide playerpos, no matter how tried
- public void Execute(int index, TransformAccess transform) {
- var pos = new float3(transform.position.x,transform.position.y,transform.position.z);
- var direction = playerPosition - pos;
- direction = math.normalize(direction);
- pos += direction * positions[index] * deltaTime;
- transform.position = pos;
- }
- }
- private TransformAccessArray m_AccessArray;
- private NativeArray<float3> m_Positions;
- private JobHandle m_MoveJobHandle;
- private float3 m_PlayerPosition;
- private void Awake() {
- m_AccessArray = new TransformAccessArray(0);
- m_Positions = new NativeArray<float3>(0, Allocator.Persistent);
- }
- private void OnDestroy() {
- m_AccessArray.Dispose();
- m_Positions.Dispose();
- }
- public void RegisterEnemy(Transform enemyTransform) {
- m_AccessArray.capacity += 1;
- m_AccessArray.Add(enemyTransform);
- var newPositions = new NativeArray<float3>(m_AccessArray.length, Allocator.Persistent);
- NativeArray<float3>.Copy(m_Positions, newPositions, m_AccessArray.length - 1);
- m_Positions.Dispose();
- m_Positions = newPositions;
- }
- public void SetPlayerPosition(float3 position) {
- m_PlayerPosition = position;
- }
- private void Update() {
- if (m_AccessArray.length > 0) {
- // init job
- var moveJob = new MoveJob() {
- deltaTime = Time.deltaTime,
- positions = m_Positions,
- playerPosition = m_PlayerPosition
- };
- // run job
- m_MoveJobHandle = moveJob.Schedule(m_AccessArray);
- // wait for completion
- m_MoveJobHandle.Complete();
- // Debug.Log the position of the first enemy unit
- Debug.Log(m_AccessArray[0].position);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement