// オブジェクト生成. public void Generate() { RectXZ rect = param.posXZ; Vector3 pos = new Vector3(rect.x, posY, rect.z); if (param.fill) { // posRange内にランダムに位置を決める. pos.x = Random.Range(-0.5f, 0.5f) * rect.width + rect.x; pos.z = Random.Range(-0.5f, 0.5f) * rect.depth + rect.z; } else { // posRange外周上にランダムに位置を決める. float l = Random.Range(0.0f, rect.width * 2.0f + rect.depth * 2.0f); do { if (l < rect.width) { pos.x = rect.getXMin() + l; pos.z = rect.getZMin(); break; } l -= rect.width; if (l < rect.depth) { pos.x = rect.getXMax(); pos.z = rect.getZMin() + l; break; } l -= rect.depth; if (l < rect.width) { pos.x = rect.getXMax() - l; pos.z = rect.getZMax(); break; } l -= rect.width; if (l < rect.depth) { pos.x = rect.getXMin(); pos.z = rect.getZMax() - l; break; } l -= rect.depth; } while(false); } Debug.Log(pos.x + " " + pos.z); // インスタンス生成. GameObject newChild = Object.Instantiate(target, pos, Quaternion.identity) as GameObject; // 自分を親にする. newChild.transform.parent = transform; // 配列更新. childrenArray.Add(newChild); // 子供を増やした通知. SendMessage("OnInstantiatedChild", newChild, SendMessageOptions.DontRequireReceiver); counter++; if (counter >= param.limitNum) { limitCheck = true; // 一度リミットに到達したらチェックを入れる. } }
// 生成对象 public void Generate() { RectXZ rect = param.posXZ; Vector3 pos = new Vector3(rect.x, posY, rect.z); if (param.fill) { // 随机决定posRange内的一个位置. pos.x = Random.Range(-0.5f, 0.5f) * rect.width + rect.x; pos.z = Random.Range(-0.5f, 0.5f) * rect.depth + rect.z; } else { // 随机决定posRange外围上的一个位置. float l = Random.Range(0.0f, rect.width * 2.0f + rect.depth * 2.0f); do { if (l < rect.width) { pos.x = rect.getXMin() + l; pos.z = rect.getZMin(); break; } l -= rect.width; if (l < rect.depth) { pos.x = rect.getXMax(); pos.z = rect.getZMin() + l; break; } l -= rect.depth; if (l < rect.width) { pos.x = rect.getXMax() - l; pos.z = rect.getZMax(); break; } l -= rect.width; if (l < rect.depth) { pos.x = rect.getXMin(); pos.z = rect.getZMax() - l; break; } l -= rect.depth; } while(false); } Debug.Log(pos.x + " " + pos.z); // 生成实例 GameObject newChild = Object.Instantiate(target, pos, Quaternion.identity) as GameObject; // 将自己作为父对象 newChild.transform.parent = transform; // 更新数组 childrenArray.Add(newChild); // 通知子对象增加事件 SendMessage("OnInstantiatedChild", newChild, SendMessageOptions.DontRequireReceiver); counter++; if (counter >= param.limitNum) { limitCheck = true; // 一旦达到限制数量则设置检测标记 } }