Question by
ScottUnityNoob · Apr 10, 2017 at 07:53 PM ·
animatortriggeranimator controllerbooleantranslate
How do I start/stop the movement of transform.Translate() if a certain animation is playing in the animator?
Hi, I'm hoping somebody can help! I've spent countless hours trying to do such a simple task. All I'm trying to do is move my enemy character with transform.Translate(), but ONLY when the "Walk" animation is active/playing in the Animator.
Here's my Script:
private Transform player;
public Animator anim;
public Transform head;
public Slider enemyHealthBar;
public bool shouldMove = false;
void Start ()
{
anim = GetComponent<Animator>();
player = GameObject.FindWithTag("Player").GetComponent<Transform>();
}
void Update ()
{
if(shouldMove == false)
{
this.transform.Translate(0f,0f,0f);
}
else
{
this.transform.Translate(0,0,0.035f);
}
//************Check Animation and Pause Movement for all except "Walk"**************//
if(this.anim.GetCurrentAnimatorStateInfo(0).IsName("Idle1"))
{
shouldMove = false;
}
if(this.anim.GetCurrentAnimatorStateInfo(0).IsName("Attack"))
{
shouldMove = false;
}
if(this.anim.GetCurrentAnimatorStateInfo(0).IsName("Magic Attack"))
{
shouldMove = false;
}
if(this.anim.GetCurrentAnimatorStateInfo(0).IsName("Magic Attack2"))
{
shouldMove = false;
}
if(this.anim.GetCurrentAnimatorStateInfo(0).IsName("Magic Attack3"))
{
shouldMove = false;
}
if(this.anim.GetCurrentAnimatorStateInfo(0).IsName("Walk"))
{
shouldMove = true; //I ONLY WANT TO transform.Translate() if this animation is playing.
}
if (enemyHealthBar.value <= 0)
{
return;
}
Vector3 direction = player.position - this.transform.position;
direction.y = 0;
float angle = Vector3.Angle(direction, head.up);
if(Vector3.Distance(player.position, this.transform.position) < 10 && angle < 100 )
{
this.transform.rotation = Quaternion.Slerp(this.transform.rotation,
Quaternion.LookRotation(direction), 0.1f);
anim.SetBool("NecIsIdle",false);
if(direction.magnitude > 2.7f && Time.timeScale == 1)
{
anim.SetBool("NecIsWalking",true);
anim.SetBool("NecIsAttacking",false);
}
else
{
anim.SetBool("NecIsAttacking",true);
anim.SetBool("NecIsWalking",false);
}
}
else
{
anim.SetBool("NecIsIdle", true);
anim.SetBool("NecIsWalking", false);
anim.SetBool("NecIsAttacking", false);
}
}
void OnTriggerEnter(Collider other)
{
if(other.tag == "FireBall")
{
anim.SetTrigger("NecMA2");
}
}
Obviously, I'm new to scripting! Any help would be greatly appreciated, thanks!
Comment
Your answer
Follow this Question
Related Questions
How to implement gun animations 0 Answers
How can I use "animator.SetTrigger()" if "animator.SetBool()" has been true for X amount of seconds? 0 Answers
Playing animation without hold the button 1 Answer
Trigger Parameters not working inside Animator Trigger action 0 Answers
Problems with using the same Animator Controller on multiple objects. 0 Answers