- Home /
My vector3 lerp is not working properly
(C#)Hi, I am trying to move a camera (SecCamera) with a button , this script already works but que movement is not smooth. The object coordinates changues in 1 frame. I get the coordinates from a scriptable object, the object that should move is the SecCamera. I am using OnMouseDown because the button is attached to a 3d object and this was the only way to recognize the clicks.
public GameObject modelSelection;
public GameObject modelWalk;
public Camera MainCamera;
public Camera SecCamera;
public GameObject targetObject;
public float speed = 10;
bool camera_move_enabled = false;
public camXYZ[] cardCoord;
public Button button;
void OnMouseDown()
{
MainCamera.enabled = false;
SecCamera.enabled = true;
modelWalk.SetActive(true);
modelSelection.SetActive(false);
Debug.Log("button has been clicked");
Invoke("firstMove1", 1);
}
void firstMove1()
{
SecCamera.transform.position = Vector3.Lerp(SecCamera.transform.position, cardCoord[0].getCoord, Time.deltaTime * speed);//to absolute position
Debug.Log("Card Coord:" + cardCoord[0].getCoord);
Debug.Log("Cam Coord:" + SecCamera.transform.localPosition);
camera_move_enabled = true;
}
Answer by WarmedxMints · Sep 30, 2019 at 06:42 PM
Vector3.Lerp returns a position between two vectors at the point of t so needs to be called multiple times.
You could achieve this with a coroutine in your case.
private void OnMouseDown()
{
MainCamera.enabled = false;
SecCamera.enabled = true;
modelWalk.SetActive(true);
modelSelection.SetActive(false);
Debug.Log("button has been clicked");
StartCoroutine(FirstMove1(SecCamera.transform, speed));
}
private IEnumerator FirstMove1(Transform transformToMove, float duration)
{
var startPos = SecCamera.transform.position;
var endPos = cardCoord[0].getCoord;
var t = 0;
while (t <= 1)
{
transformToMove.position = Vector3.Lerp(startPos, endPos, t);//to absolute position
t += Time.deltaTime / duration;
Debug.Log("Card Coord:" + cardCoord[0].getCoord);
Debug.Log("Cam Coord:" + SecCamera.transform.localPosition);
camera_move_enabled = true;
yield return null;
}
transformToMove.position = endPos;
}
Hi, i got an error , in the part: private IEnumerator First$$anonymous$$ove1(Transform transformTo$$anonymous$$ove, float duration), First$$anonymous$$ove1 is underlined in red. The console returns: Not all code paths return a value.
Hi @Warmedx$$anonymous$$ints, i've found that this part of the code (modelSelection.SetActive(false)) is attached to an object that contains the 3d button. So this is preventing the camera movement. I have solved my problem. TY
Your answer
Follow this Question
Related Questions
Camera Moves or Player Moves for SideScroller 1 Answer
Everything is choppy... How can I make object movement more fluid? 3 Answers
Camera-based movement is acting wonky 0 Answers
Why does this IF statement loop without finishing? 0 Answers
How do I add a camera bounce effect every time the player lands? 0 Answers