0

我正在构建一个嵌入在 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);
    }        
}
4

0 回答 0