2015-03-11 7 views
0

Я пытаюсь выстрелить пулю (rigidbody2d, boxcollider2d) в другой объект противника (rigidbody2d, кинематический, circlecollider2d). Я хочу точку столкновения между этими двумя. Когда они сталкиваются, я хочу эффект частиц столкновения и от точки контакта, я хочу создать 5 камневых объектов, движущихся в разных направлениях. Как мне это достичь? Проблема в том, что контактная точка i кажется неправильной. Эффект столкновения частиц создается при столкновении, но объекты горных пород создаются в некоторой другой точке, близкой к точке контакта, но не в точке контакта. Также как я перемещаю объекты горных пород в разных направлениях после их создания?OnCollisionEnter2D некорректный адрес для контактов? - Unity2D

мой код:

void OnCollisionEnter2D(Collision2D coll) 
{ 
if (coll.gameObject.tag == "Enemy") 
{ 
    ContactPoint2D contact = coll.contacts[0]; 

    GameObject rock1 = Instantiate (rock, contact.point, transform.rotation) as GameObject; 
    rock1.rigidbody2D.velocity = transform.up * 20; 
    GameObject rock2 = Instantiate (rock, newPos, transform.rotation) as GameObject; 
    rock2.rigidbody2D.velocity = transform.right * 20; 
    Destroy(coll.gameObject); 
    Destroy (gameObject); 
    Instantiate (explosion, transform.position, Quaternion.identity);   

} 

}

ответ

0

Для вашей первой задачи [Rocks нереста в другой точке, отличной от точки контакта]

Я рекомендую вам удалить коллайдер окна с вашим bullet как коллайдер коробки имеет плоскую поверхность и будет генерировать несколько точек контакта при столкновении. Вместо этого используйте коллайдер Circle. (Никаких ограничений на скалу).

Для вашей второй задачи [Как икра и бросать камни в другом направлении]

точек контакта вы получаете от столкновения имеете нормальный вектор в них (contact.normal), которые обеспечивают вам вектор нормали к столкновению точка.

Примените случайное вращение на своей скале и используйте этот нормальный вектор для направления, в котором вы хотите переместить камни. Также Collision2D содержит вектор относительной Velocity. Вы также можете добавить это к своему нормальному вектору (это может дать небольшой реалистичный физический эффект :)).

Также камни, которые вы создаете, не должны иметь isKinematic, установленный в true, или AddForce, и Velocity не будет влиять на скалу.

 Смежные вопросы

  • Нет связанных вопросов^_^