Как я запускаю программу как никто?

public class Rule : MonoBehaviour{}
Rule rule2 = new Rule();

Вы не можете использовать ключевое слово new для создания нового экземпляра, если вы наследуете его из MonoBehaviour.

Вы должны получить исключение, говорит :

Вы пытаетесь создать MonoBehaviour, используя ключевое слово 'new'. Это запрещено. MonoBehaviours можно добавлять только с помощью AddComponent (). Кроме того, ваш скрипт может наследовать от ScriptableObject или вообще никакого базового класса

. Ваш код работал бы, если у вас public class Rule {}, но у вас есть public class Rule : MonoBehaviour {}.

Создание нового экземпляра класса, полученного из MonoBehaviour:

Пример класса:

public class Rule : MonoBehaviour
{
    public Rule(int i)
    {

    }
}

Если вы наследуете MonoBehaviour, вы должны либо используйте GameObject.AddComponent или Instantiate для создания нового экземпляра.

Rule rule2 = null;
void Start()
{
  rule2 = gameObject.AddComponent<Rule>();
}

ИЛИ

public Rule rulePrefab;
Rule rule2;
void Start()
{
    rule2 = Instantiate(rulePrefab) as Rule;
}

Если скрипт Rule уже существуют и прикреплены к GameObject, вам не нужно создавать / добавлять / создавать новые экземпляры этого сценария. Просто используйте функцию GetComponent, чтобы получить экземпляр скрипта из GameObject, к которому он присоединен.

Rule rule2;
void Start()
{
    rule2 = GameObject.Find("NameObjectScriptIsAttachedTo").GetComponent<Rule>();
}

Вы заметите, что вы не можете использовать параметр в конструкторе, когда вы выводите свой скрипт из MonoBehaviour .



Создание нового экземпляра класса, который НЕ выводится из MonoBehaviour:

Пример класса: (Обратите внимание, что он не является результатом " MonoBehaviour "

public class Rule
{
    public Rule(int i)
    {

    }
}

Если вы не наследуете от MonoBehaviour, вы должны использовать ключевое слово new для создания нового экземпляра. Теперь вы можете использовать параметр в конструкторе, если вы хотите.

Rule rule2 = null;

void Start()
{
    rule2 = new Rule(3);
}

EDIT:

В последней версии Unity создается новый экземпляр скрипта, который наследует от MonoBehaviour с помощью new может не дать вам ошибку и не может быть null слишком , но все функции обратного вызова не будут выполняться . К ним относятся функции Awake, Start, Update и другие. , вы все равно должны сделать это правильно, как указано в начале этого ответа.

10
задан dragosht 14 December 2015 в 12:23
поделиться

4 ответа

Вы потребуете помощи и большого доверия от Вашего системного администратора. Обычные пользователи не могут выполнить исполняемый файл своего выбора от имени на других пользователях, период.

Она может добавить Ваше приложение на /etc/sudoers с надлежащими настройками и Вы сможете выполнить его как с sudo -u nobody. Это будет работать на оба сценария и двоичные исполняемые файлы.

Другая опция состоит в том, что она сделает chown nobody и chmod +s на Вашем двоичном исполняемом файле и Вы сможете выполнить его непосредственно. Эта задача должна быть повторена каждый раз Ваши исполняемые изменения.

Это могло также работать на сценарии при создании крошечного исполняемого файла помощника, который просто делает exec("/home/you/bin/your-application"). Этот исполняемый файл не может быть сделан suid-никем (см. выше), и можно свободно изменить your-application.

17
ответ дан 3 December 2019 в 20:44
поделиться

Насколько я знаю, Вы не можете, если Вы не корень или имеете sudo, настроенный, чтобы позволить Вам переключать пользователей. Или, у Вас может быть свой исполняемый файл, имеют suid набор битов на нем и имеют принадлежавший никому. Но это требует корневого доступа также.

1
ответ дан 3 December 2019 в 20:44
поделиться

'Никто' пользователь не является все еще пользователем. Я не уверен, что Ваше обоснование находится в наличии прогона программы как никто, это не будет добавлением никакой дополнительной безопасности. Вы, более вероятно, откроете себя для других проблем.

Я следовал бы рекомендации squadette использования вспомогательного приложения.

0
ответ дан 3 December 2019 в 20:44
поделиться

calife альтернатива sudo.

Calife является небольшой программой, которые позволяют системному администратору UNIX стать корнем (или другой пользователь) на его машинах, не давая пароль root, но его собственное.

0
ответ дан 3 December 2019 в 20:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: