Home > Software engineering >  How to add the animations in my script in unity "C#"?
How to add the animations in my script in unity "C#"?

Time:09-13

I'm new to C#, I'm making a game to learn. Can anyone help me, I found some scripts on the web for my player. I tried to make animations for it and I used the "Bool", but sometimes when the player starts to walk it doesn't get animated. What can I do? I added the flip to flip the player left and right. And I added the "If" with the SetBool for the transition from "Idle" to "IsWalking". Screenshot of my animator

My player has 4 scripts. The other 3 are in the following link: [Link] (https://drive.google.com/drive/folders/1F_zbQJgihv82zjg5pcQ9L_dp0sgA2O2Q?usp=sharing)

using UnityEngine;
using System.Collections;

[RequireComponent (typeof (Player))]
public class PlayerInput : MonoBehaviour {

    private Animator anim;

    private bool m_FacingRight = true;

    void Start () {
        player = GetComponent<Player> ();
        anim = GetComponent<Animator>();
    }

    void Update () {
        Vector2 directionalInput = new Vector2 (Input.GetAxisRaw ("Horizontal"), Input.GetAxisRaw ("Vertical"));
        player.SetDirectionalInput (directionalInput);


        if (Input.GetAxisRaw("Horizontal") > 0 && !m_FacingRight)
        {
            
            Flip();
            anim.SetBool("IsWalking", true);
            
        } 
        
        if (Input.GetAxisRaw("Horizontal") < 0 && m_FacingRight)
        {   
            Flip();
            anim.SetBool("IsWalking", true);
        }

        if (Input.GetAxisRaw("Horizontal") == 0 && !m_FacingRight)
        {
            anim.SetBool("IsWalking", false);
        }
        
        if (Input.GetAxisRaw("Horizontal") == 0 && m_FacingRight)
        {
            anim.SetBool("IsWalking", false);
        }

        if (Input.GetKeyDown (KeyCode.Space)) {
            player.OnJumpInputDown ();
            anim.SetBool("IsJumping", true);
            
        }
        if (Input.GetKeyUp (KeyCode.Space)) {
            player.OnJumpInputUp ();
            anim.SetBool("IsJumping", false);
        }
    }

    private void Flip()
    {
        // Switch the way the player is labelled as facing.
        m_FacingRight = !m_FacingRight;

        // Multiply the player's x local scale by -1.
        Vector3 theScale = transform.localScale;
        theScale.x *= -1;
        transform.localScale = theScale;
    }
}}

CodePudding user response:

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

public class PlayerInput : MonoBehaviour
{

        private Animator anim;    
        private bool _right ;
        private bool _left ;
        public float MoveSpeed;

        void Start()
        {            
            anim = GetComponent<Animator>();
            player = GetComponent<Player> ();
        }

        void Update()
        {
            Vector2 directionalInput = new Vector2(Input.GetAxisRaw("Horizontal")*Time.deltaTime, Input.GetAxisRaw("Vertical") * Time.deltaTime);
       player.SetDirectionalInput (directionalInput);


            if (Input.GetAxisRaw("Horizontal") > 0)
            {
        
            TurnRight();
            anim.SetBool("IsWalking", true);

            }
            if (Input.GetAxisRaw("Horizontal") < 0)
            {
           
            TurnLeft();
            anim.SetBool("IsWalking", true);
            }

            if (Input.GetAxisRaw("Horizontal") == 0)
            {
                anim.SetBool("IsWalking", false);
            }
            if (Input.GetKeyDown (KeyCode.Space)) {
            player.OnJumpInputDown ();
            anim.SetBool("IsJumping", true);
        
            }
            if (Input.GetKeyUp (KeyCode.Space)) {
            player.OnJumpInputUp ();
            anim.SetBool("IsJumping", false);
            }
        }

    public void TurnRight()
    {
        if (_right) return;
        transform.localScale = new Vector3(Mathf.Abs(transform.localScale.x), transform.localScale.y, 0);
        _right = true;
        _left = false;
    }
    public void TurnLeft()
    {
        if (_left) return;
        transform.localScale = new Vector3(-transform.localScale.x, transform.localScale.y, 0);
        _left = true;
        _right = false;
    }
   
    }

there is some problems in your script. For Example Once I start moving right, m_FacingRight will be true, and then I stop moving. Still, m_FacingRight is true. Since m_FacingRight is still true, if I start moving to the right again, the animation of walk will not play. Because you have used

  if (Input.GetAxisRaw("Horizontal") > 0 && !m_FacingRight)

Same for the left side

  • Related