如何将物体吸引到圆柱体的表面,而不吸引到质心?

时间:2018-08-12 22:35:23

标签: c# unity3d

我已经通过将下面的“重力吸引器”脚本附加到球体对象,并将“重力体”脚本附加到我的玩家来实现了人造重力。对于像球一样围绕球体表面移动,将玩家吸引到中心的效果很好。

但是,我现在想在圆柱体而不是球体上实现相同的效果,以便玩家可以根据需要在圆柱体周围和长边上下移动。现在,人造重力正在将玩家拉向圆柱体的中心,因为那是刚体的中心。

我该如何更改,以使玩家只是被拉到圆柱体的内部,而不是内部的中心?

public class GravityAttractor : MonoBehaviour {

    public float gravity = -10;

    public void Attract(Transform body){
        Vector3 gravityUp = (body.position - transform.position).normalized;
        Vector3 bodyUp = body.up;

        body.GetComponent<Rigidbody>().AddForce(gravityUp * gravity);
        Quaternion targetRotation = Quaternion.FromToRotation(bodyUp, gravityUp) * body.rotation;
        body.rotation = Quaternion.Slerp(body.rotation, targetRotation, 50 * Time.deltaTime);
    }

    }

    public class GravityBody : MonoBehaviour {

    public GravityAttractor attractor;
    private Transform myTransform;

    void Start () {
        Rigidbody body = GetComponent<Rigidbody>();
        body.freezeRotation = true;
        body.useGravity = false;
        myTransform = transform;
    }

    void Update () {
        attractor.Attract(myTransform);
    }
}

1 个答案:

答案 0 :(得分:1)

我解决了我的问题,方法是在圆柱体内创建一个吸引玩家的球体,然后与玩家一起上下移动球体。

相关问题