2013-12-08 4 views
3

Насколько я вижу, на мой вопрос не был дан ответ раньше. Я использую Unity для создания приложения для Windows Phone 8, и я хочу получить вход пользователя и выполнить его как код. Теперь, как правило, с JavaScript можно просто использовать eval («здесь код»), но Unity не нравится, и говорит, что eval() не разрешено с моей целью (WP8).Eval() замена в UnityScript или C# с Unity

Так что мой вопрос: как я могу выполнить строку как код в EITHER C# или UnityScript без использования eval() и не полагаться на окно или прикреплять скрипт к документу - в основном, так что он работает с Unity.

Например, если бы я мог использовать eval, я бы сделал: eval ("createCuboid (0, 1, 2)");

Спасибо за помощь.

Редактировать: Так что я делаю приложение, которое позволяет пользователю вводить одну строку кода в GUI.TextField. Когда пользователь нажмет кнопку, он получит код и запустит его. В моем примере createCuboid (0, 1, 2) у меня есть моя собственная функция, которая создает кубоид по спецификации пользователя (как видно из параметров).

Причина, по которой я хочу, это потому, что я хочу, чтобы пользователь мог свободно манипулировать 3D-средой без необходимости делать что-то более сжатое - например, нужно нажимать на нее кнопку createCuboid, а затем вводить параметры в нескольких полях. У меня есть несколько функций, которые пользователь может вызвать для управления средой.

Помогло ли это?

+0

Не могли бы вы более подробно рассказать о проблеме, которую вы пытаетесь решить? Потому что вам не нужно это делать, и звучит так, будто вы что-то делаете совершенно не так. –

+0

Насколько я знаю, C# не предлагает ничего подобного. Вы можете написать собственный интерпретатор, который анализирует параметр и использует рефлексию, чтобы настроить все, но это будет большой работой (и потенциально очень опасной). –

+0

Что-нибудь для JavaScript? Я пришел к выводу, что делать это на C# невозможно. – user1785715

ответ

1

Почему вы должны позволить пользователю написать код? Это очень опасно. Если вы хотите разрешить пользователю создавать объекты (например, куб) во время выполнения, позвольте пользователю выбрать то, что они хотят создать, использовать поля для получения параметров функции (проверьте, правильно ли это здесь). Создайте объект.

Может быть что-то вроде:

List<Cubes> cubes = new List<Cubes>(); 
int create = /* read */; 
switch (create) 
{ 
    case 0: { 
     int x = /* ask for x */ 
     int y = /* ask for y */ 

     cubes.Add(createCuboid(x, y, 0)); 
     break; 
    } 

    /* etc */ 
} 

Если вы хотите, чтобы позволить пользователю удалить куб, получить из списка и удалить его. И .. да, этот код просто для того, чтобы уточнить, что я хочу сказать.

+0

Спасибо! Это лучшая идея. – user1785715

+0

Тем не менее, люди хотят сделать модемы модными модными пакетами, поэтому предпочтительнее взломать код/​​впрыски кода! Как ? –

Смежные вопросы