Windows フォーム アプリケーションに埋め込まれた Unity3d 視覚化システムを構築しています。WebPlayer と C# の通信をやり取りできます。
WebPlayer は、ユーザーからの入力に基づいて、任意の数のモデルを描画できる必要があります (たとえば、30 個のサッカー ボールを描画し、それらを操作します)。オブジェクトの数がハードコードされている場合、オブジェクトを描画して操作することはできますが、シーンに何かが描画される前にユーザー入力を取得するにはどうすればよいでしょうか?
現在、メイン カメラにスクリプトを添付しています。このスクリプトは、入力を求める JavaScript 関数への外部呼び出しを行い、入力が 0 より大きいかどうかを確認し、カメラ スクリプトの Update() で作成を開始します。
Unity エディターで再生を押しても、パブリック変数を変更してからモデルが期待どおりに作成されるまで何も起こりませんが、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;
}
}
Web プレーヤーの 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);
}
}