Привет работяги. Сел я значит делать простой арканоид. В наличии 4 разных объекта: игрок, шар, блок и стена которая ограничивает уровень. Шар нормально отталкивается от всех поверхностей, Для уничтожения блока нужно 2 столкновения, при первом отталкивание происходит, а втором при втором нет. Собственно вопрос в том как это реализовать или что поправить в скриптах. Ниже привожу код скрипта шара и блока + на всякий случай код платформы игрока. Больше каких либо скриптов в игру нету.
Шар:
Код
using UnityEngine; using System.Collections;
public class BallScript : MonoBehaviour { private bool ballsActive; private Vector3 ballPosition; private Vector2 ballInitialForce; public GameObject playerObject;
void OnCollisionEnter2D(Collision2D collision){ if (collision.gameObject.tag == "Ball") // если удар прошел - превращаем в триггер gameObject.GetComponent<BoxCollider2D>().isTrigger = true;
}
void OnTriggerEnter2D(Collision2D who){ if(who.gameObject.tag == "Ball") // сюда попадем, только когда коллайдер стал триггером, т.е. после ВТОРОГО удара Destroy(gameObject); }
Мыслю - значит программирую... Конструктивная критика - умных ведет к совершенству... Великие умы обсуждают идеи, средние - обсуждают поступки, а малые - людей.
Jericho, ну понятно же всё, не на китайском же написано! наверное тут должно быть Collider2D а не Collision2D void OnTriggerEnter2D(Collision2D who) попробуй изменить
robertono, ошибка пропадает, но столкновения так и не происходят, после 2 прохождений шара блок уничтожается, но как я говорил столкновения так и не появились Уютненькая страничка Ерихона
мдаа, очепятался я.. ) там действительно void OnTriggerEnter2D(Collider2D who) {...} должен быть..
ЦитатаJericho ()
robertono, ошибка пропадает, но столкновения так и не происходят, после 2 прохождений шара блок уничтожается, но как я говорил столкновения так и не появились
ЦитатаJericho ()
Для уничтожения блока нужно 2 столкновения, при первом отталкивание происходит, а втором при втором нет.
первый удар шара по блоку = отскок шара второй (и т.п.) удар по блоку = шар пролетел насквозь блока + блок уничтожился по пути (1) ИЛИ шар отскочил + блок уничтожился (2) ?!??!?
в версии (1) - делаем, как я написал, но с исправлением на Collider2D.. ну и там внутри ОнТриггерЕнтер2Д можно добавить начисление очков и прочее. в (2) - тогда вообще isTrigger не ставим! просто считаем удары в ОнКоллизионЕнтер2Д и на 2ой удар, уничтожаем с задержкой -- Destroy(gameObject, 0.05f); - тогда физика отработает, шар отскочит, а блок уничтожится после отскока. Наверное в этом был весь вопрос темы Мыслю - значит программирую... Конструктивная критика - умных ведет к совершенству... Великие умы обсуждают идеи, средние - обсуждают поступки, а малые - людей.
Сообщение отредактировал KamiRonin - Среда, 13 Января 2016, 00:18