// выдаст модели для природных объектов

    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;
        }
    }
예제 #2
0
    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);
    }