本周主要进行测试与修改。
一、合并两个控制角色类,之前由于三个模式分别是三个人做,为了避免版本控制上的冲突就把控制的主视角pawn分开来做,结果由于两个类的父类不一样,继承自spectator的类无法像正常类一样直接从资源栏拖入关卡成为对象,只能通过playerstart来生成,而继承自pawn类可以直接生成,导致在关卡转换后视角会变化,体验起来很不好,所以得把两个类合为一个类。合并的方法就是复制一个类的所有组件、变量、事件、函数到另一个类中,组件、变量不能直接复制(或者我不知道复制的方法)只能再重新创建一遍,命名必须与原来一致(如果想改最好等到函数与事件复制完成后再改),组件变量完全创建好了再复制事件、函数,然后编译,编译没问题如果想改名字就可以直接改,因为编译后改名字其调用处也会跟着自动改,否则就必须一个一个再改一遍了,很耽误事。
二、将invisibleTeacher继承自teacher,之前没有规划好,觉得这两个类相似度不多,就分开写了,但是现在开始改动起来发现两个分开改实在太麻烦了,所以就把invisibleTeacher的父类设为teacher了,但是teacher类中有些又是invisible中用不到,最好的办法应该是让他们继承自同一个类,但是现在改起来又太麻烦了,暂时先放下。
三、经过测试实时学习模式中如果主视角的位置也移动的话有时候会离动作人物非常近,于是想看看能布恩那个直接禁用vive的position tracking,但是不管是在UE还是Google都找不到直接禁用的函数,那么就只能用个trick,每一帧都把主视角设定在同一位置,但是UE中VR模式下的人物控制与非VR模式下有很大不同,比如我把floatingPawnMovement的maxspeed设为0,那么在非VR模式下就无法移动,但是在VR模式下还是可以移动,包括方向也是一样。因此就必须针对VR进行设置。
看到网上的一些办法,试了试都没什么用,最后找到了一个蓝图节点:reset VR orieration and Position,options选为position,这样VR模式下位置就会固定在position中了。
四、将一部分函数、事件以及变量移到gamemode类中,这样能方便调用,不管是在普通blueprint类还是widget类中都能直接调用,结构上也更简单,不然太多的函数分散在不同类中,修改时不容易找到函数属于哪个类。