private void Awake() { ragdollRigidbodies = GetComponentsInChildren <Rigidbody>(); allColliders.AddRange(GetComponentsInChildren <Collider>()); m_AudioManager = GetComponent <CharacterAudioManager>(); m_CurrentHealth = m_MaxHealth; GlobalEvents.AddEvent("Damage", Damage); GlobalEvents.AddEvent("Restart", RespawnCharacter); GlobalEvents.AddEvent("RestoreHealth", RestoreHealth); DisableRagdoll(); }
protected virtual void AddAbilities() { if (character.GetComponent <DiasGames.ThirdPersonSystem.AnimatorManager>() == null) { Undo.AddComponent <DiasGames.ThirdPersonSystem.AnimatorManager>(character); } if (character.GetComponent <DiasGames.ThirdPersonSystem.UnityInputManager>() == null) { Undo.AddComponent <DiasGames.ThirdPersonSystem.UnityInputManager>(character); } FreeLocomotion m_FreeLocomotion = character.GetComponent <FreeLocomotion>(); if (m_FreeLocomotion == null) { m_FreeLocomotion = Undo.AddComponent <FreeLocomotion>(character); SerializedObject locomotion = new SerializedObject(m_FreeLocomotion); locomotion.FindProperty("m_IdlePhysicMaterial").objectReferenceValue = groundFriction; locomotion.FindProperty("m_AbilityPhysicMaterial").objectReferenceValue = zeroFriction; locomotion.ApplyModifiedProperties(); } Strafe m_Strafe = character.GetComponent <Strafe>(); if (m_Strafe == null) { m_Strafe = Undo.AddComponent <Strafe>(character); SerializedObject strafe = new SerializedObject(m_Strafe); strafe.FindProperty("m_IdleFriction").objectReferenceValue = groundFriction; strafe.FindProperty("m_AbilityPhysicMaterial").objectReferenceValue = zeroFriction; strafe.ApplyModifiedProperties(); } DiasGames.ThirdPersonSystem.JumpAbility m_Jump = character.GetComponent <DiasGames.ThirdPersonSystem.JumpAbility>(); if (m_Jump == null) { m_Jump = Undo.AddComponent <DiasGames.ThirdPersonSystem.JumpAbility>(character); m_Jump.AbilityPhysicMaterial = zeroFriction; AudioClip jumpClip = AssetDatabase.LoadAssetAtPath <AudioClip>("Assets/Dias Games/Third Person System/Audio/male_jump.wav"); CharacterAudioManager manager = character.GetComponent <CharacterAudioManager>(); if (manager != null) { if (m_Jump.OnEnterAbilityEvent == null) { m_Jump.OnEnterAbilityEvent = new UnityEvent(); } UnityEventTools.AddObjectPersistentListener(m_Jump.OnEnterAbilityEvent, manager.PlayVoiceSound, jumpClip); } } DiasGames.ThirdPersonSystem.FallAbility m_Fall = character.GetComponent <DiasGames.ThirdPersonSystem.FallAbility>(); if (m_Fall == null) { m_Fall = Undo.AddComponent <DiasGames.ThirdPersonSystem.FallAbility>(character); m_Fall.AbilityPhysicMaterial = zeroFriction; } DiasGames.ThirdPersonSystem.RollAbility m_Roll = character.GetComponent <DiasGames.ThirdPersonSystem.RollAbility>(); if (m_Roll == null) { m_Roll = Undo.AddComponent <DiasGames.ThirdPersonSystem.RollAbility>(character); } DiasGames.ThirdPersonSystem.CrouchAbility m_Crouch = character.GetComponent <DiasGames.ThirdPersonSystem.CrouchAbility>(); if (m_Crouch == null) { m_Crouch = Undo.AddComponent <DiasGames.ThirdPersonSystem.CrouchAbility>(character); } m_Crouch.AbilityPhysicMaterial = groundFriction; CrawlAbility m_Crawl = character.GetComponent <CrawlAbility>(); if (m_Crawl == null) { m_Crawl = Undo.AddComponent <CrawlAbility>(character); } m_Crawl.AbilityPhysicMaterial = groundFriction; // -------------------------- SET IGNORE ABILITIES ---------------------------------- // // Strafe AddIgnoreAbility(m_Strafe, m_FreeLocomotion); // Jump AddIgnoreAbility(m_Jump, m_FreeLocomotion); AddIgnoreAbility(m_Jump, m_Strafe); // Roll AddIgnoreAbility(m_Roll, m_FreeLocomotion); AddIgnoreAbility(m_Roll, m_Strafe); AddIgnoreAbility(m_Roll, m_Crouch); //Crouch AddIgnoreAbility(m_Crouch, m_FreeLocomotion); AddIgnoreAbility(m_Crouch, m_Strafe); AddIgnoreAbility(m_Crouch, m_Crawl); //Crawl AddIgnoreAbility(m_Crawl, m_FreeLocomotion); AddIgnoreAbility(m_Crawl, m_Strafe); AddIgnoreAbility(m_Crawl, m_Crouch); // -------------------------------------------------------------------------------- // }
public virtual void BuildCharacter() { zeroFriction = AssetDatabase.LoadAssetAtPath <PhysicMaterial>("Assets/Dias Games/Third Person System/Physics Materials/ZeroFriction.physicMaterial"); groundFriction = AssetDatabase.LoadAssetAtPath <PhysicMaterial>("Assets/Dias Games/Third Person System/Physics Materials/GroundFriction.physicMaterial"); #region Set Tag and Layer character.tag = "Player"; character.layer = 15; #endregion #region Animator Builder m_Animator = character.GetComponent <Animator>(); if (m_Animator == null) { m_Animator = Undo.AddComponent <Animator>(character); } m_Animator.updateMode = AnimatorUpdateMode.AnimatePhysics; m_Animator.cullingMode = AnimatorCullingMode.AlwaysAnimate; m_Animator.runtimeAnimatorController = AssetDatabase.LoadAssetAtPath <RuntimeAnimatorController>(m_AnimatorPath); #endregion #region Rigidbody Builder Rigidbody m_Rigidbody = character.GetComponent <Rigidbody>(); if (m_Rigidbody == null) { m_Rigidbody = Undo.AddComponent <Rigidbody>(character); } m_Rigidbody.angularDrag = 0; m_Rigidbody.constraints = RigidbodyConstraints.FreezeRotation; #endregion #region Capsule Collider Builder CapsuleCollider m_Capsule = character.GetComponent <CapsuleCollider>(); if (m_Capsule == null) { m_Capsule = Undo.AddComponent <CapsuleCollider>(character); } m_Capsule.radius = 0.3f; m_Capsule.height = CharacterHeight; m_Capsule.center = new Vector3(0, m_Capsule.height * 0.5f, 0); m_Capsule.material = zeroFriction; #endregion #region Audio Builder CharacterAudioManager audio = character.GetComponent <CharacterAudioManager>(); if (audio == null) { audio = Undo.AddComponent <CharacterAudioManager>(character); GameObject effectSource = new GameObject("Effect Audio Source"); effectSource.transform.parent = character.transform; effectSource.transform.localPosition = Vector3.zero; // Create audio sources on character AudioSource voice = Undo.AddComponent <AudioSource>(m_Animator.GetBoneTransform(HumanBodyBones.Head).gameObject); AudioSource effect = Undo.AddComponent <AudioSource>(effectSource); SerializedObject audioManager = new SerializedObject(audio); audioManager.FindProperty("m_VoiceSource").objectReferenceValue = voice; audioManager.FindProperty("m_EffectSource").objectReferenceValue = effect; audioManager.ApplyModifiedProperties(); } #endregion #region Create Character Component ThirdPersonSystem m_Controller = character.GetComponent <ThirdPersonSystem>(); if (m_Controller == null) { m_Controller = Undo.AddComponent <ThirdPersonSystem>(character); } m_Controller.GroundMask = (1 << 0) | (1 << 14) | (1 << 16) | (1 << 17) | (1 << 18) | (1 << 19) | (1 << 20) | (1 << 25) | (1 << 26); ModifierManager modifierManager = character.GetComponent <ModifierManager>(); if (modifierManager == null) { modifierManager = Undo.AddComponent <ModifierManager>(character); } system = new SerializedObject(m_Controller); modifier = new SerializedObject(modifierManager); #endregion // Camera Track if (character.transform.Find("Camera Track Pos") == null) { GameObject track = new GameObject("Camera Track Pos"); Undo.RegisterCreatedObjectUndo(track, "Camera Track Pos"); track.transform.parent = character.transform; track.transform.localPosition = Vector3.up * 1.5f; } AddAbilities(); AddModifiers(); }