Как мне сделать реализацию отталкивания персонажа в Unity? Не работает функция AddForce()
Хочу сделать реализацию отталкивания персонажа, если он меньше размера врага, но он не отталкивается, хотя в логе пишет, что функция PlayerPush()
вызывается. Не могу разобраться что нужно делать. Менял Body Type на Dynamic - всё тоже самое.
public class PlayerController : MonoBehaviour
{
[SerializeField] private float _speed;
[SerializeField] private int _health = 5;
private GameObject _player;
private Enemy _enemy;
private SpriteRenderer _spriteRenderer;
private Rigidbody2D _rb;
private Vector2 _moveVector;
private float _scaleX = 2f;
private float _scaleY = 2f;
[SerializeField]private float _size = 2f;
void Awake()
{
_player = gameObject;
_rb = GetComponent<Rigidbody2D>();
_spriteRenderer = GetComponent<SpriteRenderer>();
}
void FixedUpdate()
{
Move();
if (IsDead())
{
Debug.Log("погиб");
Destroy(_player);
}
}
private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.gameObject.CompareTag("Enemy"))
{
Debug.Log("триггер");
_enemy = collision.gameObject.GetComponent<Enemy>();
if (_size >= _enemy.size)
{
Destroy(collision.gameObject);
ScalePlayer();
}
else if (_size < _enemy.size)
{
PlayerPush();
_health--;
}
}
}
void Move()
{
_moveVector.x = Input.GetAxis("Horizontal");
_moveVector.y = Input.GetAxis("Vertical");
if (_moveVector.x < 0f)
{
_spriteRenderer.flipX = true;
}
else if (_moveVector.x > 0f)
{
_spriteRenderer.flipX = false;
}
_rb.MovePosition(_rb.position + _moveVector * _speed * Time.fixedDeltaTime);
}
void ScalePlayer()
{
_scaleX += 0.1f;
_scaleY += 0.1f;
transform.localScale = new Vector3(_scaleX, _scaleY);
}
bool IsDead()
{
if (_health <= 0) return true;
return false;
}
void PlayerPush()
{
float force = 1000f;
Vector2 dir = new Vector2(-1, -1);
_rb.AddForce(dir * force, ForceMode2D.Impulse);
Debug.Log("Push");
}
}