Привет, прежде чем я начну, я хочу сообщить всем, что я не только новичок в этом форуме, но и сам Unity и C #, поэтому я прошу прощения, если есть простое решение или другие глупые ошибки.
Хорошо, так что в основном я пытаюсь переключить гравитацию моего игрока, когда он попадает в космос, чтобы добиться этого, я проверяю игроков transform.position.y и проверяю, находится ли он на назначенной высоте, а если нет Я добавляю силу.
Площадь кода:
private void ChangeGravity()
{
if (rb.position.y >= 10f)
{
SAF = false;
rb.constraints = RigidbodyConstraints.FreezePositionY | RigidbodyConstraints.FreezePositionZ;
}
else
{
rb.AddForce(0, VerticalForce * Time.deltaTime, 0);
ChangeGravity();
}
}
Для пояснения SAF - это мера предосторожности, чтобы игрок не мог спамить кнопку пробела.
Также VerticalForce = 2f, и в ходе моего тестирования я определил, что оператор if может быть истинным (этот тест был установлен для значения y равным 10)
Теперь вот ошибка:
StackOverflowException
UnityEngine.Rigidbody.AddForce (Vector3 force, ForceMode mode)
UnityEngine.Rigidbody.AddForce (Single x, Single y, Single z) (at C:/buildslave/unity/build/Runtime/Dynamics/ScriptBindings/Dynamics.bindings.cs:171)
PlayerMovement.ChangeGravity () (at Assets/Scripts/PlayerMovement.cs:21)
PlayerMovement.ChangeGravity () (at Assets/Scripts/PlayerMovement.cs:22)
(The final line repeats a bunch but I cut that out)
Весь сценарий: The Script
EDIT
Я наконец нашел очень полезное руководство, которое я не нашел бы без вас, ребята, о том, как изменить гравитацию объекта, это делает этот вопрос устаревшим, спасибо за ваше время, извините, я не нашел этого до того, как вопрос.