Reputation: 2697
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.
Button onClick Target:
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
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