private void Start() { MovementManger.SnapToGrid(transform, GameTower, Tower.CharacterLayer); playerLayer = LayerMask.NameToLayer("Player"); if (Direction != MoveDir.NONE) { if (PointA != null && PointB != null) { target = (InverseStart) ? PointB : PointA; approcheRadius = transform.localScale.x / 2; switch (Direction) { case MoveDir.HORIZONTAL: PointA.position = new Vector3(PointA.position.x, transform.position.y, PointA.position.z); PointB.position = new Vector3(PointB.position.x, transform.position.y, PointB.position.z); MovementManger.SnapToGrid(PointA, GameTower, Tower.CharacterLayer); MovementManger.SnapToGrid(PointB, GameTower, Tower.CharacterLayer); break; case MoveDir.VERTICAL: PointA.position = new Vector3(transform.position.x, PointA.position.y, transform.position.z); PointB.position = new Vector3(transform.position.x, PointB.position.y, transform.position.z); MovementManger.SnapToGrid(PointA, GameTower, Tower.CharacterLayer); MovementManger.SnapToGrid(PointB, GameTower, Tower.CharacterLayer); break; case MoveDir.FREE: MovementManger.SnapToGrid(PointA, GameTower, Tower.CharacterLayer); MovementManger.SnapToGrid(PointB, GameTower, Tower.CharacterLayer); break; } } else { Debug.LogError($"Please add the Target Points A & B to the {this.GetType().ToString()}"); } } }
private void SteerToTarget() { var desiredVelocity = target.position - transform.position; var distance = desiredVelocity.magnitude; if (distance < TARGET_DISTANCE) { SwitchTarget(); return; } if (distance < approcheRadius) { desiredVelocity = desiredVelocity.normalized * MovementSpeed * (distance / approcheRadius); } else { desiredVelocity = desiredVelocity.normalized * MovementSpeed; } transform.position += desiredVelocity * Time.fixedDeltaTime; MovementManger.SnapToGrid(transform, GameTower, Tower.CharacterLayer); }
private void FixedUpdate() { MovementManger.SnapToGrid(transform.parent.transform, GameTower, Tower.CharacterLayer); }