Проблема с исходным положением камеры в режиме PLAYC#

Место общения программистов C#
Ответить
Anonymous
 Проблема с исходным положением камеры в режиме PLAY

Сообщение Anonymous »

Мне нужна помощь: у меня есть сборная камера с этими данными Transform.position:
Scene:Vector3(-2.86999989,1.01999998,-0.810000002).

Эта строка в коде:
[SerializeField] private Vector3 initialCameraPosition = new Vector3(-2.86999989, 1.01999998, -0.810000002);

Я написал скрипт, который позволяет мне начать вращение камеры с этими исходными данными Transform.position. Однако когда я запускаю скрипт, значения Transform.position префаба (камеры) сразу перезаписываются:
play:Vector3(-2.72023177,0.810079217,-1.23373544).

Разница между данными Transform.position сцены и воспроизведения:
X axis: 0.1498
Y axis: -0.2099
Z axis: -0.4237

Цель, на которую я перетаскиваю скрипт, имеет Transform.position Vector3(0,0,0,).
  • Я использую только 1 камеру.;
  • Другие скрипты не используют камеру.;
  • Других настроек, влияющих на камеру, нет.
Мой вопрос: почему начальное значение моей камеры скачет/изменяется в режиме PLAY?
Заранее благодарю за помощь.
Скрипт:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CameraController : MonoBehaviour
{
[SerializeField] private Transform target;
[SerializeField] private Vector3 initialCameraPosition = new Vector3(3f, 1f, 2.5f);
[SerializeField] private Vector3 initialCameraRotation = new Vector3(30f, 45f, 0f);

public float sensitivity = 100f; // Forgatás érzékenysége
private float _yaw = 0f; // Az aktuális forgási szög vízszintes tengelyen
private float _pitch = 0f; // Az aktuális forgási szög függőleges tengelyen

private float minPitch = 5f; // Minimális függőleges szög
private float maxPitch = 90f; // Maximális függőleges szög

private Transform cameraObject; // A kamera objektum, amit dinamikusan megkeresünk

void Start()
{
// Kamera objektum megkeresése, ha nincs előzőleg hozzárendelve
cameraObject = Camera.main.transform;

if (target == null)
{
Debug.LogError("Nincs célpont (Target) hozzárendelve!");
}

if (cameraObject == null)
{
Debug.LogError("Nincs kamera a jelenetben!");
return;
}

// Beállítjuk a kezdeti pozíciót és rotációt
cameraObject.position = initialCameraPosition;
cameraObject.rotation = Quaternion.Euler(initialCameraRotation);

// Távolság és forgási szögek kiszámítása a megadott kezdőpozícióból
Vector3 targetDirection = cameraObject.position - target.position;
distanceFromTarget = targetDirection.magnitude;

_yaw = initialCameraRotation.y; // A yaw értéke a kezdeti rotációból
_pitch = initialCameraRotation.x; // A pitch értéke a kezdeti rotációból
}

void Update()
{
HandleInput();

// Korlátozzuk a pitch értéket
_pitch = Mathf.Clamp(_pitch, minPitch, maxPitch);

// Forgatjuk a kamerát a célpont körül
RotateCamera();
}

private void HandleInput()
{
Vector2 inputDelta = Vector2.zero;

// Mobil érintés
if (Input.touchCount > 0)
{
Touch touch = Input.GetTouch(0);
inputDelta = touch.deltaPosition;
}
// Egér
else if (Input.GetMouseButton(0))
{
inputDelta = new Vector2(Input.GetAxis("Mouse X"), Input.GetAxis("Mouse Y"));
}

// Frissítjük a forgási értékeket
_yaw += inputDelta.x * sensitivity * Time.deltaTime;
_pitch -= inputDelta.y * sensitivity * Time.deltaTime;
}

private void RotateCamera()
{
// Kiszámítjuk a forgást a célpont körül
Quaternion rotation = Quaternion.Euler(_pitch, _yaw, 0f);
Vector3 positionOffset = rotation * new Vector3(0, 0, -distanceFromTarget);

// Beállítjuk a kamera pozícióját és rotációját
cameraObject.position = target.position + positionOffset;
cameraObject.LookAt(target);
}
}


Подробнее здесь: https://stackoverflow.com/questions/792 ... -play-mode
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»