- Home /
How to have a object move in a direction then change by random number
I am having trouble to figure out how to get my enemy to move in a direction for how ever long then go over the if statement and pick a new choice (direction) here is my code so far.
using UnityEngine;
using System.Collections;
public class EnemyController : MonoBehaviour {
public float moveSpeed;
public float jumpHeight;
public float groundCheckDistance = 1f;
public LayerMask groundCheckMask;
private int randomNumber;
public float movementTime;
private float movementTimer;
private bool go = true;
void Start () {
movementTimer = Time.time - movementTime;
InvokeRepeating ("RandomNumberGen", 2.0f, 2.0f);
}
int RandomNumberGen()
{
randomNumber = Random.Range(1,4);
return randomNumber;
}
void randomMovement()
{
if (RandomNumberGen () == 1 && movementTimer < movementTime) {
movementTimer = Time.time - movementTime;
GetComponent<Rigidbody2D> ().velocity = new Vector2 (GetComponent<Rigidbody2D> ().velocity.x, jumpHeight);
} else if (RandomNumberGen () == 2 && movementTimer < movementTime) {
movementTimer = Time.time - movementTime;
GetComponent<Rigidbody2D> ().velocity = new Vector2 (moveSpeed, GetComponent<Rigidbody2D> ().velocity.y);
} else if (RandomNumberGen () == 3 && movementTimer < movementTime) {
movementTimer = Time.time - movementTime;
GetComponent<Rigidbody2D> ().velocity = new Vector2 (-moveSpeed, GetComponent<Rigidbody2D> ().velocity.y);
} else if (RandomNumberGen () == 4 && movementTimer < movementTime) {
movementTimer = Time.time - movementTime;
RaycastHit2D hitInfo = Physics2D.Raycast (transform.position, -Vector2.up, groundCheckDistance, groundCheckMask);
if (hitInfo.transform) {
if (hitInfo.transform.CompareTag ("Cloud Platform")) {
GetComponent<Collider2D> ().isTrigger = true;
GetComponent<Rigidbody2D> ().velocity = new Vector2 (GetComponent<Rigidbody2D> ().velocity.x, -jumpHeight);
}
}
}
//yield return new WaitForSeconds(2);
}
// Update is called once per frame
void FixedUpdate () {
RandomNumberGen ();
randomMovement();
}
}
Answer by LordDarkon76 · Jan 15, 2016 at 07:44 PM
First of all Create a variables for the reference of the collider and rigidbody avoid getcomponent in the update.
in randomMovement use randomNumber instead ofrandomNumberGen also a switch is better than the if else structure.
The timer must be decreased outside of the if. Also avoid the new in the update to give less work to the garbage collector.
void FixedUpdate()
{
movementTimer -= Time.time;
if(movementTimer < 0)
{
movementTimer = movementTime;
RandomNumberGen();
}
velocity = rigidbody.velocity;
switch(randomNumber)
{
case 1:
velocity.y = jumpHeight;
break;
case 2:
velocity.y = -jumpHeight;
break;
case 3:
velocity.x = moveSpeed;
break;
case 4:
velocity.x = -moveSpeed;
break;
}
rigidbody.velocity = velocity;
}
Your answer
Follow this Question
Related Questions
Random Enemy enabled in given area after random time 2 Answers
30 Objects all firing at exactly the same time and not randomly 1 Answer
Image for a quarter of a second 1 Answer
Wait Random Amount of Seconds? 3 Answers
Trying to manage an Animation. AnimationState.time doesn't adjust the animation 1 Answer