Ожидание ввода в 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);
}
}