Esempio n. 1
0
    public static void Start()
    {
        GameObject go = Selection.activeGameObject;

        GameObject prefab = GameObject.Instantiate(go);

        LightmapData[] datas = LightmapSettings.lightmaps;

        Renderer[] renderers = go.GetComponentsInChildren <Renderer>();

        foreach (Renderer renderer in renderers)
        {
            if (renderer.lightmapIndex != -1)
            {
                GameObject tg = PublicTools.FindChild(prefab, renderer.gameObject.name);

                LightmapGameObject ll = tg.AddComponent <LightmapGameObject>();

                ll.lightmapIndex = renderer.lightmapIndex;

                ll.lightmapScaleOffset = renderer.lightmapScaleOffset;
            }
        }

        Scene scene = prefab.AddComponent <Scene>();

        scene.farTextures  = new Texture2D[datas.Length];
        scene.nearTextures = new Texture2D[datas.Length];

        for (int i = 0; i < datas.Length; i++)
        {
            scene.farTextures[i]  = datas[i].lightmapFar;
            scene.nearTextures[i] = datas[i].lightmapNear;
        }

        scene.fieldOfView = Camera.main.fieldOfView;

        scene.ambientLight     = RenderSettings.ambientLight;
        scene.ambientIntensity = RenderSettings.ambientIntensity;

        scene.fog              = RenderSettings.fog;
        scene.fogColor         = RenderSettings.fogColor;
        scene.fogStartDistance = RenderSettings.fogStartDistance;
        scene.fogEndDistance   = RenderSettings.fogEndDistance;

        string path = "Assets/Arts/map/" + go.name + ".prefab";

        PrefabUtility.CreatePrefab(path, prefab);

        GameObject.DestroyImmediate(prefab);

        AssetBundleTools.SetAssetBundleName(path, go.name);

        SuperDebug.Log("场景Prefab构造完成!");
    }
Esempio n. 2
0
        public static void CombinePart(GameObject _main, GameObject[] _parts, string[] _jointNames, float[] _partScales)
        {
            SkinnedMeshRenderer skinnedMeshRenderer = _main.GetComponentInChildren <SkinnedMeshRenderer>();

            Mesh oldMesh = skinnedMeshRenderer.sharedMesh;

            RenderTexture resultTexture = new RenderTexture(512, 256, 0);

            Graphics.SetRenderTarget(resultTexture);

            GL.LoadPixelMatrix(0, 512, 256, 0);

            Graphics.DrawTexture(new Rect(0, 0, 512, 256), skinnedMeshRenderer.sharedMaterial.mainTexture);

            //			Graphics.SetRenderTarget (null);

            Vector3[]    vertices    = oldMesh.vertices;
            Vector3[]    normals     = oldMesh.normals;
            Vector2[]    uvs         = oldMesh.uv;
            Vector2[]    uv2s        = oldMesh.uv2;
            BoneWeight[] boneWeights = oldMesh.boneWeights;
            int[]        triangles   = oldMesh.triangles;

            int nowVertexCount = oldMesh.vertexCount;

            List <Texture> partTextureList = new List <Texture> ();

            for (int i = 0; i < _parts.Length; i++)
            {
                int uvFixIndex = -1;

                for (int m = 0; m < partTextureList.Count; m++)
                {
                    if (_parts[i].GetComponent <MeshRenderer> ().sharedMaterial.mainTexture == partTextureList[m])
                    {
                        uvFixIndex = m;

                        break;
                    }
                }

                if (uvFixIndex == -1)
                {
                    uvFixIndex = partTextureList.Count;

//					MeshRenderer mmm = _parts[i].GetComponent<MeshRenderer> ();

                    partTextureList.Add(_parts[i].GetComponent <MeshRenderer> ().sharedMaterial.mainTexture);

                    Graphics.DrawTexture(COMBINE_PART_TEXTURE_RECT_ARR[uvFixIndex], _parts[i].GetComponent <MeshRenderer> ().sharedMaterial.mainTexture);
                }

                Mesh partMesh = _parts[i].GetComponent <MeshFilter>().sharedMesh;

                GameObject dummy = PublicTools.FindChild(_main, _jointNames[i]);

                int boneIndex = -1;

                for (int n = 0; n < skinnedMeshRenderer.bones.Length; n++)
                {
                    if (skinnedMeshRenderer.bones[n].name == dummy.transform.parent.name)
                    {
                        boneIndex = n;

                        break;
                    }
                }

                Array.Resize <Vector3>(ref vertices, nowVertexCount + partMesh.vertexCount);
                Array.Resize <Vector3>(ref normals, nowVertexCount + partMesh.vertexCount);

                Array.Resize <Vector2>(ref uvs, nowVertexCount + partMesh.vertexCount);

                Array.Resize <Vector2>(ref uv2s, nowVertexCount + partMesh.vertexCount);

//				if(partMesh.uv2.Length > 0){
//
//					Array.ConstrainedCopy(partMesh.uv2,0,uv2s,nowVertexCount,partMesh.vertexCount);
//				}

                Array.Resize <BoneWeight>(ref boneWeights, nowVertexCount + partMesh.vertexCount);

                Matrix4x4 mm = Matrix4x4.Scale(new Vector3(_partScales[i], _partScales[i], _partScales[i]));



                Matrix4x4 dummyBindposes = skinnedMeshRenderer.sharedMesh.bindposes[boneIndex].inverse * (dummy.transform.worldToLocalMatrix * dummy.transform.parent.localToWorldMatrix).inverse * mm;

                for (int m = 0; m < partMesh.vertexCount; m++)
                {
                    int index = m + nowVertexCount;

                    vertices[index] = dummyBindposes.MultiplyPoint3x4(partMesh.vertices[m]);

                    normals[index] = dummyBindposes.MultiplyVector(partMesh.normals[m]);

                    uvs[index] = new Vector2(partMesh.uv[m].x * COMBINE_PART_UV_FIX_ARR[uvFixIndex].x + COMBINE_PART_UV_FIX_ARR[uvFixIndex].y, partMesh.uv[m].y * COMBINE_PART_UV_FIX_ARR[uvFixIndex].z + COMBINE_PART_UV_FIX_ARR[uvFixIndex].w);

                    if (partMesh.uv2.Length == 0)
                    {
                        uv2s[index] = new Vector2(-1, 0);
                    }
                    else
                    {
                        uv2s[index] = new Vector2(-1, partMesh.uv2[m].y);
                    }

                    BoneWeight boneWeight = new BoneWeight();

                    boneWeight.boneIndex0 = boneIndex;

                    boneWeight.weight0 = 1;

                    boneWeights[index] = boneWeight;
                }

                int trianglesNum = triangles.Length;

                Array.Resize <int>(ref triangles, trianglesNum + partMesh.triangles.Length);

                for (int m = 0; m < partMesh.triangles.Length; m++)
                {
                    triangles[m + trianglesNum] = nowVertexCount + partMesh.triangles[m];
                }

                nowVertexCount = nowVertexCount + partMesh.vertexCount;
            }

            Mesh resultMesh = new Mesh();

            resultMesh.bindposes = oldMesh.bindposes;

            resultMesh.vertices = vertices;
            resultMesh.normals  = normals;
            resultMesh.uv       = uvs;
            resultMesh.uv2      = uv2s;

            resultMesh.triangles = triangles;

            resultMesh.boneWeights = boneWeights;

            skinnedMeshRenderer.sharedMesh = resultMesh;

            skinnedMeshRenderer.material.mainTexture = resultTexture;

//			skinnedMeshRenderer.material.SetInt ("_PartIndex", 1);
        }
        private static void AllLoadOK <T>(string _mainHandWeaponJoint, string _offHandWeaponJoint, float _weaponScale, float _horseScale, string[] _particleJoints, GameObject _hero, RuntimeAnimatorController _animatorController, GameObject _mainHandWeapon, GameObject _offHandWeapon, GameObject _horse, GameObject[] _particles, GameObject[] _mainHandWeaponParticles, GameObject[] _offHandWeaponParticles, GameObject _wing, Action <GameObject> _callBack, bool _addHeroControl, bool isDownHouse) where T : HeroController
        {
            Animator animator = _hero.GetComponent <Animator> ();

            if (animator.runtimeAnimatorController == null && _animatorController != null)
            {
                animator.runtimeAnimatorController = _animatorController;

                AnimatorFactory.Instance.AddUseNum(_animatorController);
            }

            if (_addHeroControl)
            {
                HeroController heroController = null;

                GameObject horseContainer = null;

                GameObject body = _hero.GetComponentInChildren <Renderer>().gameObject;

                HeroControllerDispatcher heroControllerDispatcher = _hero.GetComponent <HeroControllerDispatcher>();

                if (heroControllerDispatcher == null)
                {
                    _hero.AddComponent <HeroControllerDispatcher>();
                }

                if (_horse != null)
                {
                    horseContainer = new GameObject(_hero.name + "ma");

                    _horse.transform.SetParent(horseContainer.transform, false);

                    heroController = horseContainer.AddComponent <T> ();

                    heroController.horse = _horse.GetComponentInChildren <Renderer>().gameObject;

                    _horse.transform.localScale = new Vector3(_horseScale, _horseScale, _horseScale);

                    if (isDownHouse)
                    {
                        _hero.transform.localPosition = Vector3.zero;

                        _hero.transform.SetParent(horseContainer.transform, false);
                    }
                    else
                    {
                        GameObject bone = PublicTools.FindChild(_horse, HORSE_CHAIN_BONE_NAME);

                        bone.transform.localScale = new Vector3(1 / _horseScale, 1 / _horseScale, 1 / _horseScale);

                        _hero.transform.SetParent(bone.transform, true);

                        _hero.transform.localPosition = Vector3.zero;
                    }
                }
                else
                {
                    heroController = _hero.AddComponent <T> ();
                }

                heroController.body = body;

                if (_particles != null)
                {
                    for (int i = 0; i < _particles.Length; i++)
                    {
                        PublicTools.AddChild(_hero, _particles[i], _particleJoints[i]);
                    }

                    heroController.particles = _particles;
                }

                if (_mainHandWeapon != null)
                {
                    GameObject mainWeaponContainer = new GameObject();                    //为了让武器上的粒子配合武器进行缩放  所以添加了这个容器

                    mainWeaponContainer.name = "mainHandWeapon";

                    heroController.mainHandWeaponContainer = mainWeaponContainer;

                    mainWeaponContainer.transform.localScale = new Vector3(_weaponScale, _weaponScale, _weaponScale);

                    PublicTools.AddChild(_hero, mainWeaponContainer, _mainHandWeaponJoint);

                    if (!MERGE_WEAPON)
                    {
                        heroController.mainHandWeapon = _mainHandWeapon;

                        _mainHandWeapon.transform.SetParent(mainWeaponContainer.transform, false);
                    }

                    if (_mainHandWeaponParticles != null)
                    {
                        heroController.mainHandWeaponParticles = _mainHandWeaponParticles;

                        for (int i = 0; i < _mainHandWeaponParticles.Length; i++)
                        {
                            _mainHandWeaponParticles[i].transform.SetParent(mainWeaponContainer.transform, false);
                        }
                    }
                }

                if (_offHandWeapon != null)
                {
                    GameObject offWeaponContainer = new GameObject();                    //为了让武器上的粒子配合武器进行缩放  所以添加了这个容器

                    offWeaponContainer.name = "offHandWeapon";

                    heroController.offHandWeaponContainer = offWeaponContainer;

                    offWeaponContainer.transform.localScale = new Vector3(_weaponScale, _weaponScale, _weaponScale);

                    PublicTools.AddChild(_hero, offWeaponContainer, _offHandWeaponJoint);

                    if (!MERGE_WEAPON)
                    {
                        heroController.offHandWeapon = _offHandWeapon;

                        _offHandWeapon.transform.SetParent(offWeaponContainer.transform, false);
                    }

                    if (_offHandWeaponParticles != null)
                    {
                        heroController.offHandWeaponParticles = _offHandWeaponParticles;

                        for (int i = 0; i < _offHandWeaponParticles.Length; i++)
                        {
                            _offHandWeaponParticles[i].transform.SetParent(offWeaponContainer.transform, false);
                        }
                    }
                }

                if (_wing != null)
                {
                    GameObject heroDummy = PublicTools.FindChild(_hero, WING_DUMMY_NAME);
                    GameObject wingDummy = PublicTools.FindChild(_wing, WING_DUMMY_NAME);

                    _wing.transform.localPosition = (wingDummy.transform.worldToLocalMatrix * wingDummy.transform.parent.localToWorldMatrix).MultiplyPoint(_wing.transform.localPosition);

                    _wing.transform.SetParent(heroDummy.transform, false);

                    heroController.wing = _wing.GetComponentInChildren <Renderer>().gameObject;
                }

                heroController.Init();

                if (_horse != null)
                {
                    PublicTools.SetGameObjectVisible(horseContainer, true);

                    _callBack(horseContainer);
                }
                else
                {
                    PublicTools.SetGameObjectVisible(_hero, true);

                    _callBack(_hero);
                }
            }
            else
            {
                _callBack(_hero);
            }
        }