Unity Raycast2D снимает только 1 единицу

У меня есть 2D-персонаж с оружием, и я хочу создать экземпляр взрыва, когда его выстрел сталкивается с чем-то другим.

Я подумал, что лучшим способом сделать это будет Raycast2D в javascript.

var hit: RaycastHit2D = Physics2D.Raycast(transform.position, Vector2.right);
if (hit.collider != null){
    boomClone2 = Instantiate(boom, new Vector3(hit.point.x, hit.point.y, transform.position.z - 1), Quaternion.identity);
}

Теперь проблема в том, что я стреляю, и взрыв всегда создается как один юнит перед моим персонажем, даже если там ничего нет. Понятия не имею почему.


person helpme    schedule 26.08.2017    source источник
comment
Всегда создает образ одного юнита перед моим персонажем, даже если там ничего нет. Можете ли вы объяснить это подробнее? Можно скриншот того, о чем вы говорите...   -  person Programmer    schedule 26.08.2017
comment
Это выглядит так: CHARACTER___________ ‹EXPLO›_______________ ВРАГ   -  person helpme    schedule 26.08.2017
comment
Он не создается на враге, он создает несколько юнитов перед персонажем.   -  person helpme    schedule 26.08.2017
comment
Вы пытались изменить vector3 в вызове метода Instantiate? Какое преобразование вы вызываете? (Персонаж, враг или взрыв?)   -  person z3nth10n    schedule 26.08.2017
comment
вы пытались просто распечатать имя объекта, с которым вы сталкиваетесь? Это поможет вам отладить это. Оттуда вы можете добавить условия, подтверждающие, что префаб создается только тогда, когда он попадает в то, что вы хотите.   -  person oxrock    schedule 26.08.2017


Ответы (2)


Вы должны изменить происхождение raycast. Или вы можете создать новый слой для игрока. и исключить этот слой при raycast.

RaycastHit2D hit = Physics2D.Raycast (transform.position, Vector2.right, ~(LayerMask.GetMask ("player")));
person Hieu Nguyen Trung    schedule 26.08.2017

Самая большая проблема заключается в том, что вы не даже проверяете, какой объект попал в луч, прежде чем что-либо создавать. Это не правильно. Raycast может поразить все, что находится перед ним. Все, что связано с Collider 2D. Он может даже поразить самого персонажа.

Создайте тег «Враг». Поместите своих врагов в этот тег. Когда raycast не null, убедитесь, что враг действительно поражен, прежде чем что-либо создавать.

if (hit.collider != null)
{
    if (hit.collider.CompareTag("Enemy"))
    {
        boomClone2 = Instantiate(boom, new Vector3(hit.point.x, hit.point.y, transform.position.z - 1), Quaternion.identity);
    }
}

Как я уже сказал, рейкаст может даже ударить сам по себе, особенно когда выполняется 2D-рейкаст. Подробнее о том, как исправьте и эту проблему, если проблема в ней.

person Programmer    schedule 26.08.2017