questionasker
questionasker

Reputation: 2697

Unity3D - How to Remove Delay in Button Click to Animation

i am making a simple game that need fast response. so in GUI, there will be some buttons. if i press button X then do Animation X, then if i press button Y then do Animation Y. Currently, i just create one button to test.

But There's a problem. Whenever i click button X, there's a delay around 1-2 seconds until animation play.

Animator Scheme: enter image description here

Button onClick Target:

enter image description here

TalkingButtonScript.cs :

 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 using UnityEngine.UI;

 public class TalkingButtonScript : MonoBehaviour {

     public Button Text;
     public AudioClip sound;
     public Animator ani;
     public Canvas yourcanvas;
     Animator myAnimator;
     public PlayerAnimatorControllerScript cas;

     void Start () 
     {
         Text = Text.GetComponent<Button> ();
         ani.enabled = true;
         yourcanvas.enabled = true;
     }

     public void Press() 
     {
         PlayerAnimatorControllerScript.instance.talking_btn_clicked = true;
     }
 }

PlayerAnimatorControllerScript.cs :

 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;

 public class PlayerAnimatorControllerScript : MonoBehaviour {

     public static PlayerAnimatorControllerScript instance;
     public float speed = 10.0f;
     public float jumpSpeed = 8.0f;
     public float gravity = 20.0f;
     private float total =0.0f;
     private Vector3 moveDirection = Vector3.zero;
     CharacterController controller;
     public Animator myAnimator;
     float currSpeed, Param1;
     bool Param2, Param3;
     public bool talking_btn_clicked = false;

     // Use this for initialization
     void Start () {
         instance = this;
         controller = GetComponent<CharacterController> ();
         myAnimator = GetComponent<Animator> ();
         //myAnimator.SetBool ("TalkingStatus", true);
     }

     public void talkingActive()
     {
         Debug.Log ("set talking button = active");
         talking_btn_clicked = true;
     }

     // Update is called once per frame
     void Update ()
     {
         Param1 = 0;
         Param2 = false;
         Param3 = false;
         if (controller.isGrounded) {

             if (talking_btn_clicked == true) {
                 myAnimator.SetBool ("TalkingStatus", true);
             }

             currSpeed = speed;
             if (Input.GetKey (KeyCode.LeftShift)) {
                 Debug.Log ("ShiftLeft Pressed");
                 Param2 = true;
                 currSpeed = speed / 2;
             }

             if (Input.GetKey (KeyCode.LeftControl)) {
                 Param3 = true;
             }


             Param1 = Mathf.Abs (Input.GetAxis ("Vertical"));
             transform.Rotate (0, Input.GetAxis ("Horizontal"), 0);
             myAnimator.SetFloat ("Speed", Param1);
             myAnimator.SetBool ("Shift", Param2);
             myAnimator.SetBool ("Attack", Param3);
             moveDirection = new Vector3 (0, 0, Input.GetAxis ("Vertical"));
             moveDirection = transform.TransformDirection (moveDirection);
             moveDirection *= currSpeed;

             if (Input.GetButton ("Jump")) {
                 moveDirection.y = jumpSpeed;
                 Param1 = 0.2f;
             }


         }//==controller.isGrounded        
         if (!myAnimator.IsInTransition(0)) {
             //Debug.Log("Animation is in Transition");
             total = gravity * Time.deltaTime;
             moveDirection.y -= gravity * Time.deltaTime;
             controller.Move (moveDirection * Time.deltaTime);
             //Debug.Log("total = "+total);
         }
     }//==update
 }//==class

Any Idea ?

Thanks in advance

Upvotes: 1

Views: 2699

Answers (1)

Nika Kasradze
Nika Kasradze

Reputation: 3019

This happens not because of your code. It's the transitions you need to fix (the white arrows between the animation states in Animator window). Select the one you need to trigger with TalkingStatus, in inspector uncheck Has Exit Time. Has Exit Time is waiting for your animation to finish before transition.

Upvotes: 5

Related Questions