#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);