Hei вот как я получил его на работу.
Сначала здесь базовый шаг сценария:
public class Move : MonoBehaviour {
public Rigidbody2D rig;
public float speed = 0.2f;
public float maxSpeed = 5f;
void FixedUpdate()
{
Vector2 vel = new Vector2 (Input.GetAxis("Horizontal") /5f, Input.GetAxis("Vertical")/5f);
vel.Normalize();
if (vel.sqrMagnitude > 0f && rig.velocity.sqrMagnitude < maxSpeed) {
rig.AddForce (vel * speed, ForceMode2D.Impulse);
} else {
rig.velocity = Vector2.zero;
}
}
}
А потом сценарий подпрыгивание:
public class CollideCtrl : MonoBehaviour
{
public float speed = 500f;
void OnCollisionEnter2D (Collision2D col) {
if(col.gameObject.CompareTag("Player")){
Debug.Log("Col");
Rigidbody2D rig = col.gameObject.GetComponent<Rigidbody2D>();
if(rig == null) { return;}
Vector2 velocity = rig.velocity;
rig.AddForce(-velocity * speed);
}
}
}
Теперь нужно настроить эти значения. Эффект работает, но не идеально по моему вкусу. Я приглашаю кого-нибудь улучшить этот ответ с их предложением или собственным ответом, потому что это быстрый способ, но не идеальный. Это может дать вам некоторое преимущество.
Игроку нужен тег игрока, Rigidbody2D без гравитации и двумерный столкновение. Коробка для столкновения требует, чтобы BoxCollider2D и isTrigger были ложными. Если вам это нужно как триггер, измените имя и параметр метода столкновения.
Можете ли вы использовать OnCollisionEnter2D? –
Да, я так думаю –