Dan*_*ria 1 c# unity-game-engine 2d-games
我想问一下Unity 2D有没有办法禁用对角线移动。问题是,当我同时按下“W”+“D”(移动键)时,角色开始沿对角线移动。因此,当组合按下按钮时,我希望角色完全笔直移动,而不是当我按下“d”或任何其他键来移动时,即使我仍然同时按下另一个按钮,角色也会对角线移动。也就是说,优先考虑我最后按下的按钮的功能。
这是一个简短的视频来进一步解释我的问题。
这是我的角色移动的代码。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class keycontrol : MonoBehaviour
{
public float moveSpeed = 0f;
public Rigidbody2D rb2d;
Vector2 movement;
public Animator animator;
// Update is called once per frame
void Update()
{
movement.x = Input.GetAxisRaw("Horizontal");
movement.y = Input.GetAxisRaw("Vertical");
animator.SetFloat("walk_right", movement.x);
animator.SetFloat("walk_left", -movement.x);
animator.SetFloat("walk_down", -movement.y);
animator.SetFloat("walk_up", movement.y);
}
void FixedUpdate()
{
rb2d.MovePosition(rb2d.position + movement * moveSpeed * Time.fixedDeltaTime);
if(Input.GetKey("left shift"))
{
moveSpeed = 200 * Time.deltaTime;
animator.speed = 1.5f;
}
else
{
moveSpeed = 110 * Time.deltaTime;
animator.speed = 1f;
}
}
}
Run Code Online (Sandbox Code Playgroud)
执行此操作的一种简单方法是将一个轴优先于另一个轴,并将另一个检查包装在一个条件中。
movement.x = Input.GetAxisRaw("Horizontal");
if (movement.x != 0)
{
movement.y = Input.GetAxisRaw("Vertical");
}
Run Code Online (Sandbox Code Playgroud)
但是,这可能会失败,因为根据您的输入,使用控制器时轴可能返回接近零的值。在这种情况下,您可以只获取两个值并检查较大的值。
movement.x = Input.GetAxisRaw("Horizontal");
movement.y = Input.GetAxisRaw("Vertical");
if (Mathf.Abs(movement.x) > Mathf.Abs(movement.y))
{
movement.y = 0;
}
else
{
movement.x = 0;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3379 次 |
| 最近记录: |