【问题标题】:Can't flip sprite using Mobile Input无法使用移动输入翻转精灵
【发布时间】:2021-06-10 18:24:50
【问题描述】:

我目前正在将我的原始项目从 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;
    }
}

【问题讨论】:

    标签: c# unity3d animation mobile sprite


    【解决方案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();
        }
    }
    

    【讨论】:

    • 天哪,谢谢老兄!我完全忘记了 moveAmount.x 哎呀现在完美工作:)
    • 很高兴我能帮上忙!考虑accepting我的回答!
    • 我做了老兄:) 我也有一个问题要问你,所以基本上我想在左边的输入上移动并在任何屏幕点拍摄,拍摄工作但当我移动时我也射击,你能帮我解决这个问题吗?比如在你移动的时候禁用射击之类的
    • 谢谢! if (moveInput == Vector2.zero &amp;&amp; /* whatever shoot input expression you already have*/) { /* shoot */ } 之类的东西?
    • 啊,不,我无法解释,你有不和谐或什么,所以我可以给你截图我的意思?当我握住屏幕左侧时,我的操纵杆输入控制器可以正常移动,但它也一直在我的手指位置拍摄,我希望它在检测到第二个手指按下时拍摄,例如在屏幕的另一侧。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      在代码中,您只需将 true/false 分配给 SpriteRenderer.flipX 和 .flipY。 乔斯特劳特的回答

      【讨论】:

      • 问题是,我的角色是由不同的身体部位组成的,它不是一个带有spriterenderer的游戏对象,所以这个方法不起作用。
      猜你喜欢
      • 2017-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多