【发布时间】:2023-02-07 03:48:17
【问题描述】:
我一直在研究一个 2d 自上而下的 rpg 游戏,我添加了行走动画等,我想阻止玩家在撞墙时做行走动画,目前我有一个带有射线投射的盒子对撞机,射线投射最初在向下行走时撞到播放器盒碰撞器,但在使用图层蒙版后它已经停止,但是在左右行走时完美地工作时出现两个我似乎无法解决的问题。首先,当向上或向下走到位于碰撞层上的瓦片地图时(这个瓦片地图有瓦片地图碰撞器,它会阻止玩家穿过它们)动画仍然播放,其次,玩家只会碰撞一次而不是碰撞时重复两个瓷砖背靠背放置时的瓷砖地图,这是我的碰撞代码,用于碰撞的瓷砖在第 6 层。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerScript : MonoBehaviour
{
public float moveSpeed;
private Animator ani;
private bool isMoving;
private Vector2 lastMove;
private Rigidbody2D body;
private Vector2 movement;
private LayerMask wallLayer = 1 << 6;
// Start is called before the first frame update
void Start()
{
body = GetComponent<Rigidbody2D>();
ani = GetComponent<Animator>();
movement = Vector2.zero;
isMoving = false;
}
// Update is called once per frame
void Update() {
isMoving = false;
movement = new Vector2(Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical"));
RaycastHit2D ray = Physics2D.Raycast(body.position, movement, 0.6f, wallLayer);
if((movement.x != 0f || movement.y != 0f) && !(ray && ray.collider.tag == "wall")) {
isMoving = true;
lastMove = movement;
}
ani.SetFloat("MoveX", movement.x);
ani.SetFloat("MoveY", movement.y);
ani.SetFloat("LastX", lastMove.x);
ani.SetFloat("LastY", lastMove.y);
ani.SetBool("IsMoving", isMoving);
}
void FixedUpdate() {
body.MovePosition(body.position + movement * moveSpeed * Time.deltaTime);
}
}
【问题讨论】: