在Unity2d如何简单地使用GetAxis方法来使角色只能上下左右移动,禁止斜着走

在制作二维角色运动时,通常使用GetAxis方法来获取键盘输入,在Update使用如下代码来控制移动:

public class Object: MonoBehaviour
{
     public int speed=3;

        void Update()
        {
             public int speed=3;
             float h = Input.GetAxis("Horizontal");
             float v = Input.GetAxis("Vertical");

   
       
             Vector2 move = new Vector2(h, v);

       

             Vector2 position = transform.position;
        
             position = position + move * speed * Time.fixedDeltaTime;

             transform.position = position;
        

         }
}

但是有的时候我们需要人物只能上下左右四个方向移动,同时按猪两个按键,比如左上,上述代码回导致角色斜着移动。这里提供一种高效的思路。

public class Object: MonoBehaviour
{
   public int speed=3;
   private bool oldv;

   void Update()
   {
        public int speed=3;
        float h = Input.GetAxis("Horizontal");
        float v = Input.GetAxis("Vertical");

   
       
        Vector2 move = new Vector2(h, v);

        if (Mathf.Abs(h)> Mathf.Abs(v))
        {
            v=0;
            oldv = false;

        }
        else if (Mathf.Abs(h) < Mathf.Abs(v))
        {
            h=0;
            oldv = true;
        }
        else if (oldv)
        {
            h = 0;
        }
        else
        {
            v = 0;
        }

        Vector2 position = transform.position;
        
        position = position + move * speed * Time.fixedDeltaTime;

        transform.position = position;
        

   }
}

代码的思路是这样的:我们需要一个代码来判断同时按住的情况下,那个键是先按下——换言之,那个键按下的持续时间长。我们利用GetAxis的机制,按下键不放,输出的值会随着Update反复调用从0逐渐增加到1。再增加到1前,先按下的键获取到输出值会始终大于后按下键。于是我们只需要额外对等于1的情况做个判断即可,文章用bool oldv来记录1之前过去的判断

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值