45 lines
1.8 KiB
C#
45 lines
1.8 KiB
C#
using UnityEngine;
|
|
|
|
namespace DitzelGames.FastIK
|
|
{
|
|
class SampleProcedualAnimation : MonoBehaviour
|
|
{
|
|
public Transform[] FootTarget;
|
|
public Transform LookTarget;
|
|
public Transform HandTarget;
|
|
public Transform HandPole;
|
|
public Transform Step;
|
|
public Transform Attraction;
|
|
|
|
public void LateUpdate()
|
|
{
|
|
//move step & attraction
|
|
Step.Translate(Vector3.forward * Time.deltaTime * 0.7f);
|
|
if (Step.position.z > 1f)
|
|
Step.position = Step.position + Vector3.forward * -2f;
|
|
Attraction.Translate(Vector3.forward * Time.deltaTime * 0.5f);
|
|
if (Attraction.position.z > 1f)
|
|
Attraction.position = Attraction.position + Vector3.forward * -2f;
|
|
|
|
//footsteps
|
|
for(int i = 0; i < FootTarget.Length; i++)
|
|
{
|
|
var foot = FootTarget[i];
|
|
var ray = new Ray(foot.transform.position + Vector3.up * 0.5f, Vector3.down);
|
|
var hitInfo = new RaycastHit();
|
|
if(Physics.SphereCast(ray, 0.05f, out hitInfo, 0.50f))
|
|
foot.position = hitInfo.point + Vector3.up * 0.05f;
|
|
}
|
|
|
|
//hand and look
|
|
var normDist = Mathf.Clamp((Vector3.Distance(LookTarget.position, Attraction.position) - 0.3f) / 1f, 0, 1);
|
|
HandTarget.rotation = Quaternion.Lerp(Quaternion.Euler(90, 0, 0), HandTarget.rotation, normDist);
|
|
HandTarget.position = Vector3.Lerp(Attraction.position, HandTarget.position, normDist);
|
|
HandPole.position = Vector3.Lerp(HandTarget.position + Vector3.down * 2, HandTarget.position + Vector3.forward * 2f, normDist);
|
|
LookTarget.position = Vector3.Lerp(Attraction.position, LookTarget.position, normDist);
|
|
|
|
|
|
}
|
|
|
|
}
|
|
}
|