Медленное перемещение основной камеры в другую позицию

#c# #unity3d #transform #lerp

#c# #unity3d #преобразование #lerp

Вопрос:

Я хочу медленно перемещать основную камеру из одной точки в другую при нажатии кнопки. Эта кнопка вызывает метод, который содержит код для перемещения камеры.

Я пытался использовать метод Lerp, но положение камеры меняется так быстро, что, когда я нажимаю на кнопку, камера сразу переходит в новое положение. Я хочу, чтобы камера медленно перемещалась в новое положение.

Ниже приведен мой код, может кто-нибудь, пожалуйста, помочь мне с этим.

=========================================================================

 using System.Collections;
using System.Collections.Generic;

using UnityEngine;

public class Cameramove : MonoBehaviour
{
    public GameObject cam;
    Vector3 moveToPosition;// This is where the camera will move after the start
    float speed = 2f; // this is the speed at which the camera moves
    public void move()
    {
        //Assigning new position to moveTOPosition
        moveToPosition = new Vector3(200f, 400f, -220f);
        float step = speed * Time.deltaTime;
        cam.transform.position = Vector3.Lerp(cam.transform.position, moveToPosition, step);
        cam.transform.position = moveToPosition;
        
    }
    
}
  

Ответ №1:

Проще использовать lerp с фреймами, и вам нужно использовать его в функции обновления. Попробуйте использовать пример из документации Unity:

 public int interpolationFramesCount = 45; // Number of frames to completely interpolate between the 2 positions
int elapsedFrames = 0;

void Update()
{
    float interpolationRatio = (float)elapsedFrames / interpolationFramesCount;

    Vector3 interpolatedPosition = Vector3.Lerp(Vector3.up, Vector3.forward, interpolationRatio);

    elapsedFrames = (elapsedFrames   1) % (interpolationFramesCount   1);  // reset elapsedFrames to zero after it reached (interpolationFramesCount   1)

    Debug.DrawLine(Vector3.zero, Vector3.up, Color.green);
    Debug.DrawLine(Vector3.zero, Vector3.forward, Color.blue);
    Debug.DrawLine(Vector3.zero, interpolatedPosition, Color.yellow);
}
  

Ответ №2:

Попробуйте использовать smooth damp.

Вот новый код, который вы должны попробовать:

 using System.Collections;
using System.Collections.Generic;

using UnityEngine;

public class Cameramove : MonoBehaviour
{
    Vector3 matric;
    public GameObject cam;
    Vector3 moveToPosition;
    float speed = 2f; 
    bool move_ = false;

    void Update(){
         if(move_){
              //Assigning new position to moveTOPosition
              moveToPosition = new Vector3(200f, 400f, -220f);
              cam.transform.position = 
              Vector3.SmoothDamp(cam.transform.position,
                            moveToPosition,
                            ref matric, speed);
         }
    }

    public void move()
    {
        move_ = true;
    }
}
  

Комментарии:

1. Спасибо за ответ, но когда я нажимаю на кнопку, камера немного перемещается, чтобы перейти в новую позицию, мне нужно нажать кнопку несколько раз. есть ли способ плавно переместить камеру в новое положение, просто нажав кнопку один раз?

2. Я редактирую ответ, чтобы он работал. Извините, что в первый раз не сработало, я не понимал, что это должно быть в методе обновления