如果游戏中只包含左右移动而不包含上下移动,则这段代码会完美适配(但是我需要的是上下左右哇!)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Player : MonoBehaviour
{
public float moveSpeed = 5f;
public Joystick joystick; // 摇杆引用
private Animator animator; // 添加对 Animator 的引用
bool faceRight = false; //初始朝向为左
void Start()
{
animator = GetComponent<Animator>();
}
void Update()
{
float h = joystick.Horizontal();
float v = joystick.Vertical();
// 创建基于世界坐标系的移动矢量
Vector3 moveVector = new Vector3(h, v, 0f);
// 使用 transform.right 来保证移动方向与角色朝向一致
transform.Translate(moveVector.x * transform.right * moveSpeed * Time.deltaTime);
// 更新 Animator 的 Speed 参数,根据玩家移动速度的大小
animator.SetFloat("Speed", Mathf.Abs(h)); // 通常,速度应当是一个绝对值
// 根据摇杆的水平方向翻转角色
if (h > 0 && !faceRight)
{
Flip();
}
else if (h < 0 && faceRight)
{
Flip();
}
}
void Flip()
{
// 反转角色的朝向
faceRight = !faceRight;
// 反转角色的旋转角度
transform.rotation = Quaternion.Euler(0f, !faceRight ? 0f : 180f, 0f);
}
}