UE 限制PlayerController 旋转时,Pitch俯仰角一直在地面往上

非常适合比如SpringArm跟随PlayerController旋转,做限制。

。原理就是 当Pitch < 0时,就 让它只能往上加。其余时候都是可以加,可以减。

但其实UE里Control的Rotation里Pitch > 0》实验出来,Pitch是在(270,360),360水平.超过360 就是 0。超过0就是 向下。

为什么要让它有时为0,因为有时AddControllerPitchInput()要往下过头,影响效果。做的一个偏正处理。

    if (GetControlRotation().Pitch > 350  )
    {
        //GetController()->SetControlRotation(FRotator(0.19999, GetControlRotation().Yaw, GetControlRotation().Roll));
        m_onlyup = true;
    }
    else if(GetControlRotation().Pitch < 100)
    {
        m_onlyup = true; 
        GetController()->SetControlRotation(FRotator(0, GetControlRotation().Yaw, GetControlRotation().Roll));
    }
    else
    {
        m_onlyup = false;
    }
    if (m_onlyup)
    {
        if(y > 0)
            AddControllerPitchInput(y);
    }
    else
    {
        AddControllerPitchInput(y);
    }

但是,有一种情况不行。就是,当你的坐标系不是UE。而是Cesium那种,需要变换的GloberAnchor那种。PlayerController不会因为 GloberAnchor 发射映射。它仍然以 UE 自身坐标系为准。

根据偏航角、俯仰角、翻滚角计算重力补偿力的公式如下: 1. 将加速度计测得的三轴加速度值$Acc_x$、$Acc_y$、$Acc_z$转换到机体坐标系中,即: $Acc_x^{body} = Acc_x^{earth}cos(pitch)sin(roll) + Acc_y^{earth}(cos(yaw)sin(pitch)sin(roll) - sin(yaw)cos(roll)) + Acc_z^{earth}(sin(yaw)sin(pitch)sin(roll) + cos(yaw)cos(roll))$ $Acc_y^{body} = Acc_x^{earth}cos(pitch)cos(roll) + Acc_y^{earth}(cos(yaw)sin(pitch)cos(roll) + sin(yaw)sin(roll)) + Acc_z^{earth}(sin(yaw)sin(pitch)cos(roll) - cos(yaw)sin(roll))$ $Acc_z^{body} = -Acc_x^{earth}sin(pitch) + Acc_y^{earth}cos(pitch)sin(yaw) + Acc_z^{earth}cos(pitch)cos(yaw)$ 其中,$Acc_x^{earth}$、$Acc_y^{earth}$、$Acc_z^{earth}$分别为加速度计测得的三轴加速度值在地球坐标系中的分量,$pitch$、$roll$、$yaw$分别为俯仰角、翻滚角、偏航角。 2. 根据机体坐标系中的加速度值$Acc_x^{body}$、$Acc_y^{body}$、$Acc_z^{body}$计算重力补偿力,即: $F_{comp,x} = m(Acc_x^{body}-g*sin(pitch))$ $F_{comp,y} = m(Acc_y^{body}-g*cos(pitch)*sin(roll))$ $F_{comp,z} = m(Acc_z^{body}-g*cos(pitch)*cos(roll))$ 其中,$m$为物体的质量,$g$为重力加速度,$F_{comp,x}$、$F_{comp,y}$、$F_{comp,z}$分别为机体坐标系中的重力补偿力在$x$、$y$、$z$三个方向上的分量。这个公式假设了传感器坐标系与地球坐标系的$z$轴方向重合,如果坐标系之间存在旋转,则需要通过yaw、pitch和roll进行转换,才能得到正确的重力补偿力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值