C# 如何将对象吸引到圆柱体';是曲面,但不是质心?

C# 如何将对象吸引到圆柱体';是曲面,但不是质心?,c#,unity3d,C#,Unity3d,我通过将下面的重力吸引器脚本附加到球体对象,将重力体脚本附加到我的播放器,实现了人造重力。这适用于在球体表面周围移动,就像它是一颗行星一样,将玩家吸引到中心 但是我现在想在圆柱体上实现相同的效果,而不是在球体上,这样玩家就可以在圆柱体周围移动,并在长边上下移动。现在,人造重力将玩家拉向圆柱体的中心,因为那是刚体的中心 我怎样才能改变这一点,让玩家被拉到圆柱体的内部,而不是内部的中心 public class GravityAttractor : MonoBehaviour { publ

我通过将下面的重力吸引器脚本附加到球体对象,将重力体脚本附加到我的播放器,实现了人造重力。这适用于在球体表面周围移动,就像它是一颗行星一样,将玩家吸引到中心

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

我怎样才能改变这一点,让玩家被拉到圆柱体的内部,而不是内部的中心

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);
    }
}
公共类:单一行为{
公众浮标重力=-10;
公共空间吸引(变换体){
Vector3 gravityUp=(body.position-transform.position).标准化;
Vector3 bodyUp=body.up;
body.GetComponent().AddForce(重力值*重力);
四元数目标=四元数。从旋转(bodyUp,gravityUp)*body.rotation;
body.rotation=Quaternion.Slerp(body.rotation,targetRotation,50*Time.deltaTime);
}
}
公共类重力体:单行为{
公共引力吸引子;
私有变换;
无效开始(){
刚体体=GetComponent();
body.freeze旋转=真;
body.useGravity=false;
myTransform=转换;
}
无效更新(){
吸引(myTransform);
}
}

我通过在圆柱体内创建一个吸引玩家的球体,然后随玩家上下移动球体来解决问题