Home › Forums › GAMES104 现代游戏引擎:从入门到实践 › 上下楼梯相关的问题 Tagged: 作业三 楼梯 This topic has 1 reply, 1 voice, and was last updated 2 years, 3 months ago by Diandy. Viewing 1 reply thread Author Posts 2022年9月8日 at 上午5:41 #12781 Score: 0 DiandyParticipant 在做作业3的时候想到要不要给小人加个上下楼梯的功能,大概思路是在move()中使用sweep检测输入的水平移动是否会发生碰撞。假如发生了碰撞就用hits.hit_position.z获取发生碰撞的高度,计算其与小人的高度差。假如该高度差是可跨越的,那么便调整最终位置final_position的xyz坐标。 但是这之中遇到了一个问题上下楼梯时,因为高度发生了变化,下一次调用move()时会处于空中状态m_is_touch_ground=false,进而让人物跳跃状态,最终导致上下楼过程中不停触发跳跃动画。所以想问一下大家有什么好的想法能让上下楼的动画能够是正常走路呢? 2022年9月8日 at 上午7:01 #12782 Score: 0 DiandyParticipant 看了一下,落地检测时是先给人物的z坐标加1.0,之后再探测-z方向1.005单位长度以内有没有发生碰撞。不知道为啥会加1.0,但大概明白就是假如人物-z方向0.005以内未发生碰撞,则人物处于未落地状态,跳跃状态变为falling,从而触发跳跃动画。 目前我的想法是,通过检测上楼时碰撞的法向量方向是否水平,从而将落地检测所检查的高度增加,让脚下即使悬空出一定高度,也不会被判断为未落地状态。但是当下楼时,问题又来了:因为让上下楼梯时的落地检查的高度增加了,所以下楼梯时z坐标不会减小导致人物悬空,除非悬空超过了一个台阶的高度从而使人物变为未落地状态而触发重力下降。但重力是由跳跃状态决定的,所以如果在不修改其他部分的情况下使用重力改变下楼梯时的z坐标,那势必也会触发跳跃动画。 所以我想的是:利用上下楼梯时落地检测的碰撞法向量,与人物移动方向做点积,假如为负,则为下楼梯,假如为正,则为上楼梯。如果是下楼梯的话,就让final_position的z坐标减去一定值,从而让小人下楼梯的同时也能够下降高度。 Author Posts Viewing 1 reply thread You must be logged in to reply to this topic. Log In Username: Password: Keep me signed in Log In