How to immediately CHANGE SPEED from spotted position to another?)
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;
}
}
}
Answer by reigota · Mar 13, 2017 at 02:02 AM
You should not handle rigidbody velocity on Update. It should be in FixedUdate. And anim could be in Update. Ah, and use your rb2d instead call getcomponent every frame..
Your answer
Follow this Question
Related Questions
2D Spine Animation not playing 0 Answers
Player should turn in the direction the player is running. (2D Game) 0 Answers
How can i stop my shooting animation after playing? 0 Answers
HELP,Watched tutorial https://www.youtube.com/watch?v=Xnyb2f6Qqzg 1 Answer
How can I make a 4 direction animation for an enemy? 1 Answer