Other
Im having trouble clamping enemies to the game area, can anyone help?
My game has enemies coming down a platform with barriers on both sides. But they use evasive maneuvers and sometimes go beyond the barrier. I have added a box colliders on the barriers and on the enemy which are set to trigger to kill enemies - a 2nd box collider can be added but due to the rigidbody attached this causes them to go spinning off when they come in contact with each other or the barriers.
Here is the youtube video I've made so you get an idea what the game is like: https://www.youtube.com/playlist?list=PLyWpXjiYnxF3kLBe89_FbQ4rgmxHDGAVV
all tutorials so far have been for 2D games has anyone got suggestions how i can clamp them to the platform area or make the enemies move without a rigidbody attached?
this is the evasive maneuver script
public class EvasiveManeuver : MonoBehaviour {
public float dodge;
public float smoothing;
public Vector2 startWait;
public Vector2 maneuverTime;
public Vector2 maneuverWait;
public Boundary boundary;
private float targetManeuver;
private Rigidbody rb;
private float currentSpeed;
void Start()
{
rb = GetComponent<Rigidbody>();
currentSpeed = rb.velocity.z;
StartCoroutine(Evade());
}
IEnumerator Evade()
{
yield return new WaitForSeconds(Random.Range(startWait.x, startWait.y));
while (true)
{
targetManeuver = Random.Range(1, dodge) * -Mathf.Sign(transform.position.x); //does the opposite, done to keep the enemy inside the screen and not hug the edge
yield return new WaitForSeconds(Random.Range(maneuverTime.x, maneuverTime.y));
targetManeuver = 0; //set it back to zero
yield return new WaitForSeconds(Random.Range(maneuverTime.x, maneuverTime.y)); //startWait for a period of time
}
}
void FixedUpdate()
{
float newManeuver = Mathf.MoveTowards(rb.velocity.x, targetManeuver, Time.deltaTime * smoothing);
rb.velocity = new Vector3(newManeuver, 0.0f, currentSpeed);
rb.position = new Vector3
(
Mathf.Clamp(rb.position.x, boundary.xMin, boundary.xMax),
0.0f,
Mathf.Clamp(rb.position.z, boundary.zMin, boundary.zMax)
);
}
}
This is the enemy movement script
public class Mover : MonoBehaviour
{
public float speed;
public Rigidbody rb;
void Start()
{
rb.velocity = transform.forward * speed;
}
}
Follow this Question
Related Questions
2D Rigidbody Object Moving Partially Into Barriers 0 Answers
Space Shooter Tutorial, Player Movement and Boundaries 0 Answers
Everything that moves need an Rigid Body? 1 Answer
Realistic Soccer Ball Dribbling? 1 Answer
Movement is inconsistent 0 Answers