blob: b6c7e54f0977085169c1dd5d0421bcf6df69b8ad (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
using Pathfinding.RVO;
using UnityEngine;
using UnityEngine.Events;
public class SimpleWalk : MonoBehaviour
{
public RVOController rvo;
public Transform animationRoot;
public float bounceHeight = 0.5f;
public AnimationCurve bounceCurve;
public float bounceSpeed = 1f;
private float bounceClock;
private float clockDelta;
private float velocitySqrtDeadzone = 0.15f;
[HideInInspector]
public UnityEvent onGroundContact = new UnityEvent();
private float lastGroundContactTimeStamp;
private Vector3 initialRootPos;
private void Start()
{
initialRootPos = animationRoot.localPosition;
bounceClock = Random.value;
}
private void Update()
{
if (rvo.velocity.sqrMagnitude > velocitySqrtDeadzone)
{
clockDelta = Time.deltaTime * bounceSpeed;
bounceClock += clockDelta;
animationRoot.transform.localPosition = Vector3.Lerp(initialRootPos, initialRootPos + Vector3.up * bounceHeight, bounceCurve.Evaluate(bounceClock));
if (bounceClock % 1f <= clockDelta && Mathf.Abs(bounceClock - lastGroundContactTimeStamp) > 0.5f)
{
lastGroundContactTimeStamp = bounceClock;
onGroundContact.Invoke();
}
}
else
{
animationRoot.transform.localPosition = initialRootPos;
bounceClock = 0f;
}
}
}
|