无法使用移动输入翻转精灵

问题描述

我目前正在将我的原始项目从 PC 版本移植到移动设备,每当我使用移动设备输入向左移动时,我都需要帮助翻转精灵,而当我向右移动时,我需要帮助翻转精灵。请帮忙,我疯了,我确定这很容易,但我错过了一些东西。我找不到放置 Flip() 函数的地方

我现在使用移动输入进行移动的代码

using System.Collections.Generic;
using UnityEngine;

public class PlayerMovement : MonoBehavIoUr
{
    public float speed;
    private Rigidbody2D myRB;

    private Vector2 moveAmount;
    private Animator myAnim;
    private bool facingRight = true;

    public Joystick joystick;


    private void Start()
    {
        myAnim = GetComponent<Animator>();
        myRB = GetComponent<Rigidbody2D>();
    }


    private void Update()
    {
        Vector2 moveInput = new Vector2(joystick.Horizontal,joystick.Vertical);
        moveAmount = moveInput.normalized * speed;

        if (moveInput != Vector2.zero)
        {
            myAnim.SetBool("isRunning",true);
        }
        else 
        {
            myAnim.SetBool("isRunning",false);
        }
    }

    private void FixedUpdate()
    {
        myRB.MovePosition(myRB.position + moveAmount * Time.fixedDeltaTime);
    }

    void Flip()
    {
        facingRight = !facingRight;
        Vector3 Scaler = transform.localScale;
        Scaler.x *= -1;
        transform.localScale = Scaler;
    }
}

解决方法

我将向您推荐一个似乎足以解决您问题的答案:

https://answers.unity.com/questions/952558/how-to-flip-sprite-horizontally-in-unity-2d.html

在代码中,您只需将真/假分配给 SpriteRenderer.flipX 和 .flipY。 JoeStrout 的回答

,

我认为在更新中调用 Flip() 并传递水平值应该可以工作,因为它的范围从 -1 到 1。

,

不知道您的 Flip 方法是否会如您所愿,但逻辑上,如果水平方向与面向不匹配,您只需调用 Flip

private void Update()
{
    Vector2 moveInput = new Vector2(joystick.Horizontal,joystick.Vertical);
    moveAmount = moveInput.normalized * speed;

    if (moveInput != Vector2.zero)
    {
        myAnim.SetBool("isRunning",true);
    }
    else 
    {
        myAnim.SetBool("isRunning",false);
    }

    if ( (facingRight && moveAmount.x < 0) 
      || (!facingRight && moveAmount.x > 0))
    {
        Flip();
    }
}