using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class DetectCollision : MonoBehaviour
{
public Transform player;
public Transform target;
public bool turnOnOffPlayerAnimator = false;
float timeElapsed = 0;
float lerpDuration = 3;
float startValue = 1;
float endValue = 0;
float valueToLerp = 0;
private Animator playerAnimator;
private bool entered = false;
private bool prevFacing = false;
private Rigidbody rigidbody;
private bool stopped = false;
// Start is called before the first frame update
void Start()
{
rigidbody = player.GetComponent<Rigidbody>();
playerAnimator = player.GetComponent<Animator>();
if (turnOnOffPlayerAnimator)
playerAnimator.enabled = false;
}
// Update is called once per frame
void Update()
{
var currFacing = IsFacing(target);
if (currFacing != prevFacing)
{
// here you switched from facing to not facing or vise verca.
timeElapsed = 0;
}
prevFacing = currFacing;
var distance = Vector3.Distance(player.position, target.position);
if (IsFacing(target))
{
if (entered && distance > 30)
{
if (timeElapsed < lerpDuration)
{
valueToLerp = Mathf.Lerp(startValue, endValue, timeElapsed / lerpDuration);
playerAnimator.SetFloat("Forward", valueToLerp);
timeElapsed += Time.deltaTime;
}
playerAnimator.SetFloat("Forward", valueToLerp);
valueToLerp = 0;
}
}
else
{
if (valueToLerp < 0.9f)
{
if (timeElapsed < lerpDuration)
{
valueToLerp = Mathf.Lerp(endValue, startValue, timeElapsed / lerpDuration);
playerAnimator.SetFloat("Forward", valueToLerp);
timeElapsed += Time.deltaTime;
}
playerAnimator.SetFloat("Forward", valueToLerp);
}
Mathf.Lerp(valueToLerp, 0, Time.deltaTime * 0.0001f);
}
if(turnOnOffPlayerAnimator)
{
playerAnimator.enabled = false;
}
else
{
playerAnimator.enabled = true;
}
}
private void OnTriggerEnter(Collider other)
{
entered = true;
Debug.Log("Entered !");
}
private void OnTriggerExit(Collider other)
{
entered = false;
Debug.Log("Exited !");
}
private bool IsFacing(Transform target)
{
Vector3 forward = player.TransformDirection(Vector3.forward);
Vector3 toTarget = target.position - player.position;
return Vector3.Dot(forward, toTarget) > 0;
}
}
I tried first 0.1f but it didn't change the lerp speed.
I want that if the player is pressing the W key and moving the player forward and then stop pressing the key W it will smooth slow will lerp to 0. and it does but I also wanted to control the lerp speed.
I want that when the player is starting moving backward direction if the player leave the W key the player should stop slowly to 0. This should be the line :
Mathf.Lerp(valueToLerp, 0, Time.deltaTime * 0.0001f);
but the Time.deltaTime does not seems to affect the lerp at all. the lerp is working fine I just wanted to control the lerping speed too.