Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在攻击时停止移动_C#_Unity3d - Fatal编程技术网

C# 在攻击时停止移动

C# 在攻击时停止移动,c#,unity3d,C#,Unity3d,所以我创建了一个2d平台,所以问题是,我希望玩家在攻击时停止移动我知道这是一个简单的问题我想不出来,我尝试布尔运算,但它不起作用,或者我真的不知道如何使用它 代码如下: bool canMove=true; bool canAttack; void Update() { float pos = Input. GetAxis("Horizontal"); if(canMove && Vector2 != 0) { rb

所以我创建了一个2d平台,所以问题是,我希望玩家在攻击时停止移动我知道这是一个简单的问题我想不出来,我尝试布尔运算,但它不起作用,或者我真的不知道如何使用它 代码如下:

bool canMove=true;
bool canAttack;

void Update()
{
    float pos = Input. GetAxis("Horizontal");

    if(canMove && Vector2 != 0)
    {
        rb.velocity = new Vector2(pos*walkspeed, 0);
        canAttack =false;
    }
    else
    {
        canAttack = true;
    } 

    if(canAttack)
    {
        if(Input.GetKeyDown(KeyCode.T))
        {
            Attack();
    rb.velocity = Vector2. zero;
            canMove = false;
        } 
        else
        {
            canMove = true;
        } 
    }
}

似乎我无法输入整个代码

一般来说,我宁愿使用
枚举
状态,而不是多个排他
布尔
字段:

private enum State
{
    Idle,
    Moving,
    Attacking
}

[SerializeField] private State _state = State.Idle;

void Update()
{
    float x;

    switch(_state)
    {
        case State.Idle:
           // While you are Idle you can do both
           // either start moving or attacking

           x = Input.GetAxis("Horizontal");

           rb.velocity = new Vector2(x * walkspeed, 0);

           if(!Mathf.Approximately(x, 0f))
           {
               _state = State.Moving;
           }
           else
           {
               if(Input.GetKeyDown(KeyCode.T))
               {
                   _state = State.Attacking;
                   Attack();
               }
           }
           break;

        case State.Moving:
           // while already moving you can only either continue moving or stop
           // and go back to idle

           x = Input.GetAxis("Horizontal");

           rb.velocity = new Vector2(x * walkspeed, 0);

           if(Mathf.Approximately(x, 0f))
           {
               _state = State.Idle;
           }
           break;

        case State.Attacking:
           // While you are attacking you can only wait until attack is finished
           // and go back to idle

           rb.velocity = Vector2. zero;

           // TODO: Since I don't know what Attack() does exactly
           // TODO: Somehow wait Until Attack is finished and then set back
           //_state = State.Idle;
           break;
    }
}

我修复了您的缩进和一些打字错误,如
可以攻击
可以移动
。。。。但是什么是
Vector2!=0
应该这样做吗?嗯,我认为这是为了确保播放器没有正常移动,我认为这甚至不会编译;)你是说
pos!=0
?你的攻击到底是什么样子的?如何等待攻击“完成”?谢谢,如果有效,我会尝试,如果有效,我会更新