Unity 2D animasyon ekleme

Ellie11

Picopat
Katılım
6 Ekim 2020
Mesajlar
68
Normal animasyolardaki animator. Settrigger("enemydied"); şekilini denedim ama olmadı ölünce direk kayboluyor animasyonu oynatmaya yer bulamadım.

a.PNG


Kod:
Public class enemy: Monobehaviour.

{

Rigidbody2D enemybody2D;

Public float enemyspeed;



Public int can, maxcan;

Public gameobject[] canlar;

Animator animator;



//DUVARI BOLME.

[Tooltip("Karakterin duvara degip degmedigini kontrol eder")]

Bool isgrounded;

Transform grouncheck;

Const float groundcheckradius = 0.2F;

[Tooltip("Duvarin ne oldugunu belirler")]

Public layermask groundlayer;

Public bool moveright;

Void Start()

{

Enemybody2D = GetComponent<Rigidbody2D>();

Grouncheck = transform. Find("groundcheck");



Can = maxcan;

//cansistemi();

}



Void Update()

{

//Duvara degiyor mu?

İsgrounded = physics2D. Overlapcircle(grouncheck. Position, groundcheckradius, groundlayer);



İf (isgrounded)

Moveright =!moveright;



Enemybody2D. Velocity = (moveright)? New Vector2(enemyspeed, 0): New Vector2(-enemyspeed, 0);

Transform. Localscale = (moveright)? New Vector2(-1, 1): New Vector2(1, 1);

}



Void fixedUpdate()

{

İf (can <= 0)

{

olme();

Destroy(gameobject);

}

}



Void olme()

{

//Application. Loadlevel(application. Loadedlevel);

}



Void oncollisionenter2D(collision2D nesne)

{

İf (nesne. Gameobject. Tag == "tuzak")

{

Can -= random. Range(1, 2);

cansistemi();

}



Void cansistemi()

{

For (int i = 0; i < maxcan; i++)

{

Canlar.setactive(false);

}

For (int i = 0; i < can; i++)

{

Canlar.setactive(true);

}

}

}

}
 
Son düzenleyen: Moderatör:
Enemydied diye bir trigger oluşturmamışsınız. Öncelikle bir parametre oluşturup "enemy" State'inden "enemydied" state'ine bir transation uzatmanız ve koşul olarak o triggeri koymanız gerekmekte. Bundan sonra da olmazsa kodu inceleyebilirim.

Edit: Koşulu ekledikten sonra "Has Exit Time" tikini kaldırmayı unutmayın. Fixed Duration'u kapatın ve Transation Offset'i de 0 durumuna getirin.
 
O kısıma ekleme yaptım şimdi, yine can yine gidiyor ama ne animasyon oynuyor ne de kayboluyor. Yine de teşekkür ederim.
Void olme()

{

//Application. Loadlevel(application. Loadedlevel);

}

Sanırım bu karakterin veya rakibin ölme kodu
//Application. Loadlevel(application. Loadedlevel);
altına
animator.SetTrigger("enemydie");
ekleyip tekrar deneyebilir misiniz ?
önceki cevapta yazdığım kodu silin lütfen.
 
Dediğiniz gibi denedim ama aynı sonucu veriyor. Ne animasyon ne de kaybolma oluyor.

Oyunda karakterin yanında bir de düşman yapmıştım. Karakterin 5 canı, düşmanın 1 canı var. Dediğininiz gibi bu kod karakter kodu. Ben tek can olarak düşmana uyarladım aynısını. //Application. Loadlevel(application. Loadedlevel); bu kodu açık bırakırsam düşmanı öldürdüğüm zaman başa sarıyor oyun. Etkisi olur mu animasyona acaba?
 
İlk attığımla aynı kod, sadece düşmana ait. Diğer karakter kodum farklı dosyada.
public class enemy : MonoBehaviour
{
Rigidbody2D enemyBody2D;
public float enemySpeed;

public int can, maxcan;
public GameObject[] canlar;
Animator animator;

//DUVARI BOLME
[Tooltip("Karakterin duvara degip degmedigini kontrol eder")]
bool isGrounded;
Transform grounCheck;
const float GroundCheckRadius = 0.2f;
[Tooltip("Duvarin ne oldugunu belirler")]
public LayerMask groundLayer;
public bool moveRight;
void Start()
{
enemyBody2D = GetComponent<Rigidbody2D>();
grounCheck = transform.Find("GroundCheck");

can = maxcan;
//cansistemi();
}

void Update()
{
//Duvara Degiyor mu
isGrounded = Physics2D.OverlapCircle(grounCheck.position, GroundCheckRadius, groundLayer);

if (isGrounded)
moveRight = !moveRight;

enemyBody2D.velocity = (moveRight) ? new Vector2(enemySpeed, 0) : new Vector2(-enemySpeed, 0);
transform.localScale = (moveRight) ? new Vector2(-1, 1) : new Vector2(1, 1);
}

void FixedUpdate()
{
if (can <= 0)
{
olme();
Destroy(gameObject);
}
}

void olme()
{
//Application.LoadLevel(Application.loadedLevel);
}

void OnCollisionEnter2D(Collision2D nesne)
{
if (nesne.gameObject.tag == "tuzak")
{
can -= Random.Range(1, 2);
cansistemi();
}

void cansistemi()
{
for (int i = 0; i < maxcan; i++)
{
canlar.SetActive(false);
}
for (int i = 0; i < can; i++)
{
canlar.SetActive(true);
}
}
}
}
 
Ölme fonksiyonunu tekrardan düzenleyelim.
private void olme()
{
if(can <= 0)
{
animator.SetTrigger("enemydie");
Sleep(3000);
Destroy(gameObject);
}
}
şeklinde yeni bir fonksiyon oluşturup FixedUpdate içerisine sadece olme(); yazıp tekrar deneyebilir misin ?

Edit : Eğer animasyonu görüyorsan kodu geliştirebiliriz demektir.
 
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

Geri
Yukarı