Welcome to GEMENTAR TOUR PUO V2 Development Documentation. Enjoy your stay!

Hilmi 2022/08/01 17:28

Introduction Animancer

Animancer?

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

ECM?

By using ECM framework we can use their framework and tweak it as we wanted to

Scripts

MyCharacterController derived by BaseCharacterController, Here are where we adjust ECM code.

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

ExploreCameraController, we control our camera here.

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

We use script to assign animation into our character.

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<MyCharacterController>();
    }
 
    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);
        }
    }
}


QR Code
QR Code wiki:character_setup (generated for current page)
Hello World!
DokuWiki with monobook... rules!