Search code examples
c#unity-game-engine2d-games

How to change default attack direction for player?


I coded my player in my platform game so that he would attack with a sword when you press space. It attacks right when I run right. It attacks left when I run left. But when I stand still by default it attacks left. How do I make it attack right instead?

Below is all the code in my player controller script, and also an image of my blend tree.

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


public class PlayerController : MonoBehaviour
{
    public int moveSpeed;

    private Animator anim;

    public int playerJumpPower = 1250;
    private float moveX;
    public bool isGrounded;
    public float fJumpWaitTime = 0.2f;
    private float fJumpWait;
    private object col;
    private bool attacking;
    public float attackTime;
    private float attackTimeCounter;

    // Start is called before the first frame update
    void Start()
    {
        anim = GetComponent<Animator>();
    }

    // Update is called once per frame
    void Update()
    {
        if (!attacking)
        {
            if (Input.GetButtonDown("Jump"))
            {
                Jump();
            }
            if (Input.GetAxisRaw("Horizontal") > 0.5f || Input.GetAxisRaw("Horizontal") < -0.5f)
            {
                transform.Translate(new Vector3(Input.GetAxisRaw("Horizontal") * moveSpeed * Time.deltaTime, 0f, 0f));
            }
            void Jump()
            {
                //Jumping Code
                GetComponent<Rigidbody2D>().AddForce(Vector2.up * playerJumpPower);
                isGrounded = false;
            }
            void OnCollisionEnter2D(Collision2D col)
            {
                Debug.Log("Player has collided with " + col.collider.name);
                if (col.gameObject.tag == "ground")
                {
                    isGrounded = true;
                }
            }
        }
        
        anim.SetFloat("MoveX", Input.GetAxisRaw("Horizontal"));

        if (Input.GetKeyDown(KeyCode.Space))
        {
            attackTimeCounter = attackTime;
            attacking = true;   
            anim.SetBool("Attack", true);    
        }
if(attackTimeCounter > 0)
        {
            attackTimeCounter -= Time.deltaTime;
        }

if(attackTimeCounter <= 0)
        {
            attacking = false;
            anim.SetBool("Attack", false);
        }
    }
}

enter image description here


Solution

  • After having another look at your Blend Tree, I would check if your Threst is the problem.

    What you have right now:

    PlayerAttackLeft 0 -1

    PlayerAttackRight 1 1

    What you should probably have:

    PlayerAttackLeft -0.01 -1

    PlayerAttackRight 0 1

    Image of what I mean