--- //[[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);
}
}
}