游戏中在判断一个角色操控的条件为什么使用|=来作为判断呢?

前些天研究了一下在Unity中移动的内容。
游戏中的操纵通常是拥有一个刚体的,所以让它移动的方式我个人觉得给刚体施加力更好一点。
在写跳跃逻辑的时候发现了这么一种写法,感觉挺有意思的。

desiredJump |= Input.GetButtonDown("Jump");

这个是在Update里面实时判断按键的。通常update是检测和控制较好,移动的话放在FixedUpdate里面,这样比较好,我之前的写法是

desiredJump = Input.GetButtonDown("Jump");

乍一看是不是没有什么区别?但是因为Update的执行次数受到电脑性能影响,FixedUpdate通常是固定的0.02s一次,所以会产生一个插值,比如一秒内Update执行了一千次那么这个desiredJump=true的时候只有一次,然后立刻变成false了,如果它为true的时候会调用跳跃的方法,但是fixedUpdate和Update之间有插值一秒一千次和一秒一百次,会出现执行十次Updata才去执行一次FixedUpdate,这样第一次Update里面变成了true第二次变成了false,所以FixedUpdate并没有检测到可以跳跃的条件!
这就导致操作不能实时检测到;
曾经的解决办法是

if(input.getmousebuttondown(space))
jump=true;
if(input.getmousebuttonup(space))
jump=false

这样的方式固然能解决这个问题,但是有点繁琐。
所以使用|=的这个判断更加好用!
|=是当两边条件都是假的时候,才是假!和或运算一样
有1就为1全0才是0!

void Update(){
desiredJump |= Input.GetButtonDown("Jump");
}
void FixedUpdate()
{
  if (desiredJump)
        {
            desiredJump = false;
            Jump();
        }
 }

这样在第一次进入跳跃判断的时候,如果为真但是没有进入方法也不用担心!因为只有进入了方法执行了desiredJump = false;才能变成false;
因为a|=b的时候,如果a是true,那么无论b是true还是false,最后的结果都是true!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值