如何动态重置场景中的对象数
本文关键字:对象 何动态 动态 | 更新日期: 2024-11-01 03:33:19
我正在尝试构建这个游戏:
用户通过GUI设置一个名为"samplesize"的整数和一个名为"ylocation"的数字。因此,场景中会出现恰好的"样本大小"球体,沿 x 轴等距排列,并向上移动到"ylocation"。
如果用户输入"采样大小"和"ylocation"的新值,则场景将更改以反映新的球体和位置数。
这是我的问题:(i)当我设置样本大小时,前一个场景遗留下来的"多余球体"不会消失。如何让它们消失?例如,如果一个场景有 1000 个球体,并且我将 samplesize 重新定义为 5,然后单击"确定",那么我只想看到 5 个球体(而不是 1000 个)。
(ii)如何使游戏开始时没有球体。在我设置样本大小并单击"确定"之前,我不希望在场景中出现任何球体。但是 Unity (C#?) 首先将所有 1000 个球体放置在位置 (0,0,0)。如何阻止 Unity 执行此操作?
这是我为数据输入设置GUI的代码
using UnityEngine;
using System.Collections;
public class ButtonText : MonoBehaviour
{
private bool defineModel = false;
string beta0 = "" , beta1 = "";
public float ylocation ;
public int samplesize=0 ;
void OnGUI()
{
if (!defineModel) {
if (GUI.Button (new Rect (0, 0, 150, 20), "Define a model"))
defineModel = true;
} else {
beta0 = GUI.TextField (new Rect(10, 10, 50, 25), beta0, 40);
beta1 = GUI.TextField (new Rect(10, 40, 50, 25), beta1, 40);
if (GUI.Button (new Rect (300, 250, 100, 30), "OK")) {
samplesize = int.Parse(beta0);
ylocation = float.Parse(beta1);
defineModel = false;
return;
}
}
}
}
这是我绘制场景的代码
using UnityEngine;
using System;
using System.Collections;
using System.Collections.Generic;
public class SphereManager : MonoBehaviour
{
public List<GameObject> spheres; // declare a list of spheres
void Awake () {
for (int i = 0; i < 1000; i++) {
GameObject sphere = GameObject.CreatePrimitive(PrimitiveType.Sphere); // Make a new sphere
Rigidbody gameObjectsRigidBody = sphere.AddComponent<Rigidbody>(); // Add the rigidbody.
gameObjectsRigidBody.useGravity = false; // turn off the sphere's gravity.
sphere.collider.enabled = false; // remove the collider
spheres.Add(sphere); // add the sphere to the end of the list
}
}
void Update()
{
int n = GetComponent<ButtonText> ().samplesize;
float ylocation = GetComponent<ButtonText> ().ylocation;
for(int i=0; i<n; i++) {
spheres[i].transform.position = new Vector3(i, ylocation, 0); // reposition the sphere
}
}
}
您可以切换球体的显示。
for(int i=0; i < spheres.Count; i++) { // now iterating all
spheres[i].SetActive(i < n); // show/hide sphere
if (spheres[i].active) // only reposition active spheres
spheres[i].transform.position = new Vector3(i, ylocation, 0); // reposition the sphere
}