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

This is an old revision of the document!


Player Prototyping

NPC Prototyping

ZombieNpcMovingController Script

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DG.Tweening;
using Micosmo.SensorToolkit;
using Sirenix.OdinInspector;
 
public class ZombieNpcMovingController : MonoBehaviour
{
    public List<Transform> checkPoint;
    private int checkPointIndex = 0;
 
    private CharacterController _characterController;
    private ZombieAnimationController _zombieAnimationController;
 
    [BoxGroup("Movement Tweak")] [SerializeField] private float _walkSpeed = 1;
    [BoxGroup("Movement Tweak")] [SerializeField] private float _runSpeed = 3;
 
    private ISteeringSensor _steering;
    private SteeringSensor _steeringSensor;
 
 
    private void Start()
    {
        Initialization();
 
        _steeringSensor.Locomotion.MaxForwardSpeed = _walkSpeed;
    }
 
    private void Initialization()
    {
        _steering = GetComponentInChildren<ISteeringSensor>();
        _steeringSensor = GetComponentInChildren<SteeringSensor>();
        _characterController = GetComponent<CharacterController>();
        _zombieAnimationController = GetComponent<ZombieAnimationController>();
    }
 
    void Update()
    {
        MoveToCheckPoint();
    }
 
    private void MoveToCheckPoint()
    {
        if (_steering.IsDestinationReached)
        {
            int index = checkPointIndex == checkPoint.Count - 1 ? checkPointIndex = 0 : checkPointIndex += 1;
 
            _steering.Seek.DestinationTransform = checkPoint[index];
        }
    }
 
    [Button]
    public void MakeCharacterWalk()
    {
        _steeringSensor.Locomotion.MaxForwardSpeed = _walkSpeed;
    }
 
    [Button]
    public void MakeCharacterRunning()
    {
        _steeringSensor.Locomotion.MaxForwardSpeed = _runSpeed;
    }
 
    [Button]
    public void MakeCharacterPunch()
    {
        _zombieAnimationController.PlayAction(_zombieAnimationController.attack);
    }
}

ZombieAnimationController Script

using Animancer;
using Sirenix.OdinInspector;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
 
public class ZombieAnimationController : MonoBehaviour
{
    private AnimancerComponent _Animancer;
    [SerializeField] public ClipTransition idle;
    [SerializeField] public ClipTransition moveFoward;
    [SerializeField] public ClipTransition runFoward;
    [SerializeField] public ClipTransition attack;
    [SerializeField] private AvatarMask _baseBody;
    [SerializeField] private AvatarMask _upperBody;
 
    private AnimancerLayer _baseLayer;
    private AnimancerLayer _upperBodyLayer;
 
    //private CharacterController _characterController;
    private NavMeshAgent _navMeshAgent;
 
    private void Awake()
    {
        Initialization();
 
        InitializationAnim();
    }
 
    private void Initialization()
    {
        //_characterController = GetComponent<CharacterController>();
        _navMeshAgent = GetComponent<NavMeshAgent>();
        _Animancer = GetComponentInChildren<AnimancerComponent>();
    }
 
    private void InitializationAnim()
    {
        _baseLayer = _Animancer.Layers[0];
        _upperBodyLayer = _Animancer.Layers[1];
 
        _baseLayer.SetMask(_baseBody);
        _upperBodyLayer.SetMask(_upperBody);
        attack.Events.OnEnd = OnActionEnd;
    }
 
    private void Update()
    {
        //if(_characterController.velocity.magnitude > 1f)
        if (_navMeshAgent.velocity.magnitude > 1f)
        {
            _baseLayer.Play(moveFoward, 1f);
        }
 
        //if (_characterController.velocity.magnitude > 2f)
        if(_navMeshAgent.velocity.magnitude > 2f)
        {
            _baseLayer.Play(runFoward, 1f);
        }
    }
 
    bool _canBePlayed = true;
    public void PlayAction(ClipTransition clip)
    {
        if (!_canBePlayed) return;
 
        _upperBodyLayer.Play(clip);
 
        StartCoroutine(PlayActionDelay(clip.Clip.length));
    }
 
    private IEnumerator PlayActionDelay(float length)
    {
        _canBePlayed = false;
        yield return new WaitForSeconds(length);
        _canBePlayed = true;
    }
 
    private void OnActionEnd()
    {
        _upperBodyLayer.StartFade(0, 1f);
    }
}


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