I’m creating 2d game where is the enemy moving with usual speed 2,5 and switching to speed 4 when spotted a character
What I need to change in my script to switching between 2 speed type immediately, not smooth.
Please try to help to solve this.
using UnityEngine;
using System.Collections;
public class EnemyPatrol : MonoBehaviour {
public float moveSpeed;
public bool moveRight;
public Transform sightStart, sightEnd;
public bool spotted = false;
public GameObject arrow;
public LayerMask detectionLayers;
public Transform wallCheck;
public float wallCheckRadius;
public LayerMask whatIsWall;
private bool hittingWall;
public Transform edgeCheck;
public float edgeCheckRadius;
private bool notAtEdge;
public float timer = 3f; //Чтобы изменить время остановки нужно изменить кроме этого значения еще значение ниже, того же timer
Animator anim;
private Rigidbody2D rb2d;
void Start () {
rb2d = gameObject.GetComponent<Rigidbody2D>();
anim = GetComponent<Animator>();
}
void FixedUpdate () {
anim.SetFloat ("Speed", Mathf.Abs(rb2d.velocity.x));
}
void Update () {
Raycasting ();
Behaviours ();
hittingWall = Physics2D.OverlapCircle (wallCheck.position, wallCheckRadius, whatIsWall);
notAtEdge = Physics2D.OverlapCircle (edgeCheck.position, edgeCheckRadius, whatIsWall);
if (hittingWall || !notAtEdge) {
if (timer > 0) {
timer -= Time.deltaTime;
return;
}
moveRight = !moveRight;
timer = 3f;
}
if (moveRight)
{
transform.localScale = new Vector3 (0.75f, 0.75f, 1f);
GetComponent<Rigidbody2D>().velocity = new Vector2(moveSpeed, rb2d.velocity.y);
} else {
transform.localScale = new Vector3 (-0.75f, 0.75f, 1f);
GetComponent<Rigidbody2D>().velocity = new Vector2(-moveSpeed, rb2d.velocity.y);
}
}
void Raycasting()
{
Debug.DrawLine (sightStart.position, sightEnd.position, Color.green);
spotted = Physics2D.Linecast (sightStart.position, sightEnd.position, detectionLayers);
}
void Behaviours()
{
if (spotted == true) {
arrow.SetActive (true);
moveSpeed = 4;
} else {
arrow.SetActive (false);
moveSpeed = 2.5;
}
}
}