Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using UnityEngine;
- using System.Collections;
- public class AsteroidController : MonoBehaviour {
- private Transform player;
- private Rigidbody rigidBody;
- private const int speed = 500;
- public float distanceFromPlayer;
- public float distanceFromTarget;
- private bool reachedTarget = false;
- public int trackingAccuracy = 10;
- public float movementSpeed;
- [HideInInspector]
- private Vector3 targetedPosition;
- // Use this for initialization
- void Start () {
- player = GameObject.FindGameObjectWithTag("Player").GetComponent<Transform>();
- rigidBody = GetComponent<Rigidbody>();
- CalculateTargetLocation();
- }
- // Update is called once per frame
- void Update ()
- {
- distanceFromPlayer = Mathf.Abs(Vector3.Distance(player.position, transform.position));
- if (distanceFromPlayer > AsteroidSpawner.maxDistance)
- {
- CalculateTargetLocation();
- reachedTarget = false;
- }
- distanceFromTarget = Mathf.Abs(Vector3.Distance(targetedPosition, transform.position));
- if (distanceFromTarget < 5f)
- {
- reachedTarget = true;
- }
- rigidBody.velocity = Vector3.ClampMagnitude(rigidBody.velocity, speed);
- }
- void FixedUpdate () {
- if (!reachedTarget)
- {
- Vector3 directionalForce = targetedPosition * speed;
- rigidBody.AddForce(directionalForce);
- }
- }
- void CalculateTargetLocation()
- {
- // calculate a random position around the player
- float angle = Random.Range(0.0f, Mathf.PI * 2);
- Vector3 circle = new Vector3(Mathf.Sin(angle), 0, Mathf.Cos(angle));
- circle *= trackingAccuracy;
- circle += player.position;
- targetedPosition = circle;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement