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);
}
}
我通过在圆柱体内创建一个吸引玩家的球体,然后随玩家上下移动球体来解决问题