У меня проблема с моей 2D-игрой в единстве (стиль покемона), я использую transform.position
для перемещения игровых объектов.Избегайте перетаскивания между жестким корпусом
У меня есть игрок и враги, которые следуют за ним, все в порядке. Но когда враги совершают столкновение, они начинают толкать друг друга
Мне нужно, чтобы никто не толкнул, когда враги и игрок столкнулись с столкновением.
- Я попытался использовать кинематику у врагов, но игрок может их протолкнуть.
- Я попытался добавить большое количество массы игроку, но он может подтолкнуть врагов.
- Я попытался обнаружить столкновение в коде с
OnCollision
, но когда я отменяю движение врага, они не возвращаются, чтобы двигаться.
---- UPDATE ----
мне нужно столкновение, но не выдвигая между ними, вот видео, чтобы проиллюстрировать эту проблему https://www.youtube.com/watch?v=VkgnV1NOxlw
Просто для записи, я» m, используя скрипт A * pathfinding (http://arongranberg.com/astar/), здесь мои враги перемещают скрипт.
void FixedUpdate() {
if(path == null)
return;
if(currentWayPoint >= path.vectorPath.Count)
return;
Vector3 wayPoint = path.vectorPath [currentWayPoint];
wayPoint.z = transform.position.z;
transform.position = Vector3.MoveTowards (transform.position, wayPoint, Time.deltaTime * speed);
float distance = Vector3.Distance (transform.position, wayPoint);
if(distance == 0){
currentWayPoint++;
}
}
---- UPDATE ----
Наконец я получить ожидаемый результат, изменение rigidbody2D.isKinematic свойство верно, когда цель была близка, и остановить его
Здесь это видео https://www.youtube.com/watch?v=0Zm0idUU75s
И код движения противника
void FixedUpdate() {
if(path == null)
return;
if(currentWayPoint >= path.vectorPath.Count)
return;
float distanceTarget = Vector3.Distance (transform.position, target.position);
if (distanceTarget <= 1.5f) {
rigidbody2D.isKinematic = true;
return;
}else{
rigidbody2D.isKinematic = false;
}
Vector3 wayPoint = path.vectorPath [currentWayPoint];
wayPoint.z = transform.position.z;
transform.position = Vector3.MoveTowards (transform.position, wayPoint, Time.deltaTime * speed);
float distance = Vector3.Distance (transform.position, wayPoint);
if(distance == 0){
currentWayPoint++;
}
}
Не могли бы вы показать нам, что вы сделали? Пожалуйста, покажите нам код и изображение сцены, если это возможно. –
@Bobthezealot похоже, что он ищет способ избежать столкновения. – Dinal24