示例#1
0
    void OnEnable()
    {
        CharacterVariant variant = target as CharacterVariant;

        for (int i = 0; i < variant.Partitions.Count; i++)
        {
            string assetPath = PartitionAssetManager.Instance.GetAssetPath(variant.Partitions[i].AssetName);
            if (string.IsNullOrEmpty(assetPath))
            {
                continue;
            }
            PartitionInfo partition = variant.Partitions[i];
            partition.AssetObject = AssetDatabase.LoadAssetAtPath(assetPath, typeof(GameObject)) as GameObject;
            variant.Partitions[i] = partition;
            PartitionAssetManager.Instance.RegisterAssetObject(partition.AssetName, partition.AssetObject);

            CharacterPartitionLink link = partition.AssetObject.GetComponent <CharacterPartitionLink>();
            if (link != null)
            {
                for (int j = 0; j < link.LinkedPartitions.Count; j++)
                {
                    string linkedAssetPath = PartitionAssetManager.Instance.GetAssetPath(link.LinkedPartitions[j].AssetName);
                    if (string.IsNullOrEmpty(linkedAssetPath))
                    {
                        continue;
                    }
                    PartitionInfo linkedPartition = link.LinkedPartitions[j];
                    linkedPartition.AssetObject = AssetDatabase.LoadAssetAtPath(linkedAssetPath, typeof(GameObject)) as GameObject;
                    link.LinkedPartitions[j]    = linkedPartition;
                    PartitionAssetManager.Instance.RegisterAssetObject(linkedPartition.AssetName, linkedPartition.AssetObject);
                }
            }
        }
    }
示例#2
0
        public void Destroy()
        {
            ResetModel();
            CleanupMaterials();

            var helpers = mDMono.GetComponentsInChildren <MoveEditor.FXHelper>();

            for (int i = 0; i < helpers.Length; ++i)
            {
                helpers[i].StopAll(true);
            }
            if (_HeadBar != null)
            {
                _HeadBar.ClearBars();
            }

            CharacterVariant variant = mDMono.GetComponentInChildren <CharacterVariant>();

            if (variant != null)
            {
                variant.Recycle();
                PoolModel.DestroyModel(variant.gameObject);
            }

            GameObject.Destroy(mDMono.gameObject);

            if (enemyController.onDestroy != null)
            {
                enemyController.onDestroy(enemyController);
            }
        }
示例#3
0
        public void Destroy()
        {
            var helpers = mDMono.GetComponentsInChildren <MoveEditor.FXHelper>();

            if (helpers != null && helpers.Length > 0)
            {
                for (var i = 0; i < helpers.Length; i++)
                {
                    helpers[i].StopAll(true);
                }
            }

            PlayerDataLookupSet pdls = mDMono.transform.GetDataLookupILRComponentInChildren <PlayerDataLookupSet>("Hotfix_LT.UI.PlayerDataLookupSet", showErrorTips: false);

            if (pdls != null)
            {
                pdls.Destroy();
            }

            CharacterVariant variant = mDMono.GetComponentInChildren <CharacterVariant>();

            if (variant != null)
            {
                variant.Recycle();
                PoolModel.DestroyModel(variant.gameObject);
            }

            GameObject.Destroy(mDMono.gameObject);
        }
        public void EnsurePositiveCharacterVariantCount_NonPositiveCount_ThrowsArgumentException()
        {
            // Arrange
            var characters = new Dictionary <CharacterVariant, string>();
            var passwordGeneratorHelper = new PasswordGeneratorHelper(characters);
            var characterVariants       = new CharacterVariant[] { };

            // Assert
            Assert.Throws <ArgumentException>(() => passwordGeneratorHelper.EnsurePositiveCharacterVariantCount(characterVariants));
        }
示例#5
0
        public void ChangeArenaModel(string Tid, int skin = 0, bool ChangeModel = false)
        {
            try
            {
                if (ChangeModel)
                {
                    ResetModel();
                    _HeadBar = null;
                    CharacterVariant CV = mDMono.transform.GetComponentInChildren <CharacterVariant>();
                    if (CV != null && GameEngine.Instance != null)
                    {
                        SetObjLayer(CV.CharacterInstance, GameEngine.Instance.defaultLayer);
                        CV.Recycle();
                        PoolModel.DestroyModel(CV.gameObject);
                    }
                    MoveEditor.FXHelper FH = mDMono.transform.GetComponentInChildren <MoveEditor.FXHelper>();
                    if (FH != null)
                    {
                        FH.StopAll(true);
                    }
                    if (enemyController.SkinnedRigPrefab != null)
                    {
                        PoolModel.DestroyModel(enemyController.SkinnedRigPrefab);
                    }

                    string classname   = null;
                    string characterid = CharacterTemplateManager.Instance.TemplateidToCharacterid(Tid);
                    var    charTpl     = CharacterTemplateManager.Instance.GetHeroInfo(characterid, skin);
                    classname = charTpl.model_name;//需添加皮肤
                    if (string.IsNullOrEmpty(classname))
                    {
                        EB.Debug.LogError("OnViewIdAllocated: classname not found for tid = {0}", Tid);
                        return;
                    }
                    enemyController.CharacterModel = CharacterCatalog.Instance.GetModel(classname);

                    OnSpawnFun();

                    Role = _role;
                    SceneLogic scene     = MainLandLogic.GetInstance();
                    string     sceneName = scene.CurrentSceneName;
                    SetNpcName(sceneName);
                }
            }
            catch (System.Exception e)
            {
                EB.Debug.LogError(e.StackTrace);
            }
        }
示例#6
0
        private MoveController InitModel(GameObject variantObj)
        {
            CharacterVariant variant = variantObj.GetComponent <CharacterVariant>();

            variant.InstantiateCharacter();
            UnityEngine.GameObject character = variant.CharacterInstance;
            character.transform.SetParent(variant.transform);
            character.transform.localScale    = UnityEngine.Vector3.one * 0.2f;
            character.transform.localRotation = UnityEngine.Quaternion.Euler(0, 90, -40);
            character.transform.localPosition = Vector3.zero;
            SetObjLayer(variantObj, GameEngine.Instance.ui3dLayer);
            MoveController mc = character.GetComponent <MoveController>();

            return(mc);
        }
示例#7
0
        public IEnumerator PostSkin(string localPeerId, Character c, CharacterVariant cv, Texture2D texture)
        {
            byte[] imageData = texture.EncodeToPNG();
            string skin      = Convert.ToBase64String(imageData);

            WWWForm body = new WWWForm();

            body.AddField("action", "Add");
            body.AddField("char", c.ToString());
            body.AddField("charVar", cv.ToString());
            body.AddField("skin", skin);

            UnityWebRequest www = UnityWebRequest.Post(serverUrl + "?ID=" + localPeerId, body);

            yield return(www.SendWebRequest());
        }
示例#8
0
        //public override void OnEnable()
        //{
        //	RegisterMonoUpdater();
        //}

        public void DestroyCharacter()
        {
            if (m_Character != null)
            {
                if (!ShouldSetMipMapBias)
                {
                    UpdateMipMapBias(m_Avatar, 0.0f);
                }

                MoveEditor.FXHelper fxHelper = m_Character.GetComponent <MoveEditor.FXHelper>();
                if (fxHelper != null)
                {
                    fxHelper.StopAll(true);
                    //if (PSPoolManager.Instance != null)
                    //{
                    //    PSPoolManager.Instance.Update();
                    //}
                }

                CharacterVariant variant = m_CharacterContainer.GetComponentInChildren <CharacterVariant>();
                if (variant != null && GameEngine.Instance != null)
                {
                    SetObjLayer(variant.CharacterInstance, GameEngine.Instance.defaultLayer);
                    variant.Recycle();
                    PoolModel.DestroyModel(variant.gameObject);
                }

                m_Character = null;
            }

            /*
             * if (!string.IsNullOrEmpty(m_VariantName))
             * {
             *  if (PoolModel != null)
             *  {
             *      PoolModel.RemoveResource(variantPath, false);
             *  }
             *
             *  m_VariantName = null;
             * }
             */
            m_Loading = false;
        }
示例#9
0
    public override void OnInspectorGUI()
    {
        base.OnInspectorGUI();
        GUILayout.Space(8);
        m_ScrollPosition = GUILayout.BeginScrollView(m_ScrollPosition);
        CharacterVariant variant = target as CharacterVariant;

        variant.PreviewTransform  = EditorGUILayout.TextField("Preview Transform", variant.PreviewTransform);
        variant.RootBoneTransform = EditorGUILayout.TextField("RootBone Transform", variant.RootBoneTransform);
        variant.IsPlayer          = EditorGUILayout.Toggle("Is Player", variant.IsPlayer);
        variant.MoveSetPrefab     = EditorGUILayout.ObjectField("Move Set Prefab", variant.MoveSetPrefab, typeof(GameObject), false) as GameObject;
        if (GUILayout.Button("Preview Character"))
        {
            variant.PreviewCharacter();
        }
        DrawPartitionList();

        GUILayout.EndScrollView();
    }
示例#10
0
    void DrawPartition(int index, ref bool delete)
    {
        CharacterVariant variant  = target as CharacterVariant;
        string           prefsKey = string.Format("CharacterVariant_Partition_{0}", index);
        bool             view     = EditorPrefs.GetBool(prefsKey, true);

        PartitionInfo partition = variant.Partitions[index];

        GUILayout.BeginHorizontal();
        {
            GUILayout.Space(12);
            view = EditorGUILayout.Foldout(view, partition.Name);

            if (GUILayout.Button("X", GUILayout.Width(20)))
            {
                delete = true;
            }
        }
        GUILayout.EndHorizontal();
        EditorPrefs.SetBool(prefsKey, view);

        if (view)
        {
            partition.Name = EditorGUILayout.TextField("Name", partition.Name);
            GUILayout.BeginHorizontal();
            {
                GUI.enabled         = false;
                partition.AssetName = EditorGUILayout.TextField("Asset Name", partition.AssetName);
                GUI.enabled         = true;

                partition.AssetObject = EditorGUILayout.ObjectField(partition.AssetObject, typeof(GameObject), false, GUILayout.Width(160)) as GameObject;
                if (partition.AssetObject != null)
                {
                    partition.AssetName = partition.AssetObject.name;
                }
            }
            GUILayout.EndHorizontal();
            variant.Partitions[index] = partition;
        }
    }
示例#11
0
        private void InitModel(GameObject variantObj)
        {
            variantObj.transform.SetParent(mDMono.transform, false);
            variantObj.transform.localScale    = Vector3.one;
            variantObj.transform.localRotation = Quaternion.identity;
            CharacterVariant variant = variantObj.GetComponent <CharacterVariant>();

            variant.InstantiateCharacter();

            GameObject character = variant.CharacterInstance;

            character.transform.parent        = variant.transform;
            character.transform.localScale    = ModelScale;
            character.transform.localRotation = Quaternion.Euler(ModelRotation);
            character.transform.localPosition = ModelPosition;

            MoveController mc = character.GetComponent <MoveController>();

            if (mc != null)
            {
                mc.enabled = false;
                mc.enabled = true;
                System.Action fn = () => {
                    mc.TransitionTo(MoveController.CombatantMoveState.kEntry);
                    needToTransitionToIdle = true;
                };
                if (!mc.IsInitialized)
                {
                    mc.RegisterInitSuccCallBack(fn);
                }
                else
                {
                    fn();
                }
            }
            StartCoroutine(SetParticleOrder(character));
            SetObjLayer(variantObj, 28);
        }
示例#12
0
        private void OnSpawnFun(int spawnAnimationIndex = -1, bool playEffect = false, System.Action callback = null)
        {
            enemyController.SpawnLocation = mDMono.transform.position;
            EB.Assets.LoadAsync(enemyController.CharacterModel.ResourcePrefabNameMain, typeof(GameObject), (obj) =>
            {
                GameObject variantObj       = GameObject.Instantiate(obj, mDMono.transform.position, Quaternion.identity) as GameObject;
                variantObj.transform.parent = mDMono.transform;
                CharacterVariant variant    = variantObj.GetComponent <CharacterVariant>();
                variant.InstantiateCharacter();
                enemyController.SkinnedRigPrefab                         = variant.CharacterInstance;
                enemyController.SkinnedRigPrefab.name                    = enemyController.CharacterModel.ResourcePrefabNameMain + "_Character";
                enemyController.SkinnedRigPrefab.tag                     = "CharacterMesh";
                enemyController.SkinnedRigPrefab.transform.parent        = mDMono.transform;
                enemyController.SkinnedRigPrefab.transform.localRotation = Quaternion.identity;
                enemyController.SkinnedRigPrefab.transform.localPosition = Vector3.zero;
                _renderer = enemyController.SkinnedRigPrefab.GetComponentInChildren <Renderer>();

                // Create our death material just once
                if (enemyController.CharacterModel.resourceDirectory == eResourceDirectory.Enemies)
                {
                    if (!_renderer.sharedMaterial.shader.name.EndsWith("-Alpha"))
                    {
                        string alphaShaderName = _renderer.sharedMaterial.shader.name + "-Alpha";
                        Shader alphaShader     = Shader.Find(alphaShaderName);
                        if (alphaShader != null)
                        {
                            // Cache the original, unmodified material
                            _originalMaterial = _renderer.sharedMaterial;

                            // Cache a material copy (this will make a new instance of the shader material)
                            _deathMaterial = _renderer.material;

                            _renderer.material = _originalMaterial;

                            // Set the new shader and keywords on the material copy
                            _deathMaterial.shader         = alphaShader;
                            _deathMaterial.shaderKeywords = new string[] { "ALPHA_ON" };
                            _deathMaterial.shaderKeywords = new string[] { "DEATH_ON" };
                        }
                    }
                    else
                    {
                        DebugSystem.Log("Material's shader is set to -Alpha version.\nMaterial's shader may not be set correctly in source or not set back to original value from pool.{0}EnemyController{1}", enemyController.CharacterModel.prefabName, LogType.Warning);
                    }
                }

                CombatController combatController = mDMono.GetComponent <CombatController>();
                combatController.Initialize(enemyController.SkinnedRigPrefab.transform, enemyController.CharacterModel, 1 << LayerMask.NameToLayer("Player"));
                enemyController.CharacterComponent.OnSpawn(enemyController.CharacterModel, enemyController.SkinnedRigPrefab, spawnAnimationIndex, playEffect);

                //回收后再打开组件检测
                if (enemyController.SkinnedRigPrefab != null)
                {
                    monoArray = enemyController.SkinnedRigPrefab.GetComponents <MonoBehaviour>();
                    for (int i = 0; i < monoArray.Length; i++)
                    {
                        if (monoArray[i] != null && !monoArray[i].enabled)
                        {
                            monoArray[i].enabled = true;
                        }
                    }
                    Animator mAnimator = enemyController.SkinnedRigPrefab.GetComponent <Animator>();
                    if (mAnimator != null && !mAnimator.enabled)
                    {
                        mAnimator.enabled = true;
                    }
                }

                //NPC名字
                _HeadBar = enemyController.SkinnedRigPrefab.GetMonoILRComponent <HeadBars2D>(false);
                if (_HeadBar == null && enemyController.SkinnedRigPrefab.transform.parent.name.CompareTo("EnemySpawns_11") != 0) //主城的世界Boss不需要创建
                {
                    _HeadBar = enemyController.SkinnedRigPrefab.AddMonoILRComponent <HeadBars2D>("Hotfix_LT.UI.HeadBars2D");
                }
//                if (_fsm != null)
//                {
//                    _fsm.Fsm.Stop();
//                    _fsm.Reset();
//                    _fsm.SetFsmTemplate(enemyController.CharacterModel.AITrigger);
//                    _fsm.Fsm.Start();
//                }

                _bestTarget = null;

                if (enemyController.CharacterModel.team == eTeamId.Interactable)
                {
                    enemyController.CharacterComponent.UseAdvancedLocomotionAnimation = true;
                }
                else
                {
                    enemyController.CharacterComponent.UseAdvancedLocomotionAnimation = false;
                }

                callback?.Invoke();
            });
        }
示例#13
0
        private void CreatCharacterAsync()
        {
            if (character != null || m_Loading)
            {
                if (m_VariantName == CharacterVariantTemplate)
                {
                    EB.Debug.Log("already loaded variant {0}", CharacterVariantTemplate);
                    return;
                }
                else
                {
                    EB.Debug.Log("destroy last instance {0}", m_VariantName);
                    DestroyCharacter();
                }
            }

            if (string.IsNullOrEmpty(CharacterVariantTemplate))
            {
                return;
            }

            m_Loading     = true;
            m_VariantName = CharacterVariantTemplate;

            var    listener     = this;
            string variant_name = m_VariantName;
            string prefab_path  = variantPath;

            PoolModel.GetModelAsync(prefab_path, Vector3.zero, Quaternion.identity, delegate(Object obj, object param)
            {
                GameObject variantObj = obj as GameObject;
                if (variantObj == null)
                {
                    EB.Debug.LogError("UIBuddy3DModelCreater.CreatCharacter: No Resources for {0}", prefab_path);
                    return;
                }

                if (listener == null)
                {
                    EB.Debug.LogWarning("UIBuddy3DModelCreater.CreatCharacter: creator already destroyed");
                    PoolModel.DestroyModel(variantObj);
                    return;
                }

                if (variant_name != m_VariantName)
                {
                    EB.Debug.LogWarning("UIBuddy3DModelCreater.CreatCharacter: resource not match");
                    PoolModel.DestroyModel(variantObj);
                    return;
                }

                if (m_Character != null)
                {
                    EB.Debug.LogWarning("UIBuddy3DModelCreater.CreatCharacter: character set");
                    PoolModel.DestroyModel(variantObj);
                    return;
                }

                if (!m_Loading)
                {
                    EB.Debug.LogWarning("UIBuddy3DModelCreater.CreatCharacter: load canceled");
                    PoolModel.DestroyModel(variantObj);
                    return;
                }

                // everything is ok
                m_Loading = false;

                variantObj.transform.SetParent(m_CharacterContainer.transform);
                CharacterVariant variant = variantObj.GetComponent <CharacterVariant>();

                if (variant != null)
                {
                    variant.SyncLoad = true;

                    if (m_Partitions == null)
                    {
                        variant.InstantiateCharacter();
                    }
                    else
                    {
                        variant.InstantiateCharacter(m_Partitions);
                    }

                    m_Character = variant.CharacterInstance;
                }

                if (m_Character != null)
                {
                    m_Character.transform.SetParent(m_CharacterContainer.transform);
                    m_Character.transform.localScale    = modelScale;
                    m_Character.transform.localRotation = Quaternion.identity;
                    m_Character.transform.localPosition = Vector3.zero;
                    SetObjLayer(m_Character, m_CharacterContainer.gameObject.layer);
                    //StartCoroutine(SetParticleScaleMode(m_Character));
                    m_Avatar = m_Character.GetComponent <AvatarComponent>();
                    SetNeedToTransitionToIdle(m_Character, true);
                    //StartCoroutine(ScaleOutLine(m_Avatar)); //by pj 异步 开启协程判断
                }

                ShouldSetMipMapBias = true;

                if (mDMono.gameObject.activeInHierarchy)// && HuDState.IsLTLegionFBHudOpen)
                {
                    if (m_Coroutine != null)
                    {
                        StopCoroutine(m_Coroutine);
                        m_Coroutine = null;
                    }
                    m_Coroutine = StartCoroutine(SetMaterial());
                }
            }, null);
        }
示例#14
0
        public void ChangeModel(string modelName, bool firstCreate, float scale = 1)
        {
            if (playerController == null)
            {
                EB.Debug.LogWarning("playerController is null");
                return;
            }

            if (playerController.CharacterModel != null && playerController.CharacterModel.ResourcePrefabNameMain.IndexOf(modelName) >= 0)
            {
                EB.Debug.LogWarning("ChangeModel: Aready Exist model={0}", modelName);
                return;
            }

            if (_HeadBar != null)
            {
                _HeadBar.ClearBars();
                _HeadBar = null;
            }

            try
            {
                CharacterVariant    CV = mDMono.transform.GetComponentInChildren <CharacterVariant>();
                MoveEditor.FXHelper FH = mDMono.transform.GetComponentInChildren <MoveEditor.FXHelper>();

                if (FH != null)
                {
                    FH.StopAll(true);
                }

                if (CV != null && GameEngine.Instance != null)
                {
                    SetObjLayer(CV.CharacterInstance, GameEngine.Instance.defaultLayer);
                    CV.Recycle();
                    PoolModel.DestroyModel(CV.gameObject);
                }

                if (playerController.SkinnedRigPrefab != null)
                {
                    PoolModel.DestroyModel(playerController.SkinnedRigPrefab);
                }
                ///
                playerController.Gender         = eGender.Male;
                playerController.CharacterModel = CharacterCatalog.Instance.GetModel(modelName);
                string prefabName = playerController.CharacterModel.PrefabNameFromGenderMain(playerController.Gender);
                PoolModel.GetModelAsync(prefabName, mDMono.transform.position, Quaternion.identity, (o, prm) =>
                {
                    var variantObj = o as GameObject;
                    variantObj.transform.SetParent(mDMono.transform);
                    variantObj.transform.localPosition = Vector3.zero;

                    CharacterVariant variant = variantObj.GetComponent <CharacterVariant>();
                    variant.SyncLoad         = true;
                    IDictionary partions     = GetPartitionsData(LoginManager.Instance.LocalUserId.Value);
                    variant.InstantiateCharacter(partions);
                    InitDataLookupSet();

                    playerController.SkinnedRigPrefab      = variant.CharacterInstance;
                    playerController.SkinnedRigPrefab.name = prefabName + "_Character";
                    playerController.SkinnedRigPrefab.tag  = "CharacterMesh";
                    playerController.SkinnedRigPrefab.transform.SetParent(mDMono.transform);
                    playerController.SkinnedRigPrefab.transform.localRotation = Quaternion.identity;
                    playerController.SkinnedRigPrefab.transform.localScale    = new Vector3(scale, scale, scale);
                    _combatController = mDMono.GetComponent <CombatController>();
                    _combatController.Initialize(playerController.SkinnedRigPrefab.transform, playerController.CharacterModel, 1 << LayerMask.NameToLayer("Enemy"));

                    playerController.CharacterComponent = mDMono.GetComponent <CharacterComponent>();
                    playerController.CharacterComponent.OnSpawn(playerController.CharacterModel, playerController.SkinnedRigPrefab, -1, false);

                    _HeadBar = playerController.SkinnedRigPrefab.GetMonoILRComponent <HeadBars2D>(false);
                    if (_HeadBar == null)
                    {
                        _HeadBar = playerController.SkinnedRigPrefab.AddMonoILRComponent <HeadBars2D>("Hotfix_LT.UI.HeadBars2D");
                    }

                    if (mDMono.GetComponent <Collider>() != null && mDMono.GetComponent <Collider>() is BoxCollider)
                    {
                        BoxCollider box = mDMono.GetComponent <Collider>() as BoxCollider;
                        box.size        = new Vector3(1.5f, 1.5f, 1.5f) + new Vector3(0, playerController.CharacterModel.heightOffset, 0);
                        box.center      = new Vector3(0, box.size.y / 2.0f, 0);
                    }

                    _muzzle = GameUtils.SearchHierarchyForBone(playerController.SkinnedRigPrefab.transform, "muzzle");
                    if (null == _muzzle)
                    {
                        _muzzle = mDMono.transform;
                    }

                    if (firstCreate)
                    {
                        LevelOwnerComponent.AssignLevelOwner(mDMono.gameObject); // this must be called after PlayerManager.RegisterPlayerController(this);
                    }
                    _avatar             = playerController.SkinnedRigPrefab.GetComponent <AvatarComponent>();
                    _shouldSetHideColor = !PerformanceManager.Instance.CurrentEnvironmentInfo.slowDevice;

                    if (!firstCreate)
                    {
                        PlayerDataLookupSet PDLS = playerController.SkinnedRigPrefab.transform.GetDataLookupILRComponent <PlayerDataLookupSet>();
                        if (PDLS != null)
                        {
                            PDLS.UserId = playerController.playerUid;
                        }
                    }

                    MoveController mc = playerController.SkinnedRigPrefab.GetComponent <MoveController>();
                    if (mDMono != null && mDMono.GetComponent <CharacterComponent>().State != eCampaignCharacterState.Idle)
                    {
                        mc.TransitionTo(MoveController.CombatantMoveState.kLocomotion);
                    }
                }, null);
            }
            catch (System.NullReferenceException e)
            {
                EB.Debug.LogError(e.ToString());
            }
        }
示例#15
0
        /// <summary>
        /// ATTENTION: 已改为异步,待观察是否有问题
        /// </summary>
        /// <param name="characterClass"></param>
        /// <param name="userid"></param>
        /// <param name="size"></param>
        public void CreateOtherPlayer(string characterClass, long userid, float size)
        {
            try
            {
                playerController.Gender         = eGender.Male;
                playerController.CharacterModel = CharacterCatalog.Instance.GetModel(characterClass);
                string      prefabName = playerController.CharacterModel.PrefabNameFromGenderMain(playerController.Gender);
                IDictionary partions   = GetPartitionsData(userid);
                PoolModel.GetModelAsync(prefabName, mDMono.transform.position, Quaternion.identity, (o, prm) =>
                {
                    var variantObj = o as GameObject;
                    variantObj.transform.SetParent(mDMono.transform);
                    variantObj.transform.localPosition = Vector3.zero;

                    CharacterVariant variant = variantObj.GetComponent <CharacterVariant>();
                    variant.InstantiateCharacter(partions);

                    playerController.SkinnedRigPrefab = variant.CharacterInstance;
                    if (playerController.SkinnedRigPrefab == null)
                    {
                        EB.Debug.LogError("SkinnedRigPrefab is NULL");
                        return;
                    }

                    #region 其他玩家的一些设置After Create
                    //SkinnedRigPrefab = PoolModel.GetNext(prefabName, transform.position, Quaternion.identity) as GameObject;
                    //_skinnedRigPrefabInstance = Instantiate(EB.Assets.Load(prefabName), transform.position, Quaternion.identity) as GameObject;
                    playerController.SkinnedRigPrefab.name = prefabName + "_Character";
                    playerController.SkinnedRigPrefab.tag  = "CharacterMesh";
                    playerController.SkinnedRigPrefab.transform.SetParent(mDMono.transform);
                    playerController.SkinnedRigPrefab.transform.localRotation = Quaternion.identity;
                    playerController.SkinnedRigPrefab.transform.localScale    = new Vector3(size, size, size);

                    // only enable once we have our skinned rig prefab instance resolved
                    _combatController = mDMono.GetComponent <CombatController>();
                    _combatController.Initialize(playerController.SkinnedRigPrefab.transform, playerController.CharacterModel, 1 << LayerMask.NameToLayer("Enemy"));

                    playerController.CharacterComponent = mDMono.GetComponent <CharacterComponent>();
                    playerController.CharacterComponent.OnSpawn(playerController.CharacterModel, playerController.SkinnedRigPrefab, -1, false);
                    //bool isUseCharacterRecord = (_viewRPC == null || _viewRPC.isMine);
                    //CharacterRecord characterRecord = null;
                    //NPC名字
                    _HeadBar = playerController.SkinnedRigPrefab.GetMonoILRComponent <HeadBars2D>(false);
                    if (_HeadBar == null)
                    {
                        _HeadBar = playerController.SkinnedRigPrefab.AddMonoILRComponent <HeadBars2D>("Hotfix_LT.UI.HeadBars2D");
                    }
                    if (mDMono.GetComponent <Collider>() != null && mDMono.GetComponent <Collider>() is BoxCollider)
                    {
                        BoxCollider box = mDMono.GetComponent <Collider>() as BoxCollider;
                        box.size        = new Vector3(1.5f, 1.5f, 1.5f) + new Vector3(0, playerController.CharacterModel.heightOffset, 0);
                        box.center      = new Vector3(0, box.size.y / 2.0f, 0);
                    }
                    //if (isUseCharacterRecord)
                    //{
                    //	characterRecord = CharacterManager.Instance.CurrentCharacter;
                    //}
                    _muzzle = GameUtils.SearchHierarchyForBone(playerController.SkinnedRigPrefab.transform, "muzzle");
                    if (null == _muzzle)
                    {
                        _muzzle = mDMono.transform;
                    }

                    //ToDo:看起来无用,暂时屏蔽
                    //PlayMakerGlobals.Instance.Variables.FindFsmGameObject("Player" + (_initialPlayerIndex + 1)).Value =mDMono . gameObject;
                    #endregion
                }, null);
            }
            catch (System.NullReferenceException e)
            {
                EB.Debug.LogError(e.ToString());
            }
        }
示例#16
0
    void DrawPartitionList()
    {
        CharacterVariant variant = target as CharacterVariant;

        if (NGUIEditorTools.DrawHeader(string.Format("Partition List ({0})", variant.Partitions.Count), "CharacterVariant_Partitions"))
        {
            NGUIEditorTools.BeginContents();
            {
                bool delete = false;
                for (int i = 0; i < variant.Partitions.Count; i++)
                {
                    if (i > 0)
                    {
                        GUILayout.Space(5);
                    }


                    NGUIEditorTools.BeginContents();
                    {
                        DrawPartition(i, ref delete);
                    }
                    NGUIEditorTools.EndContents();

                    if (delete)
                    {
                        variant.Partitions.RemoveAt(i);
                        break;
                    }
                }

                if (GUILayout.Button("Add New Partition"))
                {
                    PartitionInfo newPartition = new PartitionInfo();
                    int           count        = 1;
                    string        name         = string.Format("Partition_{0}", count);
                    while (true)
                    {
                        bool nameExisted = false;
                        foreach (PartitionInfo partition in variant.Partitions)
                        {
                            if (partition.Name == name)
                            {
                                nameExisted = true;
                                break;
                            }
                        }
                        if (nameExisted)
                        {
                            count++;
                            name = string.Format("Partition_{0}", count);
                        }
                        else
                        {
                            break;
                        }
                    }

                    newPartition.Name = name;
                    variant.Partitions.Add(newPartition);
                }
            }
            NGUIEditorTools.EndContents();
        }
    }