Ну, как вы говорите сами: ваш сценарий выполняется на всех 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);
}
}
Но это очень излишне => неэффективно!
Скорее всего, этот сценарий работает только где-то в вашей сцене один раз , поскольку он уже может отслеживать любой объект, к которому прикоснулись, поэтому нет необходимости запускать его несколько раз.