// выдаст модели для природных объектов protected override void SetModel() { if (transform.childCount != 0) { Destroy(transform.GetChild(0).gameObject); } int material_ID = mainResource.ID; bool modelIsSprite = false; GameObject model; switch (material_ID) { case ResourceType.STONE_ID: case ResourceType.METAL_K_ORE_ID: case ResourceType.METAL_S_ORE_ID: case ResourceType.METAL_P_ORE_ID: case ResourceType.METAL_N_ORE_ID: case ResourceType.METAL_E_ORE_ID: case ResourceType.METAL_M_ORE_ID: model = Instantiate(Resources.Load <GameObject>("Prefs/boulderPref")); break; case ResourceType.MINERAL_F_ID: case ResourceType.MINERAL_L_ID: model = Instantiate(Resources.Load <GameObject>("Prefs/pilePref")); break; case ResourceType.FOOD_ID: model = Instantiate(Resources.Load <GameObject>("Prefs/berryBush")); modelIsSprite = true; break; default: model = Instantiate(Resources.Load <GameObject>("Prefs/defaultContainer")); break; } model.transform.parent = transform; model.transform.localPosition = Vector3.zero; model.transform.localRotation = Quaternion.Euler(Vector3.zero); if (!modelIsSprite) { Transform meshTransform = transform.GetChild(0).GetChild(0); meshTransform.GetComponent <MeshRenderer>().sharedMaterial = ResourceType.GetMaterialById(material_ID, meshTransform.GetComponent <MeshFilter>(), 255); short packIndex = -1; if (!materialBasedLods.TryGetValue(mainResource, out packIndex)) { Vector3[] positions = new Vector3[] { new Vector3(0, 0.084f, -0.063f) }; Vector3[] angles = new Vector3[] { new Vector3(45, 0, 0) }; Texture2D spritesAtlas = LODSpriteMaker.current.MakeSpriteLODs(model, positions, angles, 0.06f, Color.grey); Sprite[] lodSprites = new Sprite[1]; lodSprites[0] = Sprite.Create(spritesAtlas, new Rect(0, 0, spritesAtlas.width, spritesAtlas.height), new Vector2(0.5f, 0.5f), 512); packIndex = LODController.AddSpritePack(lodSprites); materialBasedLods.Add(mainResource, packIndex); } modelController.AddObject(model.transform, ModelType.Boulder, packIndex); } else { //shader replaced //FollowingCamera.main.AddSprite(model.transform); //haveSprite = true; } }
static GameObject Load3DModel(byte stage) { GameObject loadedModel = null; loadedModel = Instantiate(Resources.Load <GameObject>("Lifeforms/oak-" + stage.ToString())); short modelSpritePack = 0; switch (stage) { case 4: if (oak4spritesIndex == -1) { Vector3[] positions = new Vector3[] { new Vector3(0, 0.222f, -0.48f), new Vector3(0, 0.479f, -0.434f), new Vector3(0, 0.458f, -0.232f), new Vector3(0, 0.551f, -0.074f) }; Vector3[] angles = new Vector3[] { Vector3.zero, new Vector3(30, 0, 0), new Vector3(45, 0, 0), new Vector3(75, 0, 0) }; Texture2D spritesAtlas = LODSpriteMaker.current.MakeSpriteLODs(loadedModel, positions, angles, 0.25f, Color.green); Sprite[] lodSprites = new Sprite[4]; int size = spritesAtlas.width / 2; lodSprites[0] = Sprite.Create(spritesAtlas, new Rect(0, 0, size, size), new Vector2(0.5f, 0.5f), 128); lodSprites[1] = Sprite.Create(spritesAtlas, new Rect(size, 0, size, size), new Vector2(0.5f, 0.5f), 128); lodSprites[2] = Sprite.Create(spritesAtlas, new Rect(0, size, size, size), new Vector2(0.5f, 0.5f), 128); lodSprites[3] = Sprite.Create(spritesAtlas, new Rect(size, size, size, size), new Vector2(0.5f, 0.5f), 128); oak4spritesIndex = LODController.AddSpritePack(lodSprites); } modelSpritePack = oak4spritesIndex; break; case 5: if (oak5spritesIndex == -1) { Vector3[] positions = new Vector3[] { new Vector3(0, 0.222f, -0.48f), new Vector3(0, 0.479f, -0.434f), new Vector3(0, 0.458f, -0.232f), new Vector3(0, 0.551f, -0.074f) }; Vector3[] angles = new Vector3[] { Vector3.zero, new Vector3(30, 0, 0), new Vector3(45, 0, 0), new Vector3(75, 0, 0) }; Texture2D spritesAtlas = LODSpriteMaker.current.MakeSpriteLODs(loadedModel, positions, angles, 0.25f, Color.green); Sprite[] lodSprites = new Sprite[4]; int size = spritesAtlas.width / 2; lodSprites[0] = Sprite.Create(spritesAtlas, new Rect(0, 0, size, size), new Vector2(0.5f, 0.5f), 128); lodSprites[1] = Sprite.Create(spritesAtlas, new Rect(size, 0, size, size), new Vector2(0.5f, 0.5f), 128); lodSprites[2] = Sprite.Create(spritesAtlas, new Rect(0, size, size, size), new Vector2(0.5f, 0.5f), 128); lodSprites[3] = Sprite.Create(spritesAtlas, new Rect(size, size, size, size), new Vector2(0.5f, 0.5f), 128); oak5spritesIndex = LODController.AddSpritePack(lodSprites); } modelSpritePack = oak5spritesIndex; break; case 6: if (oak6spritesIndex == -1) { Vector3[] positions = new Vector3[] { new Vector3(0, 0.222f, -0.48f), new Vector3(0, 0.479f, -0.434f), new Vector3(0, 0.458f, -0.232f), new Vector3(0, 0.551f, -0.074f) }; Vector3[] angles = new Vector3[] { Vector3.zero, new Vector3(30, 0, 0), new Vector3(45, 0, 0), new Vector3(75, 0, 0) }; Texture2D spritesAtlas = LODSpriteMaker.current.MakeSpriteLODs(loadedModel, positions, angles, 0.25f, Color.green); Sprite[] lodSprites = new Sprite[4]; int size = spritesAtlas.width / 2; lodSprites[0] = Sprite.Create(spritesAtlas, new Rect(0, 0, size, size), new Vector2(0.5f, 0.5f), 128); lodSprites[1] = Sprite.Create(spritesAtlas, new Rect(size, 0, size, size), new Vector2(0.5f, 0.5f), 128); lodSprites[2] = Sprite.Create(spritesAtlas, new Rect(0, size, size, size), new Vector2(0.5f, 0.5f), 128); lodSprites[3] = Sprite.Create(spritesAtlas, new Rect(size, size, size, size), new Vector2(0.5f, 0.5f), 128); oak6spritesIndex = LODController.AddSpritePack(lodSprites); } modelSpritePack = oak6spritesIndex; break; } modelsLodController.AddObject(loadedModel.transform.GetChild(2), ModelType.Tree, modelSpritePack); return(loadedModel); }