求大佬帮我看看为什么我的青蛙没有被消灭
unity3d吧
全部回复
仅看楼主
level 1
截图的代码前面是判断青蛙消灭,后面是判断player触碰青蛙受伤。
我打算做个类似超级马里奥的效果,怪物被player跳起来踩到以后就会被消灭,但是为什么我的程序运行起来却没有这个效果,青蛙被player踩到还是存在,但是代码后半段的player的受伤效果能够运行,我之前做的触碰宝石时消失也没问题,但就是这个踩到青蛙消失没有效果。
2022年05月30日 02点05分 1
level 1
我之后为了检验,把代码修改成了下面的,删除了受伤效果和跳跃判定,改成了只要player碰到青蛙就会消灭,结果运行成功
2022年05月30日 02点05分 2
level 1
去掉跳跃的判断和player受伤,把代码改成这样就能触发消灭青蛙,可能是跳跃的问题?
2022年05月30日 03点05分 6
level 1
刚刚看了下animator,我估计是falling触发时间太短的锅
2022年05月30日 03点05分 7
level 6
这没头没尾的,虽然Destroy不是立刻执行但是我觉得肯定是你代码或者unity里面有点低级错误[滑稽]
2022年05月30日 05点05分 8
level 5
鉴于我对面相对象的信仰,代码我不会这样写。我会写一个colideManager, 在player生成的时候把碰撞的方法都委托给colideManager,当碰撞的时候。colideManager根据逻辑来告诉player anim要怎样演,告诉frog是否演示死亡。
这样写,你这种失误完全避免了。
另外,你这用字符串来找anim属性,建议你声明一个常量来找,避免输入错误的问题。
2022年05月30日 07点05分 9
level 7
自己调试一下呗
2022年05月30日 09点05分 11
level 1
我刚刚自学两周,各位大佬的思路我学不来啊[泪]
2022年05月30日 09点05分 12
level 1
我是用fall的bool值来判断消灭青蛙的,但是我发现animator里面fall的bool值只有刚刚下落一瞬间为true,虽然fall的动画会持续到落地,但是bool只有一瞬间是true
2022年05月30日 10点05分 13
level 1
void SwitchAnim()
{
anim. SetBool("idleing", false);
if(rb.velocity.y<0.01f && !coll.IsTouchingLayers(ground))
{
anim.SetBool("falling",false);
}
if(anim. GetBool("jumping"))
{
if(rb. velocity.y < 0)
{
anim. SetBool("jumping",false);
anim. SetBool("falling",true);
}
}
else if(IsHurt)
{
anim.SetBool("hurting",true);
anim.SetFloat("running",0);
if(Mathf.Abs(rb.velocity.x)<0.1f)
{ anim.SetBool("hurting",false);
anim.SetBool("idleing",true);
IsHurt = false;}
}
else if(coll. IsTouchingLayers(ground))
{
anim. SetBool("falling", false);
anim. SetBool("idleing", true);
}
}
2022年05月30日 10点05分 14
level 1
上面这段是跳跃jump,落地fall,受伤hurt的代码,有大佬看看为什么fall的bool值只有一瞬间为true吗,我明明写的是只要y方向的速度小于0就为true
2022年05月30日 10点05分 15
level 13
把速度打印出来呗,而且你这写的也太乱了。。
2022年05月30日 12点05分 16
level 1
没写过编程,代码很乱,但是也不知道乱在什么地方,空格这种很重要吗
2022年05月30日 15点05分 18
level 1
此贴终结,楼主没找到bug,但是换了种方法,用player和frog之间y轴的距离来判断是否消灭,结果成功了[哈哈]好有成就感
2022年05月30日 23点05分 20
1