Beispiel #1
0
    // オブジェクト生成.
    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;  // 一旦达到限制数量则设置检测标记
        }
    }