统一:人造重力 - 内囊/圆柱体



我在圆柱或胶囊中的假重力挣扎。基本上,我认为我可以使用与球形重力相同的代码,而球形引力不起作用。所以我更改了一些行以获得更好的结果。

    [SerializeField] float gravity = 10;
public void Attract ( Transform target )
{
    Vector3 gravityUp = (target.position - new Vector3(transform.position.x, transform.position.y,target.position.z)).normalized;
    Vector3 bodyDown = -target.up;
    Rigidbody rb = target.GetComponent<Rigidbody>();
    rb.AddForce(gravityUp * gravity);
    Quaternion targetRotation = Quaternion.FromToRotation(bodyDown, gravityUp) * target.rotation;
    targetRotation.x = 0;
    target.rotation = Quaternion.Slerp(target.rotation, targetRotation, 30.0f * Time.deltaTime);
}

第一次尝试可以正常工作。但是玩家(目标)不能旋转Y轴。有人有任何想法吗?

好吧,我尝试了以下内容。

 Quaternion targetRotation = Quaternion.FromToRotation(bodyDown, gravityUp) * target.rotation;
targetRotation.x = 0;
target.rotation = Quaternion.Slerp(target.rotation, targetRotation, 30.0f * Time.deltaTime);

现在我使用正常表面旋转播放器。

if (Physics.Raycast(attractedBody.transform.position + attractedBody.transform.forward, -attractedBody.transform.up, out hit, distance))
    {
        surfaceNorm = hit.normal;
    }

但没有僵化的身体违反了玩家开始旋转而没有任何输入。所以我必须使用:

rb.constraints = RigidbodyConstraints.FreezeRotation;

这有效。

相关内容

  • 没有找到相关文章