- 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