Unity游戏设计与实现学习记录19/11/3

又是图书馆的一个下午,今天做了好多无用功,但还是记录一下

今天实现了Player撞到Oni时反弹并播放MISS动画

我最初想法是,在Player上挂一个BoxCollider,OnTriggerEnter触发状态枚举,但是问题出现了:
Unity游戏设计与实现学习记录19/11/3
在Player下有用来进行攻击判定的子对象AttackCollider,上面也有一个用来判定攻击的触发器(球体碰撞体),Oni会先碰到攻击触发器,直接**OnTriggerEnter,触发MISS状态。

于是聪明的我立刻想到一个办法:只有攻击时才SetActive**子对象AttackCollider。但聪明的我没想到,这样做在不攻击时确实可以避免Oni先撞到球体碰撞器,但Player攻击时Oni一定是在球体内的,还是会触发MISS状态,于是此条作废。

接下来我想到另一个方法,在Oni触发碰撞器时,访问触发器的母对象,再判断是Player还是AttackCollider,
传参到Player的触发条件,Player触发MISS状态的条件是:
other.tag=="Oni" && other.gameObject.GetComponent<OniControl>().isPlayer //碰到的对象是Oni且oni碰到的对象是Player
但这条迟迟不奏效,我翻来覆去地想不到为啥,
在瞎鼓捣半天后,我发现,两个触发器是在同一帧被触发的,PlayerControl在调取参数时,调取的是上一帧中的数据,即false。
于是我把PlayerControl脚本下的OntriggerEnter改为OnTriggerStay,成功的可以触发了

然后又遇到了一个问题

Player在碰到Oni后会不停触发MISS,因为没有将参数值改回false,在下一帧将参数值改为false,就成功了。。。。。。

只有这么点

今天下午误打误撞在图书馆关门之前实现了这个功能,但是关掉unity重新打开之后就有不好使了,回寝室调了半天将代码调的一团糟,连昨天的功能都不能实现了,之后代码归档到昨天,从头花了一个小时就搞出来了。。。。。。