我已经通过将下面的“重力吸引器”脚本附加到球体对象,并将“重力体”脚本附加到我的玩家来实现了人造重力。对于像球一样围绕球体表面移动,将玩家吸引到中心的效果很好。
但是,我现在想在圆柱体而不是球体上实现相同的效果,以便玩家可以根据需要在圆柱体周围和长边上下移动。现在,人造重力正在将玩家拉向圆柱体的中心,因为那是刚体的中心。
我该如何更改,以使玩家只是被拉到圆柱体的内部,而不是内部的中心?
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);
}
}
答案 0 :(得分:1)
我解决了我的问题,方法是在圆柱体内创建一个吸引玩家的球体,然后与玩家一起上下移动球体。