public override void Initialize() { base.Initialize(); if (m_characterInstance != null) { CharacterEditorWindow.DestroyImmediate(m_characterInstance); } m_characterInstance = null; if ((m_parent as CharacterEditorWindow) == null || CharacterEditorWindow.m_activeEntityData == null) { // Prevent null reference exception when the item list is selected by default or when the editor is closing but still // executes a render call. return; } if (LoadEntityClientAssets()) { m_characterInstance = CharacterEditorWindow.Instantiate(CharacterEditorWindow.m_clientEntityPrefab); GameObject cameraHolder = (m_parent as CharacterEditorWindow).m_cameraHolder; m_characterInstance.transform.SetParent(cameraHolder.transform); m_characterInstance.transform.position = new Vector3(0, 0, 0); m_animation = m_characterInstance.GetComponentInChildren <Animation>(); if (m_animation == null) { m_animator = m_characterInstance.GetComponentInChildren <Animator>(); } m_characterInstance.transform.rotation = Quaternion.Euler(0, 180, 0); InitializeClips(); (m_parent as CharacterEditorWindow).m_characterCamera.targetTexture = new RenderTexture(512, 512, 24, RenderTextureFormat.ARGB32); ResetCharacterPosition(); } m_playingAnimation = false; m_activeAnimationName = string.Empty; }
private void CreateCharacter(string folderPath, PrefabHolder holder) { folderPath = "Assets" + folderPath; // CLIENT PREFAB GameObject clientTemp = new GameObject(); GameObject modelClient = CharacterEditorWindow.Instantiate(m_characterModel); modelClient.name = m_characterName + " - Idle"; modelClient.transform.SetParent(clientTemp.transform); clientTemp.name = "Entity_" + m_characterName + "Client"; clientTemp.layer = LayerMask.NameToLayer("Entity"); clientTemp.AddComponent <EntityCanvas>(); clientTemp.AddComponent <EntityBehaviour>(); NetworkIdentity networkIdentity = clientTemp.GetComponent <NetworkIdentity>(); BoxCollider boxColliderClient = clientTemp.AddComponent <BoxCollider>(); boxColliderClient.center = new Vector3(0, 0.5f, 0); boxColliderClient.size = new Vector3(0.5f, 1, 0.5f); boxColliderClient.isTrigger = true; var selectedLogicType = m_entityTypesLogics[m_entityLogicChoice]; System.Type logicType = CharacterEditorWindow.GetType(selectedLogicType); Logic logic = clientTemp.AddComponent(logicType) as Logic; logic.SetMobaEntity(clientTemp); networkIdentity.localPlayerAuthority = logic.IsLocalPlayerAuthority(); EntityTransform modelTransform = modelClient.AddComponent <EntityTransform>(); modelTransform.EntityTransformType = EEntityTransform.Model; GameObject transformLeftHandGOClient = new GameObject(); transformLeftHandGOClient.name = "Transform_" + EEntityTransform.LeftHand; EntityTransform leftHandTransformClient = transformLeftHandGOClient.AddComponent <EntityTransform>(); leftHandTransformClient.EntityTransformType = EEntityTransform.LeftHand; GameObject transformRightHandGOClient = new GameObject(); transformRightHandGOClient.name = "Transform_" + EEntityTransform.RightHand; EntityTransform rightHandTransformClient = transformRightHandGOClient.AddComponent <EntityTransform>(); rightHandTransformClient.EntityTransformType = EEntityTransform.RightHand; GameObject transformCenterGOClient = new GameObject(); transformCenterGOClient.name = "Transform_" + EEntityTransform.Center; EntityTransform centerTransformClient = transformCenterGOClient.AddComponent <EntityTransform>(); centerTransformClient.EntityTransformType = EEntityTransform.Center; GameObject transformCanvasGOClient = new GameObject(); transformCanvasGOClient.name = "Transform_" + EEntityTransform.Head; EntityTransform canvasTransformClient = transformCanvasGOClient.AddComponent <EntityTransform>(); canvasTransformClient.EntityTransformType = EEntityTransform.Head; GameObject transformFloorGOClient = new GameObject(); transformFloorGOClient.name = "Transform_" + EEntityTransform.Floor; EntityTransform floorTransformClient = transformFloorGOClient.AddComponent <EntityTransform>(); floorTransformClient.EntityTransformType = EEntityTransform.Floor; GameObject transformSkyGOClient = new GameObject(); transformSkyGOClient.name = "Transform_" + EEntityTransform.Sky; EntityTransform skyTransformClient = transformSkyGOClient.AddComponent <EntityTransform>(); skyTransformClient.EntityTransformType = EEntityTransform.Sky; transformRightHandGOClient.transform.SetParent(clientTemp.transform); transformRightHandGOClient.transform.localPosition = new Vector3(0, 0.5f, 0.25f); transformLeftHandGOClient.transform.SetParent(clientTemp.transform); transformLeftHandGOClient.transform.localPosition = new Vector3(0, 0.5f, 0.25f); transformCenterGOClient.transform.SetParent(clientTemp.transform); transformCenterGOClient.transform.localPosition = new Vector3(0, 0.5f, 0); transformCanvasGOClient.transform.SetParent(clientTemp.transform); transformCanvasGOClient.transform.localPosition = new Vector3(0, 1.3f, 0); transformFloorGOClient.transform.SetParent(clientTemp.transform); transformSkyGOClient.transform.SetParent(clientTemp.transform); transformSkyGOClient.transform.localPosition = new Vector3(0, 5f, 0); Debug.Log("Create Client prefab at " + folderPath + "/" + clientTemp.name + ".prefab"); UnityEngine.Object emptyPrefab = PrefabUtility.CreateEmptyPrefab(folderPath + "/" + clientTemp.name + ".prefab"); GameObject clientPrefab = PrefabUtility.ReplacePrefab(clientTemp, emptyPrefab, ReplacePrefabOptions.ConnectToPrefab); CreateCharacterData(clientTemp.GetComponent <Logic>()); GameObject.DestroyImmediate(GameObject.Find(clientTemp.name)); // SERVER PREFAB GameObject serverTemp = new GameObject(); GameObject modelServer = CharacterEditorWindow.Instantiate(m_characterModel); modelServer.name = m_characterName + " - Idle"; modelServer.transform.SetParent(serverTemp.transform); serverTemp.name = "Entity_" + m_characterName; serverTemp.layer = LayerMask.NameToLayer("Entity"); serverTemp.AddComponent <EntityCanvas>(); serverTemp.AddComponent <EntityBehaviour>(); NetworkIdentity networkIdentityServer = serverTemp.GetComponent <NetworkIdentity>(); networkIdentityServer.localPlayerAuthority = true; BoxCollider boxColliderServer = serverTemp.AddComponent <BoxCollider>(); boxColliderServer.center = new Vector3(0, 0.5f, 0); boxColliderServer.size = new Vector3(0.5f, 1, 0.5f); boxColliderServer.isTrigger = true; Logic serverLogic = serverTemp.AddComponent(logicType) as Logic; serverLogic.SetMobaEntity(serverTemp); networkIdentityServer.localPlayerAuthority = serverLogic.IsLocalPlayerAuthority(); EntityTransform modelServerTransform = modelServer.AddComponent <EntityTransform>(); modelServerTransform.EntityTransformType = EEntityTransform.Model; GameObject transformLeftHandGOServer = new GameObject(); transformLeftHandGOServer.name = "Transform_" + EEntityTransform.LeftHand; EntityTransform leftHandTransformServer = transformLeftHandGOServer.AddComponent <EntityTransform>(); leftHandTransformServer.EntityTransformType = EEntityTransform.LeftHand; GameObject transformRightHandGOServer = new GameObject(); transformRightHandGOServer.name = "Transform_" + EEntityTransform.RightHand; EntityTransform rightHandTransformServer = transformRightHandGOServer.AddComponent <EntityTransform>(); rightHandTransformServer.EntityTransformType = EEntityTransform.RightHand; GameObject transformCenterGOServer = new GameObject(); transformCenterGOServer.name = "Transform_" + EEntityTransform.Center; EntityTransform centerTransformServer = transformCenterGOServer.AddComponent <EntityTransform>(); centerTransformServer.EntityTransformType = EEntityTransform.Center; GameObject transformCanvasGOServer = new GameObject(); transformCanvasGOServer.name = "Transform_" + EEntityTransform.Head; EntityTransform canvasTransformServer = transformCanvasGOServer.AddComponent <EntityTransform>(); canvasTransformServer.EntityTransformType = EEntityTransform.Head; GameObject transformFloorGOServer = new GameObject(); transformFloorGOServer.name = "Transform_" + EEntityTransform.Floor; EntityTransform floorTransformServer = transformFloorGOServer.AddComponent <EntityTransform>(); floorTransformServer.EntityTransformType = EEntityTransform.Floor; GameObject transformSkyGOServer = new GameObject(); transformSkyGOServer.name = "Transform_" + EEntityTransform.Sky; EntityTransform skyTransformServer = transformSkyGOServer.AddComponent <EntityTransform>(); skyTransformServer.EntityTransformType = EEntityTransform.Sky; transformRightHandGOServer.transform.SetParent(serverTemp.transform); transformRightHandGOServer.transform.localPosition = new Vector3(0, 0.5f, 0.25f); transformLeftHandGOServer.transform.SetParent(serverTemp.transform); transformLeftHandGOServer.transform.localPosition = new Vector3(0, 0.5f, 0.25f); transformCenterGOServer.transform.SetParent(serverTemp.transform); transformCenterGOServer.transform.localPosition = new Vector3(0, 0.5f, 0); transformCanvasGOServer.transform.SetParent(serverTemp.transform); transformCanvasGOServer.transform.localPosition = new Vector3(0, 1.3f, 0); transformFloorGOServer.transform.SetParent(serverTemp.transform); transformSkyGOServer.transform.SetParent(serverTemp.transform); transformSkyGOServer.transform.localPosition = new Vector3(0, 5f, 0); UnityEngine.Object emptyPrefabServer = PrefabUtility.CreateEmptyPrefab(folderPath + "/" + serverTemp.name + ".prefab"); GameObject serverPrefab = PrefabUtility.ReplacePrefab(serverTemp, emptyPrefabServer, ReplacePrefabOptions.ConnectToPrefab); GameObject.DestroyImmediate(GameObject.Find(serverTemp.name)); PoolData clientCharacterPoolData = new PoolData(); clientCharacterPoolData.m_quantity = 0; clientCharacterPoolData.m_register = false; clientCharacterPoolData.m_obj = clientPrefab; PoolData serverCharacterPoolData = new PoolData(); serverCharacterPoolData.m_quantity = 0; serverCharacterPoolData.m_register = true; serverCharacterPoolData.m_obj = serverPrefab; holder.m_poolDataList.Add(clientCharacterPoolData); holder.m_poolDataList.Add(serverCharacterPoolData); PrefabUtility.ReplacePrefab(SpawnManager.instance.gameObject, PrefabUtility.GetPrefabParent(SpawnManager.instance), ReplacePrefabOptions.ConnectToPrefab); }