lerp works on (-6.5/y/z) but not on (+6.5/y/z)
for some reason my lerped transformation of my local position works on the one side (left[negative x-axis]) but not on the right side(positive-x-axis)
the target vector gets defined through as it should on both sides, as well as everything else except for the lerp!!! works fine without lerp.
I really don't get the problem and have no idea for a workaround, so please help! even with a workaround! If I switch from local- to worldposition I still got the same problem just the other way around!
using UnityEngine;
using System.Collections;
public class wallrun : MonoBehaviour {
public float currentxposition;
public Rigidbody rb;
public float xposition = 0f;
bool endwallrun = false;
public bool jumponwall = false;
public float newlane;
float ywallrun;
public Vector3 targetposition;
// Use this for initialization
void Start () {
}
public void unlockZaxis()
{
rb.constraints = RigidbodyConstraints.None;
newlane = 0;
}
public void resetlane()
{
float yposition = gameObject.transform.localPosition.y;
float zposition = gameObject.transform.localPosition.z;
transform.localPosition = new Vector3(xposition, yposition, zposition);
}
public void jumpOffWall()
{
endwallrun = false;
Invoke("unlockZaxis",0f);
}
public void WallrunRight()
{
endwallrun = true;
xposition = gameObject.transform.localPosition.x; // sets "xposition" to the current lane-position
float zposition = gameObject.transform.localPosition.z; // maintain position while switching lanes
float yposition = gameObject.transform.localPosition.y; // maintain height while switching lanes
ywallrun = yposition + 2.5f;
Ray ray = new Ray(transform.position, transform.right);
RaycastHit hit;
if (Physics.Raycast(ray, out hit, 3) && Physics.Raycast(ray, out hit, 2) == false)
{
jumponwall = true;
newlane = xposition + 1.5f;
}
else if (Physics.Raycast(ray, out hit, 2))
{
;
}
endwallrun = false;
}
public void WallrunLeft()
{
endwallrun = true;
xposition = gameObject.transform.localPosition.x; // sets "xposition" to the current lane-position
float zposition = gameObject.transform.localPosition.z; // maintain position while switching lanes
float yposition = gameObject.transform.localPosition.y; // maintain height while switching lanes
ywallrun = yposition + 2.5f;
Ray ray = new Ray(transform.position, -transform.right);
RaycastHit hit;
if (Physics.Raycast(ray, out hit, 3) && Physics.Raycast(ray, out hit, 2) == false)
{
jumponwall = true;
newlane = xposition - 1.5f;
}
else if (Physics.Raycast(ray, out hit, 2))
{
;
}
endwallrun = false;
}
// Update is called once per frame
void Update () {
if(jumponwall==true)
{
currentxposition = gameObject.transform.localPosition.x;
float currentzposition = gameObject.transform.localPosition.z;
float currentyposition = gameObject.transform.localPosition.y;
targetposition = new Vector3(newlane, ywallrun, currentzposition);
transform.localPosition = Vector3.Lerp(transform.localPosition, targetposition, Time.deltaTime * 2);
rb.constraints = RigidbodyConstraints.FreezePositionY| RigidbodyConstraints.FreezeRotationZ;
if (currentxposition<newlane + 0.5f|| currentxposition < newlane - 0.5f )
{
//newlane = 0;
jumponwall = false;
}
Invoke("unlockZaxis", 4f);
Invoke("resetlane", 4.25f);
}
}
}
the project is a onrail-runner with parcour elements ;)
Your answer
Follow this Question
Related Questions
Why does this script loop and glitch? 1 Answer
SImple, but how do I check a game object's position in an If statement? 1 Answer
Having some issues with camera position 1 Answer
How do I move a game object only on the x axis with arrow keys? 1 Answer
Trying to transform my character's local position on a GetKey. 0 Answers