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

Hocam yorum için teşekkürler ancak sorunun bununla yakından uzaktan ilgisi yok. Starta kod bile yazmadım sadece component aldım.

Çok pardon ben de öğrenmeye yeni yeni başladım da, belki işe yarar diye düşünmüştüm.
 
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 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 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]
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…