求助!!Unity游戏开发-实现八轴方向的攻击

在做项目练习时想实现一个八轴方向的攻击功能,用方向键arrow来控制。

这就需要通过两两组合来实现斜方向的攻击,但经过简单尝试发现通过以下代码

if (Input.GetKeyDown(KeyCode.LeftArrow)&&Input.GetKeyDown(KeyCode.UpArrow))
        {

            //攻击代码
          
            
        }

因为getkeydown这种检测可能很难确保同时按下,由于这个函数在Update中调用所以与进程无关。

因此把代码改为

if(Input.GetKey(KeyCode.LeftArrow))
{
  if(Input.GetKey(KeyCode.UpArrow))
  {
      //组合键代码
  } 
  //单独方向键代码
}

这样又会导致每一帧都会把单个方向和组合方向的代码都执行。

于是最终修改的代码是这样的

void arrowattack()
    {
       
        if (Input.GetKeyDown(KeyCode.LeftArrow))
        {

            LeftArrowp = true;
            arrowcode++;
            
        }
        if(Input.GetKeyUp(KeyCode.LeftArrow))
        {

            LeftArrowp = false;
            arrowcode--;
        }

        if (Input.GetKeyDown(KeyCode.UpArrow))
        {
            UpArrowp = true;
            arrowcode++;
            
        }
        if (Input.GetKeyUp(KeyCode.UpArrow))
        {  
            arrowcode--;
            UpArrowp = false;
            
        }

        if (Input.GetKeyDown(KeyCode.RightArrow))
        {
            RightArrowp = true;
            arrowcode++;
            
        }
        if (Input.GetKeyUp(KeyCode.RightArrow))
        {
            arrowcode--;
            RightArrowp = false;
            
        }

        if (Input.GetKeyDown(KeyCode.DownArrow))
        {
            DownArrowp = true;
            arrowcode++;
            
        }
        if (Input.GetKeyUp(KeyCode.DownArrow))
        {
            arrowcode--;
            DownArrowp = false;
           
        }

    }
    void shootout()
    {
        //if(Input.anyKeyDown)
            
        { 
            switch(arrowcode)
            {
                case 0:
                case 1:
                    if (LeftArrowp)
                    {
                        attackpositioncode = 0;
                    }
                    if(UpArrowp)
                    {
                        attackpositioncode = 2;
                    }    
                    if(RightArrowp)
                    {
                        attackpositioncode = 4;
                    }
                    if(DownArrowp)
                    {
                        attackpositioncode = 6;
                    }
                 break;
                case 2:
                    if (LeftArrowp && UpArrowp)
                    {
                        attackpositioncode = 1;
                    }
                    if (RightArrowp && UpArrowp)
                    {
                        attackpositioncode = 3;
                    }
                    if (RightArrowp && DownArrowp)
                    {
                        attackpositioncode = 5;
                    }
                    if (LeftArrowp && DownArrowp)
                    {
                        attackpositioncode = 7;
                    }
                 break;
                
            }                      
        }
    }
    void shoot()
    {
        if(canshoot&& arrowcode!=0&& arrowcode<3)
        {
            attack();
            Invoke("restcanshoot", 0.5f);
        }
    }
    void restcanshoot()
    {
        canshoot = true;
    }

最终虽然达到了想要的效果,但看来这样的代码似乎非常笨拙影响性能。

大佬们,有没有更好的方法?我完全搜索不到相应的资料。orz   :(

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值