无法使用移动输入翻转精灵
Can't flip sprite using Mobile Input
我目前正在将我的原始项目从 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
在代码中,您只需将 true/false 分配给 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();
}
}
我目前正在将我的原始项目从 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
在代码中,您只需将 true/false 分配给 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();
}
}