Yardım Unity Camera Control

Bu konuyu okuyanlar

UnluckyCalimero

Öğrenci
Katılım
19 Nisan 2023
Mesajlar
3
Reaksiyon puanı
0
Puanları
1
Yaş
17
C#:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using System.Xml;

public class CameraManager : MonoBehaviour
{
    private Vector3 k1Pozisyon, k2Pozisyon, k3Pozisyon, k4Pozisyon, k5Pozisyon, k6Pozisyon, k7Pozisyon, k8Pozisyon;

    //Sorunlar
    //> Kamerayı aşağıya doğrultup çok hızlı sağ-sol yapınca atlamalar oluyor
    //> Kamerayı çok hızlı hareket ettirinice Z ekseni hafif oynuyor.

    [Header("Sensitivity Settings")]
    [Tooltip("Kameranın hassaslığını ayarlar.")]
    [Range(0.1f, 9f)] [SerializeField] public float sensitivity = 2f;


    [Header("Camera Settings")]
    [Tooltip("Kameranın hareketini kitler.")]
    [Range(1f, 10f)] [SerializeField] public bool CameraLocked = false;
    [Tooltip("Kameranın yumuşak geçişinin hızını ayarlar.")]
    [Range(1f, 10f)]  [SerializeField] public float CameraSoftness = 1f;
    [Tooltip("Kameranın Y eksenindeki maksimum limitini ayarlar.")]
    [Range(0f, 100f)] [SerializeField] public float yMaxRotationLimit = 80f;
    [Tooltip("Kameranın Y eksenindeki minimum limitini ayarlar.")]
    [Range(0f, -100f)][SerializeField] public float yMinRotationLimit = -80f;
   
    private new Camera camera;
    private float rotAroundX, rotAroundY;

    void Start()
    {
        //Başlangıçta kamera Componentını alır.
        camera = this.GetComponent<Camera>();
        //rotAroundX kameranın başlangıçtaki X ve Y sini alır.
        //eulerAngles=Objenin rotasyon değerini elde etmemizi sağlar. İstersek bu değeri kod ile değiştirebiliriz.
        rotAroundX = transform.eulerAngles.x;
        rotAroundY = transform.eulerAngles.y;
        //Mouse u ekranın ortasına kitleyip görünmez yapar.
        Cursor.lockState = CursorLockMode.Locked;
    }

    void Update()
    {
        if(!CameraLocked)
        {
            //Mousun X sini alır, hassaslıkla çarpar.
            rotAroundX += Input.GetAxis("Mouse Y") * sensitivity;
            //Mousun Y sini alır, hassaslıkla çarpar.
            rotAroundY += Input.GetAxis("Mouse X") * sensitivity;
            //Kameranın Y eksenini kısıtlar.
            rotAroundX = Mathf.Clamp(rotAroundX, yMinRotationLimit, yMaxRotationLimit);
            //Kameranın sıradaki rotasyonunu hesaplar.
            Quaternion nextRotation = Quaternion.Euler(-rotAroundX, rotAroundY, 0);
            //Kameranın hareketini yumuşatır.
            camera.transform.rotation = Quaternion.Lerp(camera.transform.rotation, nextRotation, (CameraSoftness * 10) * Time.deltaTime);
        }

        if (true)
        {

        }
    }
}

Unity de kamera kontrol gerektiren bir script yazıyorum fakat mouse`u sağ sola çok hızlı götürünce y ekseninde kaymalar oluyor. Kameranın yumuşak bir şekilde gitmesini istiyorum fakat bu yumuşaklığı yapınca da böyle bir sorun çıkıyor. Bunu nasıl çözebilirim?
 
Son düzenleme:

Skywalker12

Öğrenci
Katılım
7 Mart 2024
Mesajlar
93
Reaksiyon puanı
31
Puanları
18
Yaş
20
// Mouse X ve Y eksenlerinden alınan değerleri sınırlamak için kullanılacak değişkenlerfloat mouseX = Input.GetAxis("Mouse X") * sensitivity;float mouseY = Input.GetAxis("Mouse Y") * sensitivity;// Y eksenindeki rotasyonu güncellemerotAroundX -= mouseY;rotAroundX = Mathf.Clamp(rotAroundX, yMinRotationLimit, yMaxRotationLimit);// X eksenindeki rotasyonu güncellemerotAroundY += mouseX;// Yeni rotasyonu hesaplamaQuaternion nextRotation = Quaternion.Euler(-rotAroundX, rotAroundY, 0);// Kameranın hareketini yumuşaklaştırmacamera.transform.rotation = Quaternion.Lerp(camera.transform.rotation, nextRotation, Time.deltaTime * CameraSoftness);

Bu yöntemleri kullanarak, hızlı fare hareketlerinde meydana gelen kaymaları azaltabilir ve daha stabil bir kamera kontrolü elde edebilirsiniz.
 

Son mesajlar

Üst