private void OnDestroy() { NativeQuadTreePathFinding.ClearAll(); if (_quadTree.IsCreated) { _quadTree.Dispose(); } }
void Update() { if (_quadTree.IsCreated == false) { return; } NodeCount = _quadTree.Length; if (_startPos != null && _lastStartPos != _startPos.gameObject.transform.position) { _lastStartPos = _startPos.gameObject.transform.position; _player.transform.position = _lastStartPos; var date = DateTime.UtcNow; path = NativeQuadTreePathFinding.RunAStar(_quadTree, new float2(_lastStartPos.x, _lastStartPos.z), new float2(_lastEndPos.x, _lastEndPos.z), Allocator.Persistent); UnityEngine.Debug.Log((DateTime.UtcNow - date).TotalSeconds); } if (_endPos != null && _lastEndPos != _endPos.gameObject.transform.position) { _lastEndPos = _endPos.gameObject.transform.position; _player.transform.position = _lastStartPos; path = NativeQuadTreePathFinding.RunAStar(_quadTree, new float2(_lastStartPos.x, _lastStartPos.z), new float2(_lastEndPos.x, _lastEndPos.z), Allocator.Persistent); } if (path.IsCreated && path.Count > 0) { var pos = path.Peek(); var v = new float2(pos.x - _player.transform.position.x, pos.y - _player.transform.position.z); if (math.lengthsq(v) < 0.5f) { path.Dequeue(); } else { v = math.normalizesafe(v); _player.transform.position = new Vector3(_player.transform.position.x + v.x * 0.5f, 0, _player.transform.position.z + v.y * 0.5f); } } }