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.
 

Geri
Yukarı