C# 在攻击时停止移动
所以我创建了一个2d平台,所以问题是,我希望玩家在攻击时停止移动我知道这是一个简单的问题我想不出来,我尝试布尔运算,但它不起作用,或者我真的不知道如何使用它 代码如下:C# 在攻击时停止移动,c#,unity3d,C#,Unity3d,所以我创建了一个2d平台,所以问题是,我希望玩家在攻击时停止移动我知道这是一个简单的问题我想不出来,我尝试布尔运算,但它不起作用,或者我真的不知道如何使用它 代码如下: bool canMove=true; bool canAttack; void Update() { float pos = Input. GetAxis("Horizontal"); if(canMove && Vector2 != 0) { rb
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
?你的攻击到底是什么样子的?如何等待攻击“完成”?谢谢,如果有效,我会尝试,如果有效,我会更新