--- //[[admin@puov2.gementar.com|Hilmi]] 2022/08/01 17:28// ====== Introduction Animancer ====== {{ :wiki:image_2022-08-02_012243942.png?nolink&600 |}} Instead of we use build in unity animation manager, we use Animancer to animate directly using script, This is easier and faster! ====== Introduction Easy Character Movement ====== {{ :wiki:image_2022-08-05_195923560.png?nolink&600 |}} By using ECM framework we can use their framework and tweak it as we wanted to ====== Scripts ====== using ECM.Common; using ECM.Controllers; using UnityEngine; public sealed class MyCharacterController : BaseCharacterController { public Transform playerCamera; public float customSpeedWalk = 3f; public float customSpeedRun = 10f; public void makeWalk() { speed = customSpeedWalk; } public void makeRun() { speed = customSpeedRun; } protected override void HandleInput() { // Handle your custom input here... moveDirection = new UnityEngine.Vector3 { x = Input.GetAxisRaw("Horizontal"), y = 0.0f, z = Input.GetAxisRaw("Vertical") }; if(!isJumping) jump = Input.GetButton("Jump"); //walk = Input.GetButton("Fire3"); // Transform moveDirection vector to be relative to camera view direction moveDirection = moveDirection.relativeTo(playerCamera); } } using System.Collections; using System.Collections.Generic; using UnityEngine; using DG.Tweening; using Sirenix.OdinInspector; public class ExploreCameraController : MonoBehaviour { public Transform mainCamera; public float xVal = 0; private float turnSpeed = 4; private Vector3 offsetX; public float height = 15f; public float distance = 12f; public float lookAtSensitivity = 0.3f; public float rotateSensitivity = 0.3f; public float mouseSensitive = 5; public float turnSpeedSensitivity = 0.05f; void Awake() { offsetX = new Vector3(0, height, distance); transform.DOMove(new Vector3((mainCamera.position + offsetX).x, height, (mainCamera.position + offsetX).z), rotateSensitivity); } [Button] void updateHeightDistance() { offsetX = new Vector3(0, height, distance); } //public float zVal = 0; // Update is called once per frame void LateUpdate() { this.transform.DOLookAt(mainCamera.position, lookAtSensitivity); //this.transform.DOMove(new Vector3(mainCamera.position.x + xVal, this.transform.position.y, mainCamera.position.z + -xVal), 1f); if (Input.GetKey(KeyCode.Mouse0)) { offsetX = Quaternion.AngleAxis(Input.GetAxis("Mouse X") * (turnSpeed * mouseSensitive), Vector3.up) * offsetX; } if (Input.GetKey(KeyCode.E)) { offsetX = Quaternion.AngleAxis(1 * (turnSpeed * turnSpeedSensitivity * Time.deltaTime), Vector3.up) * offsetX; } if (Input.GetKey(KeyCode.Q)) { offsetX = Quaternion.AngleAxis(-1 * (turnSpeed * turnSpeedSensitivity * Time.deltaTime), Vector3.up) * offsetX; } //transform.position = mainCamera.position + offsetX; transform.DOMove(new Vector3((mainCamera.position + offsetX).x, height, (mainCamera.position + offsetX).z), rotateSensitivity); } } using System.Collections; using System.Collections.Generic; using UnityEngine; using Animancer; using Animancer.Examples; using ECM.Controllers; public class CharacterAnimationController : MonoBehaviour { [SerializeField] private AnimancerComponent _Animancer; [SerializeField] private ClipTransition _Idle; [SerializeField] private ClipTransition _Move; [SerializeField] private ClipTransition _Run; [SerializeField] private ClipTransition _Action; private MyCharacterController myCharacterController; private void Start() { myCharacterController = FindObjectOfType(); } private void Update() { if (Input.GetKey(KeyCode.W) || Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.S) || Input.GetKey(KeyCode.D)) { _Animancer.Play(_Move); myCharacterController.makeWalk(); if (Input.GetKey(KeyCode.LeftShift)) { _Animancer.Play(_Run); myCharacterController.makeRun(); } } else { _Animancer.Play(_Idle); } } }