Пример #1
0
    protected override IEnumerator OnSetupAvatar()
    {
        string resPath = null;

        int        roleKey    = PlayerData.roleType;
        RoleKeyCfg roleKeyCfg = roleKeyCfgLoader.GetConfig(roleKey);

        string skeletonName = roleKeyCfg.ShowBone;

        resPath = string.Format("models/skeleton_{0}.bundle", skeletonName);

        var request = AssetBundleManager.LoadAssetAsync(resPath, skeletonName + "_skeleton", typeof(GameObject));

        AutoUnloadAsset(request);
        yield return(request);

        if (request == null)
        {
            yield break;
        }

        GameObject prefab = request.GetAsset <GameObject>();

        Profiler.BeginSample("EntityInstantiate");
        playerSkeleton = Instantiate(prefab) as GameObject;
        Profiler.EndSample();

        OnBodyChange();

        SetAvatar(playerSkeleton);
    }
Пример #2
0
    private void OnBodyChange()
    {
        int        roleKey    = PlayerData.roleType;
        RoleKeyCfg roleKeyCfg = roleKeyCfgLoader.GetConfig(roleKey);

        string skinName = roleKeyCfg.BornBody;

        if (skinName == lastSkinName)
        {
            return;
        }

        lastSkinName = skinName;

        if (skinnedMeshRenderer == null)
        {
            skinnedMeshRenderer = playerSkeleton.AddComponent <SkinnedMeshRenderer>();
        }
        else
        {
            DestroyImmediate(skinnedMeshRenderer);
            skinnedMeshRenderer = playerSkeleton.AddComponent <SkinnedMeshRenderer>();
        }

        AnimatorUtility.DeoptimizeTransformHierarchy(playerSkeleton);

        string resPath = string.Format("models/skin_{0}.bundle", skinName);

        //添加个使用默认皮肤
        SkinnedMeshData skinData = null;

        skinData = AssetBundleManager.LoadAsset <SkinnedMeshData>(resPath, "skin_" + skinName);

        Transform[] bones = new Transform[skinData.bones.Length];

        Transform modelTrans = playerSkeleton.transform;

        for (int i = 0; i < skinData.bones.Length; i++)
        {
            var bonePath = skinData.bones[i];
            bones[i] = modelTrans.Find(bonePath);
            if (bones[i] == null)
            {
                Debug.LogWarningFormat("Can not find bone {0} on {1}", bonePath, skinName);
            }
        }

        skinnedMeshRenderer.bones           = bones;
        skinnedMeshRenderer.sharedMaterials = skinData.materials;
        skinnedMeshRenderer.sharedMesh      = skinData.mesh;

        AnimatorUtility.OptimizeTransformHierarchy(playerSkeleton, skinData.extraTransformNames);

        OnRendererChange();
    }
Пример #3
0
    protected override IEnumerator OnSetupController()
    {
        string resPath        = null;
        string controllerName = null;

        int        roleKey    = PlayerData.roleType;
        RoleKeyCfg roleKeyCfg = roleKeyCfgLoader.GetConfig(roleKey);

        if (roleKeyCfg != null)
        {
            string conroller = roleKeyCfg.Controller;
            resPath        = string.Format("controllers/{0}.bundle", conroller);
            controllerName = conroller;
        }

        var request = AssetBundleManager.LoadAssetAsync(resPath, controllerName, typeof(RuntimeAnimatorController));

        AutoUnloadAsset(request);
        yield return(request);

        var controller = request.GetAsset <RuntimeAnimatorController>();

        SetAnimatorController(controller);
    }
Пример #4
0
 private void OnReadRow(RoleKeyCfg row)
 {
     m_data[row.ID] = row;
 }