【发布时间】:2022-07-25 13:04:22
【问题描述】:
我想做什么
在使用 FauxGravity 时,我正在尝试在整个球体上进行跳跃,而不仅仅是在顶部。
目前的运作方式
我的角色在顶部时可以正确跳跃,但在球体底部时不会发生跳跃。FauxGravityAttractor
[SerializeField] private float gravity = -9.81f;
public void Attract(Rigidbody body) {
Vector3 gravityUp = (body.position - transform.position).normalized;
Vector3 localUp = body.transform.up;
// Apply downwards gravity to body
body.AddForce(gravityUp * gravity);
// Align bodies up axis with the centre of planet
body.rotation = Quaternion.FromToRotation(localUp,gravityUp) * body.rotation;
}
FauxGravityBody
FauxGravityAttractor planet;
new Rigidbody rigidbody;
void Awake()
{
planet = GameObject.FindGameObjectWithTag("Planet").GetComponent<FauxGravityAttractor>();
rigidbody = GetComponent<Rigidbody>();
// Disable rigidbody gravity and rotation as this is simulated in GravityAttractor script
rigidbody.useGravity = false;
rigidbody.constraints = RigidbodyConstraints.FreezeRotation;
}
void FixedUpdate()
{
// Allow this body to be influenced by planet's gravity
planet.Attract(rigidbody);
}
样本跳跃
void Jump()
{
if(Input.GetKeyDown(KeyCode.Space) && isOnGround)
{
rb.AddForce(Vector3.up * jumpForce, ForceMode.Impulse);
isOnGround = false;
}
}
private void OnCollisionEnter(Collision collision)
{
if(collision.gameObject.CompareTag("Planet"))
{
isOnGround = true;
}
}
【问题讨论】:
-
你不会找到球体中间的方向并在另一个方向上加力吗?
-
@BugFinder 感谢您的回复。我曾尝试这样做,但似乎根本没有正确地做到这一点……如果您有这样的例子,将不胜感激。这是我使用 Unity 的第二周,所以事情还是有点复杂。
-
@BugFinder 一段时间后,我设法解决了我的这个问题。非常感谢您的帮助
标签: unity3d