Среда, 19 Июня 2024, 05:02

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Короткие названия для скриптов, нормальная ли практика?
alexsilentДата: Воскресенье, 30 Января 2022, 11:02 | Сообщение # 1
почти ветеран
Сейчас нет на сайте
Можно ли использовать короткие имена скриптов, например мне надоело обращаться к скрипту "Game",
ибо тут целых 4 символа, долго писать, особенно если функция будет длинной.
Ну для примера я короткий вариант возьму, ибо с ходу не смогу придумать, но символов бывает очень много в реальной практике, учитывая все переменные при вызове какой-нибудь комплексной функции:
Код
Game.Mode = "pause";


хочу сократить главный скрипт до "Me" и будет поменьше текста :
Код
Me.Mode = "pause";


В идеале я хочу чтобы вообще можно было бы использовать глобальные переменные без обращений к скриптам
вообще из любого места, в духе:
Код
Mode = "pause"; // Но похоже это не реально


Нормально ли будет, если скрипт будет с коротким именем и выглядеть так?

Код

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

public class Me : MonoBehaviour {

static public string Mode = "start";
// Code...

}


Добавлено (30 Января 2022, 11:18)
---------------------------------------------
Вот несколько примеров разных глобальных или важных функций из моего кривого кода crazy :

Код
Game.it.CreateFace(GrabObject(WORD[4]),WORD[5]);


Код
if (Game.isEmpty(WORD[3]))
// быстрее, чем писать String.IsNullOrEmpty(WORD[3]), сделал себе внутреннюю функцию


Код
Game.it.OpenMenu("TalkMenu2",GrabName(WORD[1]),GrabName(WORD[2]));


А "it" это что-то вроде static ссылка на единственный активный "Game" скрипт, ибо часто нельзя сделать просто static функцию, ибо внутри функции бывают локальные переменные.


Сообщение отредактировал alexsilent - Воскресенье, 30 Января 2022, 11:23
zhuravelsvДата: Воскресенье, 30 Января 2022, 12:57 | Сообщение # 2
почетный гость
Сейчас нет на сайте
public class Me : MonoBehaviour - лучше так не делать) названия классов/функций/переменных должны чётко обозначать их задачу и область применения, что бы по названию можно было хотя бы предположить зачем это нужно, по названию "Me" никто никогда в жизни не поймёт не перечитывая весь класс что это такое (ну разве что это не имя какого-нибудь уникального персонажа/объекта о котором есть инфа в доках проекта)

глобальные переменные без обращений к скриптам - это зло, и к счастью в C# такого нету, но есть статические классы с помощью которых можно реализовать синглтон с состояниями всего чего нужно (хотя этого тоже лучше избегать)

Код
if (Game.isEmpty(WORD[3]))
// быстрее, чем писать String.IsNullOrEmpty(WORD[3]), сделал себе внутреннюю функцию

Тоже не очень) через два месяца откроешь свой проект, либо кому-то другому покажешь этот код, а окажется что в коде половина функций дублируют код фреймворка но с другими названиями, ну такое, не очень вообще, сложно потом в такой каше разбираться будет... тем более интелисенс студии всегда подсказывает подсказки, да и дневного лимита по печатаемым символам вроде быть нигде не должно)

Код
Game.isEmpty(WORD[3])

Вообще конечно по конвеншнам C# функции и классы должны всегда начинаться с большой буквы (isEmpty) (паскаль кейс), паблик переменные тоже, только абревиатуры (WORD[3]) до 3х символов в апперкейсе, а это уже разработчики юнити у себя всё в кашу намешали...
alexsilentДата: Воскресенье, 30 Января 2022, 16:00 | Сообщение # 3
почти ветеран
Сейчас нет на сайте
Цитата zhuravelsv ()
это зло

А почему зло?

Добавлено (30 Января 2022, 16:03)
---------------------------------------------

Цитата zhuravelsv ()
да и дневного лимита по печатаемым символам вроде быть нигде не должно)

Я путаюсь, когда в коде много символов, у меня просто глаза разбегаются от этого, поэтому я ищу баланс меджу пониманием и подбором более короткого синонима для переменной или функции.


Сообщение отредактировал alexsilent - Воскресенье, 30 Января 2022, 16:02
drcrackДата: Понедельник, 31 Января 2022, 00:04 | Сообщение # 4
старожил
Сейчас нет на сайте
Цитата
Mode = "pause"; // Но похоже это не реально

using static Game; в начало файла


Сообщение отредактировал drcrack - Понедельник, 31 Января 2022, 00:06
alexsilentДата: Понедельник, 31 Января 2022, 12:26 | Сообщение # 5
почти ветеран
Сейчас нет на сайте
Цитата drcrack ()
using static Game; в начало файла


О, звучит интересно. Спасибо!
Надо потестить как это будет работать,
если допустим, у текущего скрипта есть переменная Score и у скрипта Game тоже есть Score.
В общем, это очень бы сократило код.

Добавлено (01 Февраля 2022, 07:23)
---------------------------------------------

Цитата drcrack ()
using static Game; в начало файла

Не работает в юнити 2018.2.21, пишет что C# версия не поддерживает такую фичу, но да ладно,
может позже попробую скачать более новую версию юнити, хоть там больше тормозит на моём ноуте.


Сообщение отредактировал alexsilent - Понедельник, 31 Января 2022, 12:28
drcrackДата: Вторник, 01 Февраля 2022, 16:15 | Сообщение # 6
старожил
Сейчас нет на сайте
Цитата
Не работает в юнити 2018.2.21, пишет что C# версия не поддерживает такую фичу, но да ладно,
может позже попробую скачать более новую версию юнити, хоть там больше тормозит на моём ноуте.

есть другой вариант — добавь свойство Mode в общего родителя для своих скриптов т.е.
Код
public class MonoBehaviourEx: MonoBehaviour {
  public string Mode {
    get { return Game.Mode; }
    set { Game.Mode = value; }
  }
  // другие свойства...
}

и используй MonoBehaviourEx везде где у тебя щаз MonoBehaviour

PS это все криво и неправильно но тебя походу это не парит ваще так что наслаждайся коротким кодом :D


Сообщение отредактировал drcrack - Вторник, 01 Февраля 2022, 16:17
alexsilentДата: Вторник, 01 Февраля 2022, 18:28 | Сообщение # 7
почти ветеран
Сейчас нет на сайте
Цитата drcrack ()
PS это все криво и неправильно но тебя походу это не парит ваще так что наслаждайся коротким кодом


Лол! Спасибо :D
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг