Проверка столкновения с полигональным коллайдером с использованием слепка лучей и проблема создания экземпляров объектов (unity)

#c# #unity3d #collision #instantiation #raycasting

#c# #unity3d #столкновение #создание экземпляра #радиовещание

Вопрос:

Я пытаюсь проверить столкновение с полигональным коллайдером, используя Raycast на моем поле в моей игре Unity. А затем создайте обрезку на позиции отлитого луча, если выполнены условия, нажав кнопку. Несмотря на то, что он отлично проверяет столкновение, у меня есть несколько проблем, которые я просто не могу понять, как исправить. Нравится:

  • объект моей игры-шутера телепортируется на сцену случайным образом, но передача лучей всегда верна O_o.
  • Созданный экземпляр обрезки исчезает в момент следующего создания экземпляра…

Может ли кто-нибудь помочь мне это исправить? Вот код:

 public class PlayerRay : MonoBehaviour {  float borderLeft = -4.34f;  float borderRight = 3.85f;  float borderUp = 1.61f;  float borderDown = -2.32f;   public GameObject field;  public GameObject shooter;  public Transform shooterPos;  PolygonCollider2D fieldCollider;  public GameObject repka;    private void Start()  {  fieldCollider = field.GetComponentlt;PolygonCollider2Dgt;();    }  void Update()  {    }  public void Sow()  {    Vector3 rayCastPos = new Vector3(Random.Range(borderLeft, borderRight), Random.Range(borderDown, borderUp), 0);  shooter.transform.Translate(rayCastPos);     Debug.DrawRay(transform.position, transform.forward * 10, Color.yellow);  RaycastHit2D hit = Physics2D.Raycast(rayCastPos, Vector3.forward);     if (hit == fieldCollider)  {  Debug.Log("We hit collider");  Instantiate(repka, shooterPos);    }  else  {  Debug.Log("There is no colider at: "   rayCastPos);  }  } }  

введите описание изображения здесь

Комментарии:

1. У Physics2d.raycast нет начальной точки ?

2. @JustARandomWibuuuu это так. Это rayCastPos.

3. О, я понимаю, я не вижу длины

Ответ №1:

Я нашел решение! Просто я попытался использовать перегрузку преобразования для создания экземпляра вместо использования Vector3. Потому что я забыл добавить «вращение» в качестве третьего параметра. Поэтому я переключился на перегрузку Vector3, добавил Quaternion.identity для вращения, и теперь все работает просто отлично 🙂

Вот как это исправить:

 Instantiate(repka, rayCastPos, Quaternion.identity);