Ожидание ввода в Unity WebPlayer

Я строю систему визуализации Unity3d, которая встроена в приложение Windows Forms. Я могу получить связь между WebPlayer и C# и обратно.

WebPlayer должен иметь возможность рисовать произвольное количество моделей на основе ввода от пользователя (например, нарисовать 30 футбольных мячей и затем манипулировать ими). Я могу хорошо рисовать объекты и манипулировать ими, когда количество объектов жестко запрограммировано, но как поступить с пользовательским вводом до того, как что-либо будет нарисовано на сцене?

В настоящее время у меня есть скрипт, прикрепленный к основной камере, который выполняет внешний вызов функции javascript, в которой я запрашиваю ввод, проверяет, является ли ввод больше 0, и инициирует создание в Update() скрипта камеры.

В редакторе единства, когда я нажимаю кнопку воспроизведения, ничего не происходит до тех пор, пока я не изменю общедоступную переменную, а затем модели не будут созданы, как ожидалось, но в WebPlayer он просто продолжает рисовать другие элементы сцены, как если бы условия не было, а моделей нет. нарисованы, так как целое число по-прежнему 0.

Пожалуйста, помогите мне понять, как этого добиться. Спасибо

В сценарии основной камеры:

public int _numObjects;
public static _creationScript;
private static bool created = false;
public static GameObject _centrePoint;

void Awake()
{
    Application.ExternalCall("getNumberOfObjects");
    _centrePoint = Resources.Load("centrePoint") as GameObject;

    _creationScript = Resources.Load("creationScript") as CreationScript;
}

public void SetNumObjects(int numObjects)
{
    _numObjects = numObjects;
}
void Update()
{
    if (_numObjects> 40 && !created)
    {
        GameObject centrePoint = GameObject.Instantiate(_centrePoint, new Vector3(0, 0, 0), new Quaternion(0, 0, 0, 0)) as GameObject;
        centrePoint.AddComponent<CreationScript>()._cameraScript = this;

        created = true;
    }
}

в JavaScript веб-плеера:

var numObjects;

function setNumObjects(num) { u.getUnity().sendMessage("Main Camera","SetNumObjects", num) }

function getNumObjects(){
    do{
        numObjects = parseInt(window.prompt("Please enter number (40-100)", ""), 10);
    }while(isNaN(numObjects) || numObjects > 100 || numObjects < 40);
    setNumObjects(numObjects );
}

и, наконец, в сценарии, который создает объекты, которые прикреплены к центральной точке:

public int _numObjects;
public GameObject _model;
public GameObject[] _models;
public CameraScript _cameraScript;

void Start()
{
    _numObjects = _cameraScript._numObjects;        

    SetUpModels();
}

void SetUpModels()
{
    _models = new GameObject[_numObjects];

    _model = Resources.Load("model") as GameObject;

    for (int i = 0; i < _models.Length; i++)
    {
        _models[i] = Instantiate(_model, new Vector3(20, 0, 0), new Quaternion()) as GameObject;
        _models[i].RotateAround(this.transform.position, Vector3.up, i); //arrange in a circle
        _models[i].transform.LookAt(this.transform);
    }        
}

0 ответов

Другие вопросы по тегам