#c# #unity3d
#c# #unity3d
Вопрос:
По сути, у меня есть проектор, выглядящий как сборный. У него есть скрипт, который вычисляет расстояние между ним и объектом player вместе с несколькими другими вещами (raycast и angle), и если оно находится ниже его диапазона, тогда он выполняет некоторый код внутри. Теперь, когда я экспериментировал с несколькими проекторами в сцене, я заметил, что ВСЕ они вычисляют свой диапазон до игрока из первого размещенного экземпляра projector . Не совсем уверен, почему это происходит, но я думаю, мне нужно где-то добавить какую-то строку типа «thisObject».
Вот код этого вычисления:
private GameObject player;
private Transform target;
void Start()
{
player = GameObject.FindGameObjectWithTag("Player");
target = player.transform;
lt = GetComponent<Light>();
}
...
public void scan()
{
playerVelocityRate = target.GetComponent<PlayerMovement>().playerVelocity.magnitude;
float finalRate = Time.deltaTime * rate;
if (Vector2.Distance(target.position, transform.position) <= range amp;amp; RaycastCheck.playerCasted){
// do something
}
}
scan() вызывается из скрипта Spotlight.cs следующим образом:
void Update()
{
if(Input.GetKeyDown(KeyCode.E) amp;amp; !GetComponent<EnableSpotlight>().isEnabling amp;amp; (target.transform.position - transform.position).magnitude <= disableRange){
GetComponent<DisableSpotlight>().disable(downTime, fixTime);
}
if(rotates) GetComponentInParent<ScanBackandForth>().rotate();
GetComponent<SpotlightDetection>().scan();
}
Комментарии:
1. Звучит маловероятно и трудно определить с помощью предоставленного вами кода .. нет строки типа «thisObject» ..
transform.position
явно использует компонент этого экземпляраTransform
.. в то времяplayer
как, вероятно, будет одинаковым для всех экземпляров. Какscan
вызывается?2. Отредактировано в вопросе
Ответ №1:
Я понял это.
Это действительно довольно глупая ошибка, но на случай, если у кого-то возникнет подобная проблема и он зайдет сюда, вот что было не так:
В моем операторе if было два элемента, которые вызвали ошибку:
- Раньше я
Vector2.Distance()
вычислял расстояние между двумя объектами, но в вычислениях были некоторые ошибки, потому что очевидно, что утверждение if было истинным, даже когда расстояние было больше диапазона. Однако, когда я изменил его(target.transform.position - transform.position).magnitude
, он работал просто отлично. - Я случайно сделал так, чтобы моя радиопередача проверяла логическое значение static, что сделало так, что проверяется только логическое значение raycast для первого объекта. Удалил статическую часть, и теперь она работает нормально.
Комментарии:
1. Рад, что вы это поняли. Однако в вопросе недостаточно подробностей, чтобы фактически воспроизвести проблему, и очень сомнительно, будет ли это полезно для кого-либо еще в будущем 😉