我正在构建一个嵌入在 Windows 窗体应用程序中的 Unity3d 可视化系统。我可以来回进行 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);
}
}