004_MyMOBA_PawnFeignDeathPhysics

---------------2015.8.10---------2015.8.12-------李明阳--------------------

 

FeignDeath转Standing的高度问题:

Translation和RadiusHeitht:

Cylinder和Mesh的Translation默认情况下Z值是一致的,改变其中一个都会错位;Mesh经过Scale后经常需要调它们(Mesh)的位置。

默认情况下碰撞组件Translation不设,如果把它的Z值变大,角色就沉下去了。CylinderRadiusHeight的高低一旦改变,Mesh.Traslation需要相应调整。


调试追踪Position:角色倒地后,Mesh的Loc和Actor的Loc都会往上面调高,引擎这样设置,应该是为了让角色重新从上面落下来。但是我不想要这样的效果。在这个碰撞转换的时候,SetLocation也不起作用,想改变CylinderComponet的位置,没找到相关代码(这个好像不让改,SetPhysics它会掉下来的,改这个也没必要)。

当角色重新站起来的时候把它们Z方向上的值调低,角色从上面落下来的效果就不会很明显。

Actor组件基本上都是常量,无法直接附值,一般通过内置函数修改。

SetCollisionSize(10.0, 1);

Mesh.SetTranslation(vect(0.0,0.0,-3));

虽然效果不是很明显了,但是Cylinder的高度太低了。

尝试通过同样的代码方式先把它们调低然后再调回原来的值,效果不行,等于没调,角色还是会从上面落下来;如果通过控制时间来改回Z的值,当角色已经在地上站好后,碰撞组件突然加高,Cylinder是不会冒上来的,角色就从地面上掉下去。

 

最终的方案:

最后还是去找UTPawn.UC,有这样一句代码:

        // If its positive, move back down by that amount until ithits the floor

        if(UnFeignZAdjust > 0.0)

        {

            moveSmooth(vect(0,0,-1) * UnFeignZAdjust);

        }

 

在Actor中有SetLocation和SetRotation用得较多,查看Actor.uc时发现有个同级函数Move,这个用得比较少。在这里UTPawn.uc的MoveSmooth解决了这个问题(Mesh.SetRBPosition也可以不需要了):和UTPawn类似在设置碰撞前调用moveSmooth(vect(0,0,-1) * 56);这个56是调试过程中Pawn倒下和站起来之后Location的高度差。

 

 

角色自动滑倒:

角色物理状态转换一切OK后,通过Pawn::Tick追踪角色所站位置的斜度,当达到一定斜度时调用PlayFeignDeath()。

BaseSockt

附加内容:(扩展)

PhysicsAssetInstance坐标:(UTPawn.uc)

        CamStart = Mesh.GetPosition();

        if(Mesh.PhysicsAssetInstance != None)

        {

            RootBodyInst = Mesh.PhysicsAssetInstance.Bodies[Mesh.PhysicsAssetInstance.RootBodyIndex];

            if(RootBodyInst.IsValidBodyInstance())

            {

                RootBodyTM = RootBodyInst.GetUnrealWorldTM();

                CamStart.X = RootBodyTM.WPlane.X;

                CamStart.Y = RootBodyTM.WPlane.Y;

                CamStart.Z = RootBodyTM.WPlane.Z;

            }

        }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值