我正在努力寻找一种有效的方法,让我的玩家在2D自上而下的世界中跳跃。我可以看到很多关于平台视图的教程,其中相机位于玩家一侧,但没有什么真正适用于像startdew Valley这样的自上而下的视图。
我没有使用物理,所以我使用Couroutine将角色移动到tilemap上,Couroutine会将玩家移动到网格上的下一个位置,这是我的更新和DoMove方法:
private void Update()
{
if (!isMoving)
{
input.x = Input.GetAxisRaw("Horizontal");
input.y = Input.GetAxisRaw("Vertical");
if (input.x != 0)
input.y = 0;
if (input != Vector2.zero)
{
animator.SetFloat("Horizontal", input.x);
animator.SetFloat("Vertical", input.y);
var targetPos = transform.position + new Vector3(input.x, input.y, 0f);
// obstacle detection
Vector3Int obstaclesMapTile = obstacles.WorldToCell(targetPos - new Vector3(0, .5f, 0));
if (obstacles.GetTile(obstaclesMapTile) == null)
{
StartCoroutine(DoMove(targetPos));
}
}
animator.SetFloat("Speed", input.sqrMagnitude);
}
}
private IEnumerator DoMove(Vector3 newPos)
{
isMoving = true;
while ((newPos - transform.position).sqrMagnitude > Mathf.Epsilon)
{
transform.position = Vector3.MoveTowards(transform.position, newPos, moveSpeed * Time.fixedDeltaTime);
yield return null;
}
transform.position = newPos;
isMoving = false;
}
有谁能给我一个如何添加跳跃功能的提示吗?(最好有动画支持?(我有点没主意了。
提前谢谢。
只将其视为动画。由于它是2D自上而下的,所以它看起来更像是在跳跃,然后如果它在跳跃动画中必须跳过某个东西,请测试一下。例如如果正在播放过洞和跳跃动画,则允许在整个范围内移动,否则会摔倒。因此,如果玩家按下跳跃按钮,动画就会播放,并且应该有一些变量存储玩家当前所在的动画。