#c# #unity3d
#c# #unity3d
Вопрос:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Cinemachine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
public class PlayingInGameScenesController : MonoBehaviour
{
public LockController lockController;
public Vector3 targetPosition;
public GameObject uiTextsImage;
public float cameraMoveSpeed;
private bool newGame = true;
private bool playingScene = true;
public void PlayingSceneInGame()
{
PlayingSceneStatesControls(true);
StartCoroutine(ScenePlayingTime());
}
private void Update()
{
if (SceneManager.GetActiveScene().name != "Main Menu" amp;amp; newGame == true)
{
PlayingSceneInGame();
newGame = false;
}
if(playingScene == false)
{
// X 40.73769 to -6 Y 1.1 to 1 Z -4.641718 to 43.4
Vector3 camPos = Camera.main.transform.position;
Vector3 newPos = new Vector3(camPos.x)
Camera.main.transform.position = Vector3.Lerp(Camera.main.transform.position, targetPosition, cameraMoveSpeed * Time.deltaTime);
}
}
private void PlayingSceneStatesControls(bool LockState)
{
lockController.LockControl(LockState);
if (LockState == true)
{
// change state of free look camera height and view distance.
// change the cameras states enable true/false.
// change the ui texts for description text and scene text enable true/false.
uiTextsImage.SetActive(true);
}
else
{
uiTextsImage.SetActive(false);
playingScene = false;
}
}
IEnumerator ScenePlayingTime()
{
yield return new WaitForSeconds(10);
PlayingSceneStatesControls(false);
}
}
В обновлении :
if(playingScene == false)
{
// X 40.73769 to -6 Y 1.1 to 1 Z -4.641718 to 43.4
Vector3 camPos = Camera.main.transform.position;
Vector3 newPos = new Vector3(camPos.x)
Camera.main.transform.position = Vector3.Lerp(Camera.main.transform.position, targetPosition, cameraMoveSpeed * Time.deltaTime);
}
Сначала я должен переместить две переменные camPos и newPos в начало?
Во-вторых, значения X Y Z: левые значения — это то, где камера находится в данный момент, а правые значения, куда следует медленно перемещаться, чтобы сгладить. Из текущего положения на X текущее положение равно 40,73769 до -6 то же самое для Y и Z Я просто записал эти значения, чтобы запомнить, но идея состоит в том, чтобы плавно перемещать камеру из текущего положения в новое положение: X -6 Y 1 и Z до 43,4
Должен ли я сделать это в обновлении или в позднем или исправленном обновлении?
Это исходное положение основной камеры :
И это целевое положение, которое я хочу получить для основной камеры, я ввел новые значения целевого положения :
Что я пробовал :
В начале :
private void Start()
{
Vector3 camPos = Camera.main.transform.position;
newPos = new Vector3(camPos.x - 46.73769f, camPos.y - 0.1f, camPos.z 48.041718f);
}
Затем в обновлении :
if(playingScene == false)
{
// X 40.73769 - 46.73769 Y 1.1 - 0.1 Z -4.641718 48.041718
Camera.main.transform.position = Vector3.Lerp(Camera.main.transform.position, newPos, cameraMoveSpeed * Time.deltaTime);
}
Затем я изменил значения в начальном переключении Z и X :
private void Start()
{
Vector3 camPos = Camera.main.transform.position;
newPos = new Vector3(camPos.x - 48.041718f, camPos.y - 0.1f, camPos.z 46.73769f);
}
В обоих случаях основная камера запускается из какой-либо другой позиции, которая вообще не является исходной, и заканчивается в другой позиции :
Начиная где-то под / внутри космического корабля :
И заканчивая здесь :
Ответ №1:
Работает :
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Cinemachine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
public class PlayingInGameScenesController : MonoBehaviour
{
public GameObject camera;
public LockController lockController;
public GameObject uiTextsImage;
public float transitionSpeed = 5f;
public Transform currentView;
// The initial offset from the target.
private Vector3 offset;
private bool newGame = true;
private bool playingScene = true;
private Vector3 newPos;
private void Start()
{
currentView.position = new Vector3(43.4f, 1f,-6f);
offset = camera.transform.position - currentView.position;
}
public void PlayingSceneInGame()
{
PlayingSceneStatesControls(true);
StartCoroutine(ScenePlayingTime());
}
private void Update()
{
if (SceneManager.GetActiveScene().name != "Main Menu" amp;amp; newGame == true)
{
PlayingSceneInGame();
newGame = false;
}
}
private void LateUpdate()
{
if (playingScene == false)
{
//Lerp position
camera.transform.position = Vector3.Lerp(camera.transform.position, currentView.position, Time.deltaTime * transitionSpeed);
}
}
private void PlayingSceneStatesControls(bool LockState)
{
lockController.LockControl(LockState);
if (LockState == true)
{
// change state of free look camera height and view distance.
// change the cameras states enable true/false.
// change the ui texts for description text and scene text enable true/false.
uiTextsImage.SetActive(true);
}
else
{
uiTextsImage.SetActive(false);
playingScene = false;
}
}
IEnumerator ScenePlayingTime()
{
yield return new WaitForSeconds(10);
PlayingSceneStatesControls(false);
}
}