Unity Mouse nereye gitse o yönün tersine gidiyor

swayer

Centipat
Katılım
7 Ağustos 2024
Mesajlar
194
Çözümler
6
Daha fazla  
Cinsiyet
Erkek
Meslek
Müzisyen
Arkadaşlar merhaba, bir tane oyun yapıyorum ancak fareyi ben nereye döndürsem o yönün tersine gidiyor sizce sıkıntı nedir?
Kodlar:
Using unityengine;

Public class mouselookaround: Monobehaviour.
{
Float rotationx = 0F;
Float rotationy = 0F;

Public Vector2 sensitivity = Vector2.One * 360F;

Void Update()
{
Rotationy += ınput. Getaxis("mouse X") * time. Deltatime * sensitivity. X;
Rotationx += ınput. Getaxis("mouse y") * time. Deltatime * -1 * sensitivity. Y;
Transform. Localeulerangles = New Vector3(rotationx, rotationy, 0);
}
}
 
Kodunuzdaki hatayı çözebilmek için birkaç noktaya dikkat edebiliriz:

1. İsimlendirme Hataları:
- Using unityengine;using UnityEngine; olmalı. (C# case-sensitive bir dildir, bu yüzden using ve UnityEngine küçük-büyük harf duyarlılığına dikkat edilmeli).
- Public class mouselookaround: Monobehaviour.public class MouseLookAround : MonoBehaviour olmalı.
- Float ve Void küçük harfli olmalı (float, void).

2. Mouse Y Ekseni Hassasiyeti:
- Mouse'un y ekseninde ters hareket ediyor olması, rotationx hesaplanırken kullanılan -1 çarpanından kaynaklanıyor. Eğer bu yöndeki hassasiyet ters değilse, -1'i kaldırabilirsiniz.

3. Kodun Düzeltilmiş Hali:
Kodunuzu düzeltip önerilen formatta aşağıdaki gibi yazabilirsiniz:

Kod:
csharp
   using UnityEngine;

   public class MouseLookAround : MonoBehaviour
   {
       float rotationX = 0f;
       float rotationY = 0f;

       public Vector2 sensitivity = Vector2.one * 360f;

       void Update()
       {
           rotationY += Input.GetAxis("Mouse X") * Time.deltaTime * sensitivity.x;
           rotationX += Input.GetAxis("Mouse Y") * Time.deltaTime * sensitivity.y;  // Eğer tersse burada -1 ekleyin

           transform.localEulerAngles = new Vector3(rotationX, rotationY, 0);
       }
   }

4. Ekstra Notlar:
- Eğer kamera yukarı-aşağı hareket ederken ters gidiyorsa, rotationX'e -1 ekleyerek yönü değiştirebilirsiniz:
Kod:
csharp
     rotationX += Input.GetAxis("Mouse Y") * Time.deltaTime * -1 * sensitivity.y;

Bu değişiklikler sorununuzu çözmelidir. Kodunuzu bu şekilde test edip sonucu paylaşabilirsiniz.
 
Pardon öyle demek istememiştim benim bahsettiğim ben mesela fareyi sağ yönüne çeviriyorum ve geri geri yürüyor isterseniz oyunu atıp sizde bakabilirsiniz.
 
Reis eulerle yapma bence, quaternionla yap, hareket ettirken sıkıntı var, ileri , sağ sola hareket ettirdiğin kodu atar mısın.

using UnityEngine;

public class MouseLookAround : MonoBehaviour
{
float rotationX = 0f;
float rotationY = 0f;

public Vector2 sensitivity = Vector2.one * 360f;

void Update()
{
// Mouse hareketlerine göre dönüş açısını güncelleme
rotationY += Input.GetAxis("Mouse X") * sensitivity.x * Time.deltaTime;
rotationX -= Input.GetAxis("Mouse Y") * sensitivity.y * Time.deltaTime; // Burada - ekleyerek ters yönü düzeltiyoruz

// rotationX'i sınırlama (örneğin, dikey eksende 90 derece ile sınırlandırabiliriz)
rotationX = Mathf.Clamp(rotationX, -90f, 90f);

// Dönüşü Quaternions ile ayarlama
transform.localRotation = Quaternion.Euler(rotationX, rotationY, 0);
}
}
 
Hocam buyurun hareket kodları:
Using UnityEngine;

Public class oyuncuHareket: MonoBehaviour
{
Rigidbody m_Rigidbody;
Public float m_Speed = 5F;

Void Start()
{
//Fetch the Rigidbody from the GameObject with this script attached
M_Rigidbody = GetComponent<Rigidbody>();
}

Void FixedUpdate()
{
//Store user input as a movement Vector
Vector3 m_Input = New Vector3(Input. GetAxis("Horizontal"), 0, Input. GetAxis("Vertical"));

//Apply the movement Vector to the current position, which is
//Multiplied by deltaTime and Speed for a smooth MovePosition
M_Rigidbody. MovePosition(transform. Position + m_Input * Time. DeltaTime * m_Speed);
}
}
 
using UnityEngine;

public class OyuncuHareket : MonoBehaviour
{
private Rigidbody m_Rigidbody;
public float m_Speed = 5f;

void Start()
{
// RigidBody bileşenini alıyoruz
m_Rigidbody = GetComponent<Rigidbody>();
}

void FixedUpdate()
{
// Kullanıcı girdisini hareket vektörü olarak saklıyoruz
Vector3 m_Input = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));

// Hareket vektörünü mevcut pozisyona uyguluyoruz,
// deltaTime ve hız ile çarparak MovePosition için düzgün bir hareket sağlıyoruz
m_Rigidbody.MovePosition(transform.position + transform.TransformDirection(m_Input) * Time.deltaTime * m_Speed);
}
}
 
reis pardon, şimdi bilgisayarın başına geçebildim, biz mouselookaroundta playerin gövdesini döndürmemiz lazım, bunu yaparken oyuncunun rigidbodysindeki freeze Rotationdaki X ve Z değerini tickle, ve kemeradaki MouseLookAroun da playerın gameobjeni ata ,

Kod:
using UnityEngine;
public class MouseLookAround : MonoBehaviour
{
    float rotationX = 0f;
    float rotationY = 0f;
    public Transform playerBody;
    public Vector2 sensitivity = Vector2.one * 100f;
    private void Start() {
        Cursor.lockState = CursorLockMode.Locked;   
    }

    void Update()
    {
        // Mouse hareketlerine göre dönüş açısını güncelleme
        rotationY = Input.GetAxis("Mouse X") * sensitivity.x * Time.deltaTime;
        rotationX -= Input.GetAxis("Mouse Y") * sensitivity.y * Time.deltaTime; // Burada - ekleyerek ters yönü düzeltiyoruz
        // rotationX'i sınırlama (örneğin, dikey eksende 90 derece ile sınırlandırabiliriz)
        rotationX = Mathf.Clamp(rotationX, -90f, 90f);
        // Dönüşü Quaternions ile ayarlama
        transform.localRotation = Quaternion.Euler(rotationX, 0, 0);
        playerBody.Rotate(Vector3.up * rotationY);
    }
}


Kod:
using UnityEngine;
public class OyuncuHareket : MonoBehaviour
{
    private Rigidbody m_Rigidbody;
    private Vector3 m_Input;
    public float m_Speed = 5f;
    void Start()
    {
        // RigidBody bileşenini alıyoruz
        m_Rigidbody = GetComponent<Rigidbody>();
    }
    void FixedUpdate()
    {
        // Kullanıcı girdisini hareket vektörü olarak saklıyoruz
        m_Input = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
        // Hareket vektörünü kontrol et
        if (Mathf.Approximately(m_Input.sqrMagnitude, 0))
        {
            return; // Eğer hareket girişi yoksa, çık
        }
        // Hareket vektörünü mevcut pozisyona uyguluyoruz
        m_Rigidbody.MovePosition(transform.position + transform.TransformDirection(m_Input) * Time.deltaTime * m_Speed);
    }
}
 
Yok hocam hiçbir şekilde olmuyor bir şey olsa başka sıkıntı çıkıyor en iyisi bu sektördeki işimi başlamadan bitirmem.

Reis pardon, şimdi bilgisayarın başına geçebildim, biz mouselookaroundta Player'in gövdesini döndürmemiz lazım, bunu yaparken oyuncunun rigidbodysindeki freeze rotationdaki X ve Z değerini tickle, ve kemeradaki mouselookaroun da Player'ın gameobjeni ata,

Kod:
using UnityEngine;
public class MouseLookAround : MonoBehaviour.
{
 float rotationX = 0f;
 float rotationY = 0f;
 public Transform playerBody;
 public Vector2 sensitivity = Vector2.one * 100f;
 private void Start() {
 Cursor.lockState = CursorLockMode.Locked;
 }

 void Update()
 {
 // Mouse hareketlerine göre dönüş açısını güncelleme.
 rotationY = Input.GetAxis("Mouse X") * sensitivity.x * Time.deltaTime;
 rotationX -= Input.GetAxis("Mouse Y") * sensitivity.y * Time.deltaTime; // Burada - ekleyerek ters yönü düzeltiyoruz.
 // rotationX'i sınırlama (örneğin, dikey eksende 90 derece ile sınırlandırabiliriz)
 rotationX = Mathf.Clamp(rotationX, -90f, 90f);
 // Dönüşü Quaternions ile ayarlama.
 transform.localRotation = Quaternion.Euler(rotationX, 0, 0);
 playerBody.Rotate(Vector3.up * rotationY);
 }
}

Kod:
using UnityEngine;
public class OyuncuHareket : MonoBehaviour.
{
 private Rigidbody m_Rigidbody;
 private Vector3 m_Input;
 public float m_Speed = 5f;
 void Start()
 {
 // RigidBody bileşenini alıyoruz.
 m_Rigidbody = GetComponent<Rigidbody>();
 }
 void FixedUpdate()
 {
 // Kullanıcı girdisini hareket vektörü olarak saklıyoruz.
 m_Input = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
 // Hareket vektörünü kontrol et.
 if (Mathf.Approximately(m_Input.sqrMagnitude, 0))
 {
 return; // Eğer hareket girişi yoksa, çık.
 }
 // Hareket vektörünü mevcut pozisyona uyguluyoruz.
 m_Rigidbody.MovePosition(transform.position + transform.TransformDirection(m_Input) * Time.deltaTime * m_Speed);
 }
}

Hocam Allah sizden razı olsun sizin kodlarınız sayesinde çalıştı sorun benim rigidbody de bazı ayarları yapmamış olmam şu an gayet güzel çalışıyor.
 
Son düzenleme:

Technopat Haberler

Geri
Yukarı