0
votes

I'm following a video tutorial on YouTube about player animation using blend trees. I followed the person's tutorial to the tea and I haven't received any errors in the console, the only problem is, that when I played the game my player is not playing the animations no matter how many times I clicked. I created a click to move script (c#) for my player to move and (as mention) followed the person's tutorial exactly. I checked the animator window (whilst playing the game) and saw that my player Idle state was still playing and not playing the walking state, no matter where I moved. I think it might be because of :

 void Update () 
 {
   if (Input.GetMouseButtonDown(0)) 
   {
     target = Camera.main.ScreenToWorldPoint(Input.mousePosition);
     target.z = transform.position.z;
   }
   transform.position = Vector3.MoveTowards(transform.position, target, speed * Time.deltaTime);
 }

But I'm no genius! What I want is for my player to do exactly what the video tutorial did but using (Input.GetMouseButtonDown(0)). Can anyone help me with my problem! Thank you, here is my full code:

  using UnityEngine;
  using System.Collections;
  public class move : MonoBehaviour 
  {
    private Animator anim;
    public float speed = 15f;
    private Vector3 target;

    void Start () 
    {
       target = transform.position;
       anim = GetComponent<Animator> ();
    }

    void Update () 
    {
      if (Input.GetMouseButtonDown(0)) 
      {
        target = Camera.main.ScreenToWorldPoint(Input.mousePosition);
        target.z = transform.position.z;
      }
      transform.position = Vector3.MoveTowards(transform.position, target, speed * Time.deltaTime);
      float inputX = Input.GetAxis ("Horizontal");
      float inputY = Input.GetAxis ("Vertical");
      anim.SetFloat ("SpeedX", inputX);
      anim.SetFloat ("SpeedY", inputY);
    }
    void FixedUpdate () 
    {
      float LastInputX = Input.GetAxis ("Horizontal");
      float LastInputY = Input.GetAxis ("Vertical");
      if (LastInputX != 0 || LastInputY != 0) {
        anim.SetBool ("walking", true);
        if (LastInputX > 0) {
           anim.SetFloat ("LastMoveX", 1f);
        } else if (LastInputX < 0) {
           anim.SetFloat ("LastMoveX", -1f);
       } else {
           anim.SetBool ("walking", false);
       }
        if (LastInputY > 0) {
          anim.SetFloat ("LastMoveY", 1f);
       } else if (LastInputY < 0) {
           anim.SetFloat ("LastMoveY", -1f);
      } else {
           anim.SetFloat ("LastMoveY", 0f);
       } 
    } else {
       anim.SetBool ("walking", false);
   }
 }  
2

2 Answers

0
votes

From what I can see, you are not setting the animator input variable to anything so you will need to put in your if statement an animator variable editor.

if (Input.GetMouseButtonDown(0)) 
  {
    target = Camera.main.ScreenToWorldPoint(Input.mousePosition);
    target.z = transform.position.z;
  //right here
  }
0
votes

You are still using Input.GetAxis to determine if you are moving and that is not going to work. What you need to do is to move towards the target, and to set the animator float values and walking bool depending on your movement. When you reach target, you should set walking to false.