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); }
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); } }
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("生成完了!"); }
void Awake() { current = this; }
public static object GetObject(CacheType type, int cacheKey, GenerateObject callback) { return(GetObjectByName(type, cacheKey.ToString(CultureInfo.InvariantCulture), callback)); }