#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. Я редактирую ответ, чтобы он работал. Извините, что в первый раз не сработало, я не понимал, что это должно быть в методе обновления