C# Unity kodunda buton basılı kalmıyor

Hocam sorununuz exit sırasında ikisine de aynı anda bakmanız sanırım. Onun yerine arkadaşın dediği gibi active olarak collide edilen objelere göre animator state değiştirmeli. Ya da bool değerler atayıp collide ettiğinde true collide halinden çıktığında false olarak döndürmeli ve buna göre state belirlemelisiniz. Update içinde if (box_is_collided == true && player_is_collided == true) ise Animator.setState("Idle"); gibi.
 
Hocam sorununuz exit sırasında ikisine de aynı anda bakmanız sanırım. Onun yerine arkadaşın dediği gibi active olarak collide edilen objelere göre animator state değiştirmeli. Ya da bool değerler atayıp collide ettiğinde true collide halinden çıktığında false olarak döndürmeli ve buna göre state belirlemelisiniz. Update içinde if (box_is_collided == true && player_is_collided == true) ise Animator.setState("Idle"); gibi.
Hocam setState yapısı da kalktı.setPlay'den mi bahsediyorsunuz setBool'dan mı?
SetBool ile denedim ancak çalışmadı animasyon bir yerde hata yaptım sanırım.
[CODE lang="csharp" title="kod" highlight="16"] private void OnTriggerStay2D(Collider2D other)
{
if (other.gameObject.tag == "Player" || other.gameObject.tag == "Box")
{
animator.SetTrigger("Down");
}
}
private void OnTriggerExit2D(Collider2D other)
{
if (other.gameObject.tag == "Player" && other.gameObject.tag == "Box")
{
animator.SetBool("Down", true);
}
}

}[/CODE]
 
Hocam yanlış anlamışsınız.

2 tane boolean class variable'ı atayın. Initial olarak false bırakın.

Collision Trigger'lanınca true olarak kaydedilsin.

Exit çağrılınca yine false olarak kaydedilsin.

Update içinde de bu objelerin statelerine göre animasyon state'lerini değiştirirsiniz.
 
Hocam yanlış anlamışsınız.

2 tane boolean class variable'ı atayın. Initial olarak false bırakın.

Collision Trigger'lanınca true olarak kaydedilsin.

Exit çağrılınca yine false olarak kaydedilsin.

Update içinde de bu objelerin statelerine göre animasyon state'lerini değiştirirsiniz.
Hocam state mantığını anlayamadım yardımcı olabilir misiniz?

[CODE lang="csharp" title="kod" highlight="32"]public class ButtonAnimation : MonoBehaviour
{
public bool m_Down;
public bool m_Idle;
public Animator animator;
void Start()
{
m_Down = false;
m_Idle = true;
animator = GetComponent<Animator>();
}
void Update()
{


}
private void OnTriggerStay2D(Collider2D other)
{
if (other.gameObject.tag == "Player" || other.gameObject.tag == "Box")
{
animator.SetBool("Down", m_Idle);
}
}
private void OnTriggerExit2D(Collider2D other)
{
if (other.gameObject.tag == "Player" || other.gameObject.tag == "Box")
{
animator.SetBool("Down", m_Down);
}
}

}[/CODE]
 
Hocam bool değerlerini OnTriggerEnter ve OnTriggerExit üzerinden değiştirip update kısmında bool değerlerine bakarak animator işlemlerini yapacaksınız.

OnTriggerEnter çağırılınca hangi obje collision'a uğradıysa onun bool değeri true olacak.

OnTriggerExit cağırılınca çağırılan objenin bool değeri false olacak.

Bu sayede Update içinde değerlerin true ya da false olmasına göre animator operasyonlarınızı şekillendireceksiniz.
 
Hocam bool değerlerini OnTriggerEnter ve OnTriggerExit üzerinden değiştirip update kısmında bool değerlerine bakarak animator işlemlerini yapacaksınız.

OnTriggerEnter çağırılınca hangi obje collision'a uğradıysa onun bool değeri true olacak.

OnTriggerExit cağırılınca çağırılan objenin bool değeri false olacak.

Bu sayede Update içinde değerlerin true ya da false olmasına göre animator operasyonlarınızı şekillendireceksiniz.
1615906303501.png

Hocam bahsettiğiniz bu sanırım.Eğer zamanınız varsa bir örnek kod yazar mısınız?
 
C#:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Technopat : MonoBehaviour
{
        public bool player_collided;
        public bool box_collided;
        public Animator animator;
        private void Start()
        {
        player_collided = false;
        box_collided = false;
        animator = GetComponent<Animator>();
        }
        private void Update()
        {
        if(box_collided == false && player_collided == false)
        {
            animator.SetBool("Idle", true);
        }
        else
        {
            // Profit ??
        }

        }
        private void OnTriggerEnter2D(Collider2D other)
        {
        if (other.gameObject.CompareTag("Player"))
        {
            player_collided = true;
        }

        if (other.gameObject.CompareTag("Box"))
        {
            box_collided = true;
        }
    }
        private void OnTriggerExit2D(Collider2D other)
        {
        if (other.gameObject.CompareTag("Player"))  
        {
            player_collided = false;
        }

        if (other.gameObject.CompareTag("Box"))
        {
            box_collided = false;
        }
        }

}
 
public class Technopat : MonoBehaviour
...
Kodu şu şekilde değiştirdim ancak sorun devam ediyor.
Sorunun videosu :
Bu içeriği görüntülemek için üçüncü taraf çerezlerini yerleştirmek için izninize ihtiyacımız olacak.
Daha detaylı bilgi için, çerezler sayfamıza bakınız.

[CODE title="kod"]{
public bool player_collided;
public bool box_collided;
public Animator animator;
private void Start()
{
player_collided = false;
box_collided = false;
animator = GetComponent<Animator>();
}
private void Update()
{
if (box_collided == false && player_collided == false)
{
animator.SetBool("Idle", true);
}
else
{
animator.SetBool("Idle", false);
}

}
private void OnTriggerStay2D(Collider2D other)
{
if (other.gameObject.CompareTag("Player"))
{
player_collided = true;
}

if (other.gameObject.CompareTag("Box"))
{
box_collided = true;
}
}
private void OnTriggerExit2D(Collider2D other)
{
if (other.gameObject.CompareTag("Player"))
{
player_collided = false;
}

if (other.gameObject.CompareTag("Box"))
{
box_collided = false;
}
}

}[/CODE]
 
Uyarı! Bu konu 5 yıl önce açıldı.
Muhtemelen daha fazla tartışma gerekli değildir ki bu durumda yeni bir konu başlatmayı öneririz. Eğer yine de cevabınızın gerekli olduğunu düşünüyorsanız buna rağmen cevap verebilirsiniz.

Technopat Haberler

Yeni konular

Yeni mesajlar

Geri
Yukarı