예제 #1
0
    public void LoadCharactor(int id)
    {
        posMng       = GetComponent <PoseStatusDebug>();
        owner        = GetComponent <MeteorUnitDebug>();
        CharacterIdx = id;
        Skin         = new GameObject();
        Skin.transform.SetParent(transform);
        Skin.transform.localRotation = Quaternion.identity;
        Skin.transform.localScale    = Vector3.one;
        Skin.transform.localPosition = Vector3.zero;
        SkcFile skc = SkcLoader.Instance.Load(id);
        BncFile bnc = BncLoader.Instance.Load(id);

        Skin.name        = skc.Skin;
        rend             = Skin.AddComponent <SkinnedMeshRenderer>();
        rend.localBounds = skc.mesh.bounds;
        rend.materials   = skc.Material(id, owner.Camp);
        rend.sharedMesh  = skc.mesh;
        rend.sharedMesh.RecalculateBounds();
        bo    = new List <Transform>();
        dummy = new List <Transform>();
        List <Matrix4x4> bindPos = new List <Matrix4x4>();

        bnc.GenerateBone(transform, ref bo, ref dummy, ref bindPos, ref rootBone);
        rend.bones = bo.ToArray();
        rend.sharedMesh.bindposes = bindPos.ToArray();
        rend.rootBone             = rootBone;
        RootPos  = rootBone.localPosition;
        RootQuat = rootBone.localRotation;
        AmbLoader.Ins.LoadCharacterAmb(id);
        LoadBoxDef(id);
    }
예제 #2
0
    public void LoadCharactor(int id)
    {
        owner = GetComponent <Entity>();

        CharacterIndex = id;
        Skin           = new GameObject();
        Skin.transform.SetParent(transform);
        Skin.transform.localRotation = Quaternion.identity;
        Skin.transform.localScale    = Vector3.one;
        Skin.transform.localPosition = Vector3.zero;

        //load skin
        SkcFile skc = SkcLoader.Instance.Load(id);

        Skin.name = skc.Skin;
        rend      = Skin.AddComponent <SkinnedMeshRenderer>();
        BncFile bnc = BncLoader.Instance.Load(id);

        rend.localBounds = skc.mesh.bounds;
        rend.materials   = skc.Material(id);
        rend.sharedMesh  = skc.mesh;
        rend.sharedMesh.RecalculateBounds();

        bone  = new List <Transform>();
        dummy = new List <Transform>();

        List <Matrix4x4> bindPos = new List <Matrix4x4>();

        if (owner.IsHero)
        {
            Skin.layer = LayerMask.NameToLayer("LocalPlayer");
        }
        else
        {
            Skin.layer = LayerMask.NameToLayer("Monster");
        }

        bnc.GenerateBone(transform, ref bone, ref dummy, ref bindPos, ref rootBone);

        rend.bones = bone.ToArray();
        rend.sharedMesh.bindposes = bindPos.ToArray();
        rend.rootBone             = rootBone;
        rootPosition = rootBone.localPosition;
        rootQuat     = rootBone.localRotation;

        AmbLoader.Ins.LoadCharacterAmb(id);
        AmbLoader.Ins.LoadCharacterAmb();
        LoadBoxDef(id);
    }
예제 #3
0
    public SkcFile Load(string file)
    {
        if (SkcFile.ContainsKey(file))
        {
            return(SkcFile[file]);
        }
        SkcFile f = new SkcFile();

        f.Load(file);
        if (f.error)
        {
            return(null);
        }
        SkcFile[file] = f;
        return(f);
    }
    public void LoadCharactor(int id)
    {
        owner        = GetComponent <MeteorUnit>();
        posMng       = owner.posMng;
        CharacterIdx = id;
        Skin         = new GameObject();
        Skin.transform.SetParent(transform);
        Skin.transform.localRotation = Quaternion.identity;
        Skin.transform.localScale    = Vector3.one;
        Skin.transform.localPosition = Vector3.zero;
        SkcFile skc = SkcLoader.Instance.Load(id);
        BncFile bnc = BncLoader.Instance.Load(id);

        Skin.name        = skc.Skin;
        rend             = Skin.AddComponent <SkinnedMeshRenderer>();
        rend.localBounds = skc.mesh.bounds;
        rend.materials   = skc.Material(id, owner.Camp);
        rend.sharedMesh  = skc.mesh;
        rend.sharedMesh.RecalculateBounds();
        bo    = new List <Transform>();
        dummy = new List <Transform>();
        List <Matrix4x4> bindPos = new List <Matrix4x4>();

        if (owner.Attr.IsPlayer)
        {
            Skin.layer = LayerMask.NameToLayer("LocalPlayer");
        }
        else
        {
            Skin.layer = LayerMask.NameToLayer("Monster");
        }

        bnc.GenerateBone(transform, ref bo, ref dummy, ref bindPos, ref rootBone);
        WsGlobal.SetObjectLayer(gameObject, Skin.layer);
        rend.bones = bo.ToArray();
        rend.sharedMesh.bindposes = bindPos.ToArray();
        rend.rootBone             = rootBone;
        RootPos  = rootBone.localPosition;
        RootQuat = rootBone.localRotation;
        AmbLoader.Ins.LoadCharacterAmb(id);
        //GenerateBounds(skc.mesh, bo);
        LoadBoxDef(id);
    }
예제 #5
0
    }                                           //当前动作特效,用于飞镖/飞轮的挂点查询
    public void LoadCharactor(int id, Transform Tri)
    {
        Target = Tri;
        Owner  = Target.GetComponent <MeteorUnit>();
        posMng = Owner.ActionMgr;
        Skin   = new GameObject();
        Skin.transform.SetParent(Target);
        Skin.transform.localRotation = Quaternion.identity;
        Skin.transform.localScale    = Vector3.one;
        Skin.transform.localPosition = Vector3.zero;
        SkcFile skc = SkcLoader.Ins.Load(id);
        BncFile bnc = BncLoader.Ins.Load(id);

        Skin.name          = skc.Skin;
        render             = Skin.AddComponent <SkinnedMeshRenderer>();
        render.localBounds = skc.mesh.bounds;
        render.materials   = skc.Material(id, Owner.Camp);
        //这个方式无法分别子网格
        //if (Owner.Attr.IsPlayer) {
        //    for (int i = 0; i < render.materials.Length; i++) {
        //        render.materials[i].shader = Shader.Find("MainPlayer");
        //    }
        //}
        render.sharedMesh = skc.mesh;
        render.sharedMesh.RecalculateBounds();
        bo    = new List <Transform>();
        dummy = new List <Transform>();
        List <Matrix4x4> bindPos = new List <Matrix4x4>();

        Skin.layer = LayerManager.Player;
        bnc.GenerateBone(Target, ref bo, ref dummy, ref bindPos, ref rootBone);
        //Utility.SetObjectLayer(Target.gameObject, Skin.layer);
        render.bones = bo.ToArray();
        render.sharedMesh.bindposes = bindPos.ToArray();
        render.rootBone             = rootBone;
        RootPos  = rootBone.localPosition;
        RootQuat = rootBone.localRotation;
        AmbLoader.Ins.LoadCharacterAmb(id);
        //GenerateBounds(skc.mesh, bo);
        LoadBoxDef(id);
    }
예제 #6
0
파일: SKCLoader.cs 프로젝트: WeeirJoe/Joe
 //0-19内的材质是3个,20-27的是单个
 public Material[] Material(int roleIdx, EUnitCamp camp)
 {
     if (roleIdx >= CombatData.Ins.MaxModel)
     {
         Material[] ret = new Material[materials.Length];
         for (int i = 0; i < materials.Length; i++)
         {
             ret[i] = new Material(ShaderMng.Find("AlphaTexture"));
             ret[i].SetTexture("_MainTex", SkcFile.GetTexrtureFromPlugin(roleIdx, materials[i].Texture));
         }
         return(ret);
     }
     else
     {
         if (GamePool.Instance != null && GamePool.Instance.SkcMng != null)
         {
             return(GamePool.Instance.SkcMng.GetPlayerMat(roleIdx, camp));
         }
         return(null);
     }
 }
예제 #7
0
        public ManifestDiff GetManifestDiff(Manifest other)
        {
            var ret = new ManifestDiff();

            if (SkcVersion != other.SkcVersion)
            {
                ret.NewVersion = SkcVersion;
                ret.OldVersion = other.SkcVersion;
            }
            if (SkcFile != other.SkcFile)
            {
                ret.NewVersion = SkcFile.ToString();
                ret.OldVersion = other.SkcFile == null ? "" : other.SkcFile.ToString();
            }
            if (DefinedSymbols != other.DefinedSymbols)
            {
                ret.NewDefines = DefinedSymbols;
                ret.OldDefines = other.DefinedSymbols;
            }

            var sourceDiffs = new CollectionDiff <ManifestFile>(SourceFiles, other.SourceFiles);

            ret.AddedSourceFilenames = sourceDiffs.NewItems.ToList();
            if (ret.AddedSourceFilenames.Count == 0)
            {
                ret.AddedSourceFilenames = null;
            }
            ret.RemovedSourceFilenames = sourceDiffs.RemovedItems.ToList();
            if (ret.RemovedSourceFilenames.Count == 0)
            {
                ret.RemovedSourceFilenames = null;
            }

            var contentDiffs = new CollectionDiff <ManifestFile>(ExternalFiles, other.ExternalFiles);

            ret.AddedExternalFiles = contentDiffs.NewItems.ToList();
            if (ret.AddedExternalFiles.Count == 0)
            {
                ret.AddedExternalFiles = null;
            }
            ret.RemovedExternalFiles = contentDiffs.RemovedItems.ToList();
            if (ret.RemovedExternalFiles.Count == 0)
            {
                ret.RemovedExternalFiles = null;
            }

            //var contentDiffs = new CollectionDiff<ManifestFile>(ContentFiles, other.ContentFiles);
            //ret.AddedContentFiles = contentDiffs.NewItems.ToList();
            //if (ret.AddedContentFiles.Count == 0)
            //    ret.AddedContentFiles = null;
            //ret.RemovedContentFiles = contentDiffs.RemovedItems.ToList();
            //if (ret.RemovedContentFiles.Count == 0)
            //    ret.RemovedContentFiles = null;

            var referenceDiffs = new CollectionDiff <ManifestFile>(ReferencedFiles, other.ReferencedFiles);

            ret.AddedReferences = referenceDiffs.NewItems.ToList();
            if (ret.AddedReferences.Count == 0)
            {
                ret.AddedReferences = null;
            }
            ret.RemovedReferences = referenceDiffs.RemovedItems.ToList();
            if (ret.RemovedReferences.Count == 0)
            {
                ret.RemovedReferences = null;
            }

            //var outputFileDiff = new CollectionDiff<string>(this.OutputFiles, other.OutputFiles);
            //ret.NewOutputFiles = referenceDiffs.NewItems.ToList();
            //if (ret.NewOutputFiles.Count == 0)
            //    ret.NewOutputFiles = null;
            //ret.OldOutputFiles = referenceDiffs.RemovedItems.ToList();
            //if (ret.OldOutputFiles.Count == 0)
            //    ret.OldOutputFiles = null;
            return(ret);
        }
예제 #8
0
    //0-19内的材质是3个,20-27的是单个
    public Material[] Material(int roleIdx, EUnitCamp camp)
    {
        if (roleIdx >= Main.Ins.CombatData.MaxModel)
        {
            Material[] ret = new Material[materials.Length];
            for (int i = 0; i < materials.Length; i++)
            {
                ret[i] = new Material(ShaderMng.Find("AlphaTexture"));
                ret[i].SetTexture("_MainTex", SkcFile.GetTexrtureFromPlugin(roleIdx, materials[i].Texture));
                ret[i].SetColor("_Color", materials[i].Diffuse);
            }
            return(ret);
        }
        else
        {
            if (GamePool.Instance != null && GamePool.Instance.SkcMng != null)
            {
                return(GamePool.Instance.SkcMng.GetPlayerMat(roleIdx, camp));
            }
            //使用预先设置好的材质球,降低DC和Batch
            Material[] ret        = new Material[materials.Length];
            string     strTexture = "";
            string     strIndex   = "";
            //if (camp == EUnitCamp.EUC_KILLALL)
            //    strIndex = "01";
            //if (camp == EUnitCamp.EUC_FRIEND)
            strIndex = "01"; //非联机模式,只有1皮肤
                             //else
                             //strIndex = "01";
                             //else if (camp == EUnitCamp.EUC_ENEMY)
                             //    strIndex = "03";

            for (int i = 0; i < materials.Length; i++)
            {
                //if (materials[i].TwoSide)
                //    ret[i] = new Material(Shader.Find("Shader Forge/DoubleSideTexture"));
                //else
                ret[i] = new Material(ShaderMng.Find("AlphaTexture"));
                //根据阵营决定贴图序号
                if (roleIdx > 19)
                {
                    ret[i].SetTexture("_MainTex", Resources.Load <Texture>(materials[i].Texture));
                }
                else
                {
                    string[] str = materials[i].Texture.Split('b');
                    if (str.Length == 2)
                    {
                        strTexture = str[0] + "b" + strIndex;
                    }
                    else
                    {
                        strTexture = materials[i].Texture;
                    }
                    ret[i].SetTexture("_MainTex", Resources.Load <Texture>(strTexture));
                }
                ret[i].SetColor("_Color", materials[i].Diffuse);
            }
            return(ret);
        }
    }