Пример #1
0
        public static object GetObjectByName(CacheType type, string name, GenerateObject callback)
        {
            if (HttpRuntime.Cache == null)
            {
                return(callback());
            }

            var cacheKey      = type + "-" + name;
            var cachedVersion = HttpRuntime.Cache[cacheKey];

            if (cachedVersion == null)
            {
                if (!Cachelock.ContainsKey(cacheKey))
                {
                    Cachelock.Add(cacheKey, new Object());
                }

                lock (Cachelock[cacheKey])
                {
                    cachedVersion = HttpRuntime.Cache[cacheKey];
                    if (cachedVersion == null)
                    {
                        cachedVersion = callback();
                        CacheObject(type, cacheKey, cachedVersion);
                    }
                }
            }

            return(cachedVersion);
        }
Пример #2
0
    void Start()
    {
        gObject = GameObject.Find("Generator").GetComponent <GenerateObject>();
        pMove   = GameObject.FindWithTag("Player").GetComponent <PlayerMove>();

        preTile = tileList[0];
        for (int i = 1; i < tileQuantity; i++)
        {
            GameObject selectedTile = tileKindList[Random.Range(0, tileKindList.Count)];

            GameObject nextTile = Instantiate(selectedTile, new Vector3(0, 0, preTile.transform.position.z + offset), Quaternion.identity) as GameObject;
            tileList.Add(nextTile);
            preTile = nextTile;
            tileCount++;

            gObject.RandomGenerateObject(nextTile.transform.position);
        }
    }
Пример #3
0
    void Start()
    {
        player  = GameObject.Find("Champion");
        canWalk = player.GetComponent <PlayerMovement>();


        //Get Room Snap Size
        m_OrthographicCamera = GameObject.Find("Main Camera").GetComponent <Camera>();
        checkRoomBorder      = m_OrthographicCamera.GetComponent <CameraMovement>();
        screenHeight         = m_OrthographicCamera.orthographicSize * 2;
        screenWidth          = screenHeight * Screen.width / Screen.height;
        screenSnapSize       = screenWidth;

        //Set First Room
        firstRoom = GameObject.Find("Start Room");
        rooms.Add(firstRoom);
        roomNumber.Add(0);

        //Generate Enemy/Loot
        generateObject = GetComponent <GenerateObject>();
    }
    private IEnumerator GenerateLoop()
    {
        Debug.Log("オブジェクト生成中");
        //マテリアルのテクスチャを取得
        tex = (Texture2D)GetComponent <MeshRenderer> ().sharedMaterial.mainTexture;
        //それぞれの色のところにオブジェクトを生成
        for (int i = 0; i < objectByColors.Length; i++)
        {
            //このループで使用するやち
            ObjectByColor _objectByColor = objectByColors[i];
            //生成させたい場所の色
            Color originalColor = _objectByColor.locationColor;

            //子にグループとしての空オブジェクトを生成
            GameObject group = new GameObject("Group" + i);
            group.transform.parent = transform;
            group.isStatic         = true;

            //距離毎に上からレイを撃って生成
            int miss = 0;
            int l    = 0;
            for (float z = 10f; ; z += _objectByColor.distanceRate)
            {
                for (float x = 10f; ; x += _objectByColor.distanceRate)
                {
                    //レイ
                    Ray        ray = new Ray(new Vector3(x, 10000f, z), Vector3.down);
                    RaycastHit hit;
                    //地面があった
                    if (Physics.Raycast(ray, out hit))
                    {
                        miss = 0;
                        //レイが当たったところのテクスチャの座標
                        Vector2 texPos = hit.textureCoord * tex.width;
                        //その座標のピクセルの色を取得
                        Color pixelColor = tex.GetPixel((int)texPos.x, (int)texPos.y);

                        //そのピクセルの色と設定れた色が似ていたら
                        if (ColorUtility.WithinRange(originalColor, _objectByColor.closenessColor, pixelColor))
                        {
                            //確率で生成
                            if (Random.value <= _objectByColor.probability)
                            {
                                //生成するオブジェクトをランダムで選ぶ
                                GenerateObject generateObject = _objectByColor.generateObjects[Random.Range(0, _objectByColor.generateObjects.Length)];
                                //オブジェクトを生成
                                GameObject go = Instantiate(generateObject.obj);
                                //子になる
                                go.transform.parent = group.transform;
                                //座標と向きを適用
                                go.transform.position = hit.point;
                                go.transform.up       = hit.normal;
                                if (generateObject.randomRotate_AxisFree)
                                {
                                    go.transform.Rotate(Random.Range(0f, 360f), Random.Range(0f, 360f), Random.Range(0f, 360f));
                                }
                                if (generateObject.randomRotate_AxisNormal)
                                {
                                    go.transform.Rotate(go.transform.up, Random.Range(0f, 360f));
                                }
                                //大きさをランダムで
                                go.transform.localScale = new Vector3(
                                    Random.Range(generateObject.minRandomSize.x, generateObject.maxRandomSize.x),
                                    Random.Range(generateObject.minRandomSize.y, generateObject.maxRandomSize.y),
                                    Random.Range(generateObject.minRandomSize.z, generateObject.maxRandomSize.z));
                                //スタティックにする
                                go.isStatic = true;

                                l++;
                                if (l > 2000)
                                {
                                    l = 0;
                                    yield return(null);
                                }
                            }
                        }
                    }
                    else
                    {
                        //レイが当たってない
                        miss++;
                        break;
                    }
                }
                //2回連続でレイが当たってなければ、もう地面はない
                if (miss == 2)
                {
                    break;
                }
            }
        }
        flg = false;
        Debug.Log("生成完了!");
    }
Пример #5
0
 void Awake()
 {
     current = this;
 }
Пример #6
0
 public static object GetObject(CacheType type, int cacheKey, GenerateObject callback)
 {
     return(GetObjectByName(type, cacheKey.ToString(CultureInfo.InvariantCulture), callback));
 }