Игрок на вершине кувшинки
Игрок может тянуть кувшинки и, когда они подходят близко, прыгать на них. Кувшинка привязана к одной точке с помощью целевого сустава, поэтому, когда игрок перестает ее тянуть, она возвращается в исходную точку. Игрок может свободно перемещаться внутри текущей кувшинки.
Код: Выделить всё
// LilyPad.cs
public class LilyPad : MonoBehaviour {
private Vector2 _targetPosition;
private Rigidbody2D _rb;
[SerializeField] private float speed;
[SerializeField] private float pullForce = 10f;
private bool _pull;
private Vector2 _seed;
private void Start() {
_rb = GetComponent();
_targetPosition = transform.position;
}
public void Pull(Vector2 target) {
_pull = true;
_targetPosition = target;
_force.relativeForce = Vector2.zero;
}
public void Leave() {
_pull = false;
}
private void FixedUpdate() {
if (_pull) {
var direction = (_targetPosition - (Vector2) transform.position).normalized;
_rb.AddForce(direction * pullForce);
}
}
}
Код: Выделить всё
// Jump.cs (on the player)
public class Jump : MonoBehaviour {
private LilyPad _currentPad;
private float startDistance, distance;
[SerializeField] private float maxJumpDistance = 4f;
private Transform root;
private Vector2 prevPosition;
private Rigidbody2D _rb;
private void Start() {
_rb = GetComponent();
_pc = GetComponent
();
PlayerController.systemActions.SkillsMap.skill2.started += HandleSkill;
}
private void HandleSkill(InputAction.CallbackContext callbackContext) {
if (!Selectable.selected) return;
if (Vector2.Distance(transform.position, _currentPad.transform.position)
Подробнее здесь: [url]https://stackoverflow.com/questions/78684871/unity-2d-top-down-movement-using-rigidbodies[/url]