Debug.Log только один раз, а не столько раз, сколько объектов - PullRequest
0 голосов
/ 11 февраля 2020

у меня 9 3d кубов. у каждого куба есть компонент скрипта, проверяющий, был ли куб затронут. если это так, он записывает имя куба, к которому прикоснулись.

want: имя куба записывается один раз. реальность: имя куба записывается 9 раз (по одному разу для каждого куба), что имеет смысл ... это один и тот же скрипт, прикрепленный ко всем 9 кубам. см. сценарий ниже:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class main: MonoBehaviour

{
    public string touchedObjectsName;

    // Start is called before the first frame update
    void Start()
    {


    }

    // Update is called once per frame
    void Update()
    {
        if ((Input.touchCount > 0) && (Input.GetTouch(0).phase == TouchPhase.Began))
        {
            Ray raycast = Camera.main.ScreenPointToRay(Input.GetTouch(0).position);
            RaycastHit raycastHit;

            if (Physics.Raycast(raycast, out raycastHit))
            {
                touchedObjectsName = raycastHit.collider.gameObject.name;
                Debug.Log(touchedObjectsName);
            }
        }
    }
}

вопрос: можно ли изменить вышеуказанный сценарий, чтобы он регистрировался только один раз, даже если он присоединен к нескольким игровым объектам?

спасибо, уважаемое сообщество!

1 Ответ

1 голос
/ 11 февраля 2020

Ну, как вы говорите сами: ваш сценарий выполняется на всех 9 кубах!

Итак, 9 раз вы делаете Raycast, 9 раз вы ударяете всегда один и тот же объект и печатаете его имя 9 раз.


Конечно, вы можете просто проверить, ударили ли вы себя:

if (Physics.Raycast(raycast, out raycastHit))
{
    // only do it if the hit object is the same as this script is attached to
    if(raycastHit.gameObject == gameObject)
    {
        touchedObjectsName = raycastHit.collider.gameObject.name;
        Debug.Log(touchedObjectsName);
    }
}

Но это очень излишне => неэффективно!

Скорее всего, этот сценарий работает только где-то в вашей сцене один раз , поскольку он уже может отслеживать любой объект, к которому прикоснулись, поэтому нет необходимости запускать его несколько раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...