Saya ingin membuat kamera orang pertama yang berputar dengan mouse.
Saya melihat halaman API Scripting Input.GetAxis dan menemukan kode sampel, yang telah saya sertakan di bagian bawah posting saya. Setelah mencobanya, saya menyadari bahwa meskipun memiliki fungsi dasar yang sama seperti yang saya harapkan, itu tidak membuat kamera sejajar dengan bidang xz, terutama ketika menggerakkan mouse dalam lingkaran. Setelah beberapa saat, kamera akan berada pada sudut yang aneh, dan pemain akan benar-benar terganggu!
Apakah ada perbaikan cepat pada kode ini yang akan membatasi pergerakan kamera, atau ada cara yang lebih baik untuk memutar kamera?
using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour {
public float horizontalSpeed = 2.0F;
public float verticalSpeed = 2.0F;
void Update() {
float h = horizontalSpeed * Input.GetAxis("Mouse X");
float v = verticalSpeed * Input.GetAxis("Mouse Y");
transform.Rotate(v, h, 0);
}
}
Jawaban:
Masalahnya adalah Anda memperbarui rotasi yang ada alih-alih melacaknya sendiri dan mengganti setiap pembaruan.
Ketika Anda memperbarui rotasi itu menggabungkan rotasi baru Anda dengan yang lama yang mengarah ke perilaku yang tidak terduga.
Solusinya adalah untuk melacak rotasi akumulasi Anda dan mengatur ulang rotasi sepenuhnya setiap pembaruan dengan nilai-nilai baru Anda.
Kredit jatuh tempo, saya menemukan jawabannya di sini: Unity Answers: bagaimana-untuk-mengunci-atau-mengatur-kamera-z-rotasi-ke-nol
Kode Kerja:
Perbedaan utama:
sumber
Bagaimana jika Anda menjadikan kamera sebagai objek game kosong. Kemudian dengan satu skrip Anda mengelola rotasi objek game kosong relatif terhadap vektor UP. (MouseX) Dengan skrip lain yang dikaitkan dengan objek gim kamera, Anda mengelola rotasi relatif terhadap vektor Kanan (MouseY)
sumber