Фон
Я хочу выполнить лучейкастинг одного вызова куба с произвольной позицией start в другой куб с произвольной позицией под названием end, чтобы увидеть, попадает ли луч в цилиндр. ему нужно вычислять только один раз при каждом запуске игры.
Что я сделал
Поэтому я помещаю код в начало, который выглядит следующим образом:
void Start()
{
GameObject start = GameObject.CreatePrimitive(PrimitiveType.Cube);
GameObject end = GameObject.CreatePrimitive(PrimitiveType.Cube);
start.transform.position = new Vector3(20, 20, 12);
end.transform.position = new Vector3(-20, 20 , 10);
GameObject safeZone = GameObject.CreatePrimitive(PrimitiveType.Cylinder);
safeZone.transform.position = Vector3.zero;
safeZone.transform.localScale = new Vector3(40, 40 ,40);
bool ifCross = Physics.Raycast(start.transform.position,
(end.transform.position - start.transform.position),
out RaycastHit hit, Mathf.Infinity);
if (ifCross)
{
Debug.Log("success");
Debug.DrawRay(start.transform.position,
(end.transform.position - start.transform.position),
Color.green, 100f);
Debug.Log(hit.collider.gameObject.name);
}
else
{
Debug.Log("fail");
Debug.DrawRay(start.transform.position,
(end.transform.position - start.transform.position),
Color.red, 100f);
}
}
Этот код всегда возвращает ошибку , но в сцене луч отладки попадает в цилиндр.
То, что я пробовал:
- Переместите связанный код ifCross для обновления, он работает правильно и возвращает исключенный результат.
- Вместо создания куба в начале, если я сделаю объект кубов publi c и нарисую кубики в редакторе единства, он будет работать нормально. (работает только тогда, когда позиция установлена в редакторе единства, но это не то, что я хочу, потому что мне нужна случайная позиция для кубов.
Вопрос
Почему raycast работает в обновлении, но не в старте? Почему заранее установленные кубы могут работать в старте? Как сделать случайное положение кубов в старте и заставить работать raycast?
Любые ссылки приветствуются. Спасибо за ваше время.