«transform.position» вычисляется из одного экземпляра сборного

#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 было два элемента, которые вызвали ошибку:

  1. Раньше я Vector2.Distance() вычислял расстояние между двумя объектами, но в вычислениях были некоторые ошибки, потому что очевидно, что утверждение if было истинным, даже когда расстояние было больше диапазона. Однако, когда я изменил его (target.transform.position - transform.position).magnitude , он работал просто отлично.
  2. Я случайно сделал так, чтобы моя радиопередача проверяла логическое значение static, что сделало так, что проверяется только логическое значение raycast для первого объекта. Удалил статическую часть, и теперь она работает нормально.

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

1. Рад, что вы это поняли. Однако в вопросе недостаточно подробностей, чтобы фактически воспроизвести проблему, и очень сомнительно, будет ли это полезно для кого-либо еще в будущем 😉