Враги проходят сквозь объекты и сливаются друг с другом unity 2d
При преследовании игрока враги могут как-бы слиться друг с другом(становясь с виду как-бы одним врагом), а также если зайти за стену они продут через нее.
Код:
private void FollowPlayer()
{
var dir = (target.position - transform.position).normalized;
rb.velocity = dir * speed;
if (Vector2.Distance(transform.position, target.transform.position) <= seeDistance && Vector2.Distance(transform.position, target.transform.position) > attackDistance)
{
speed = speed2;
EnemyFlip();
transform.position = Vector2.MoveTowards(transform.position, target.position, speed * Time.deltaTime);
}
else if (Vector2.Distance(transform.position, target.transform.position) <= attackDistance)
{
speed = 0;
}
if (Hp == 0)
{
Die();
}
}
Это не весь код, но публиковать весь сразу тоже не вариант.
Код с движением через rigidbody2d:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class FollowPlayer : MonoBehaviour
{
public Transform target;
private Rigidbody2D rb;
private Vector2 movement;
private int speed = 5;
void Start()
{
rb = this.GetComponent<Rigidbody2D>();
target = GameObject.FindWithTag("Player").GetComponent<Transform>();
}
void Update()
{
Target();
Vector3 direction = target.position - transform.position;
float angle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg;
direction.Normalize();
movement = direction;
}
private void FixedUpdate()
{
MoveChar(movement);
}
private void MoveChar(Vector2 direction)
{
rb.MovePosition((Vector2)transform.position + (direction * speed * Time.deltaTime));
}
private void Target()
{
if (target == null)
{
Start();
}
}
}
Ответы (1 шт):
Автор решения: Korsakov Lev
→ Ссылка
Ответ был найден совершенно случайно, если у кого-то будет такая же проблема, то просто отключите freeze position и включайте в случае крайней необходимости :)