Kod Bağımsızlığı: Unity Dependency Injection | Zenject

แชร์
ฝัง
  • เผยแพร่เมื่อ 5 ม.ค. 2025

ความคิดเห็น • 72

  • @skinnydev
    @skinnydev  4 หลายเดือนก่อน +2

    Oyunlarınızı Yandex Games’de yayınlayarak küresel bir kitleye ulaşabilir, bunun yanında oyun içi satışlar ve reklamlardan gelir elde edebilirsiniz. Yayınlamak veya daha fazla bilgi almak için linke tıklayabilirsiniz.
    mltplyr.com/yandex-sd

    • @rosegame2505
      @rosegame2505 2 หลายเดือนก่อน

      kanalın süper bende god of war oyunu yapıyorum örnek sahne ve deneme kanalımda yayınlığcam düşmanı tutup fırlatma özeliği olcak biraz detaylı 70 yaşında biri multiplay online ders vermişti süper anlatı🙂

  • @AlperenAkkurt33
    @AlperenAkkurt33 4 หลายเดือนก่อน +3

    Bu adamı 5 yıl sonra düşünemiyorum :) eline sağlık abi

    • @skinnydev
      @skinnydev  4 หลายเดือนก่อน

      Teşekkür ederim

  • @utkuerden6269
    @utkuerden6269 2 หลายเดือนก่อน

    Kanalini yeni kesfettim, bu tarz daha advanced Unity konularini Turkce bu kalitede gormek cok guzel, eline saglik!
    Zenject ile ilgili bence Signallara da muhakkak deginmelisin, generic eventler icin guzel bir alternatif

    • @skinnydev
      @skinnydev  2 หลายเดือนก่อน

      Çok teşekkürler, Zenject Signal'lerini kişisel olarak pek kullanmadığım için değinmek istemedim açıkçası. Onlar yerine açık kaynak bir Signal sistemi olan MessagePipe'ı bir video konusu yapmayı planlıyorum. UniTask'ın yapımcısı Cysharp'ın elinden çıkmış bir iş. Kullanım ve hız bakımından Zenject Signal'lerinin önüne geçmiş gibi duruyor.

  • @HaciOsmanKoyudemir01
    @HaciOsmanKoyudemir01 4 หลายเดือนก่อน +1

    Hop hemen geldik :D Henüz videoyu izlemedim lakin bilgilendirici bir video olduğuna eminim. Şimdiden elinize sağlık. ^^

    • @skinnydev
      @skinnydev  4 หลายเดือนก่อน +1

      Çok teşekkür ederim

  • @batuhanartan
    @batuhanartan หลายเดือนก่อน

    Kalitesi yüksek ve Türkçe unity + code içerikleri görmek sevindirici, açıklamalar da gayet anlaşılır ve akıcı eline sağlık :) Kanalın daha da başarılı bir şekilde ilerleyeceğinden şüphem yok takipteyim :)
    Sadece videoyla ilgili sormak istediğim küçük bişe var;
    10 farklı class'ı inject etmem gerektiğinde method injection yerine [Inject] field kullanırsam 10 satırda tüm injection işlemlerimi tamamlarken, method injection kullandığımda bu 10 satır hala 10 satır olarak kalıyor çünkü sadece [Inject] field'larını yazmıyor oluyoruz, private tanımlamalar hala duruyor. Ek olarak 10 parametreli bir method yazmak zorunda kalıyoruz. Yani hem satır sayısı artıyor, hem de yeni bir injection gerektiğinde private field'ı eklemem yeterli kalmayıp her eklemede methodu güncellemem gerekiyor. Bu durumları düşündüğümüzde [Inject] field yerine method injection ile parametreleri girip toplu inject etmek arasında tam olarak nasıl bir kolaylaştırma oluyor ?

    • @skinnydev
      @skinnydev  หลายเดือนก่อน

      @@batuhanartan Öncelikle değerli yorumunuz için çok teşekkür ederim. Aslında herhangi bir kolaylaştırma olmuyor söylediğiniz durumda, sadece benim fikrimce kod okunurluğu bir nebze artıyor. Fakat tabii ki herkesin yazdığı kod kendine olduğu için ve iki işlem de aynı sonucu verdiği için istediğinizi seçmek size kalmış. Orada bence ibaresini kullanmayı unutmuşum muhtemelen, kendi fikirlerim yani sadece. Kusura bakmayın 😅

    • @batuhanartan
      @batuhanartan หลายเดือนก่อน

      ​ @skinnydev Est. ne kusuru ☺Teknik olarak gözden kaçırdığım bir durum varsa öğrenmek için sormuştum eleştiri amaçlı değil, Türkçe içerik olarak çok değerli bir kanal oluşturmuşsun çalışmalarının devamını merakla bekliyorum

    • @skinnydev
      @skinnydev  หลายเดือนก่อน +2

      @ Çok teşekkürler, Design Pattern serisi gibi bir Optimizasyon serisi hazırlıyorum, o da güzel olacak diye umuyorum 🙏

    • @bodoslama3567
      @bodoslama3567 14 วันที่ผ่านมา

      @@skinnydev "Optimizasyon serisi", Türk oyun sektörünün en çok ihtiyacı olan dersler.

  • @honorstainless8087
    @honorstainless8087 4 หลายเดือนก่อน

    Elinize sağlık hocam çok yararlı bir video olmuş. Zenject için devam videolarını da bekliyoruz

    • @skinnydev
      @skinnydev  4 หลายเดือนก่อน

      Çok teşekkürler. Seve seve.

  • @rickcarpenter6951
    @rickcarpenter6951 4 หลายเดือนก่อน

    Temel olarak cok iyi bir giris olmus. Bence devam edilmeli bolumlere. Eline saglik.

    • @skinnydev
      @skinnydev  4 หลายเดือนก่อน

      @@rickcarpenter6951 Çok teşekkürler 😊

  • @onurozulku4314
    @onurozulku4314 4 หลายเดือนก่อน

    Anlaşılır ve faydalı bi anlatım olmuş. Bu konuya dair bir seri çok iyi olur. Ağzına sağlık.

    • @onurozulku4314
      @onurozulku4314 4 หลายเดือนก่อน

      Inject birden fazla değişkeni olan classlarda kullanılabiliyor mu yoksa sadece singleton gibi mi kullanılabiliyor?

    • @skinnydev
      @skinnydev  4 หลายเดือนก่อน

      @@onurozulku4314Kullanımın bir sınırı yok istediğiniz gibi kullanabiliyorsunuz

  • @aobroot
    @aobroot 4 หลายเดือนก่อน

    Eline Sağlık uzun süredir katıl butonunu bekliyordum geldi 😊

    • @skinnydev
      @skinnydev  4 หลายเดือนก่อน +1

      Yaklaşık 1 yıldır açık katıl butonumuz 😁

    • @aobroot
      @aobroot 4 หลายเดือนก่อน

      @@skinnydev nasıl ya :D

  • @KeplersOrbit
    @KeplersOrbit 3 หลายเดือนก่อน

    Yine harika bir video olmuş. Eline sağlık.

    • @skinnydev
      @skinnydev  3 หลายเดือนก่อน

  • @heozkan
    @heozkan 4 หลายเดือนก่อน

    Ellerine sağlık valla bayadır aklımdaydı seninlede giriş yaptım, bu güzel video için teşekkür ederim 🤙🏻

    • @skinnydev
      @skinnydev  4 หลายเดือนก่อน +1

      Rica ederim, değerli yorumunuz için teşekkürler ☺

  • @ByteB3nder
    @ByteB3nder 4 หลายเดือนก่อน

    tertemiz video eline sağlık

    • @skinnydev
      @skinnydev  4 หลายเดือนก่อน

      Çok teşekkür ederim

  • @zfhresh3159
    @zfhresh3159 4 หลายเดือนก่อน

    Fazlasıyla etkili bir şeye benziyor hemen denemeye başlıyorum

    • @skinnydev
      @skinnydev  4 หลายเดือนก่อน

  • @TurkayYıldız-c5w
    @TurkayYıldız-c5w 4 หลายเดือนก่อน

    Mükemmel ellerine sağlık !!!

    • @skinnydev
      @skinnydev  4 หลายเดือนก่อน

      Çok teşekkür ederim

  • @ardahacfevzioglu9670
    @ardahacfevzioglu9670 4 หลายเดือนก่อน

    Hocam süper bilgilendirici video olmuş emeğinize sağlık 😎😎👏

    • @skinnydev
      @skinnydev  4 หลายเดือนก่อน

  • @fv4202x
    @fv4202x 4 หลายเดือนก่อน

    15:37 "...ki zaten serializefield'i kaldırdığım için o referans da gitti" maalesef öyle bir şey yok, o atama kalmaya devam ediyor. Private atamaları inspectordaki 3 noktadan kodu resetleyerek temizleyebilirsiniz. Bilginiz olsun.

    • @skinnydev
      @skinnydev  4 หลายเดือนก่อน

      Bilgi için teşekkürler ☺

  • @Ben-Resul
    @Ben-Resul 4 หลายเดือนก่อน

    Elinize sağlık çok faydalı bir video olmuş

    • @skinnydev
      @skinnydev  4 หลายเดือนก่อน

      ❤❤

  • @yunusaltunn
    @yunusaltunn 4 หลายเดือนก่อน

    Eline sağlık güzel video olmuş.

    • @skinnydev
      @skinnydev  4 หลายเดือนก่อน

  • @dev_evo
    @dev_evo 4 หลายเดือนก่อน

    OBAAA

    • @skinnydev
      @skinnydev  4 หลายเดือนก่อน

  • @rosegame2505
    @rosegame2505 2 หลายเดือนก่อน

    hep ben en ileri seviye oyunları yapmayı seviyorum supergirl oyunu çok farklı yapcam lazer buz üflemesi bir objeyi kaldırıp fırlatma uçma özeliği gibi bir çok detay olcak 3d unity best game engine 🙂

    • @skinnydev
      @skinnydev  2 หลายเดือนก่อน

      @@rosegame2505 Harika, başarılar

  • @faruk-can
    @faruk-can 4 หลายเดือนก่อน

    Monolarda kullanımı biraz overengineering olabilir sanki. Ama veri odaklı oyunlarda kesinlikle işe yarar.

    • @skinnydev
      @skinnydev  4 หลายเดือนก่อน +1

      Proje küçükse kesinlikle overengineering olur. Fakat proje büyük bir projeyse monolarda kullanımının da faydalarını gördüm diyebilirim. Değerli yorumunuz için teşekkürler ❤

  • @darkbf8493
    @darkbf8493 4 หลายเดือนก่อน

    Hocam bence arka plan müziği dikkat dağıtıcı. Video için teşekkürler.

    • @skinnydev
      @skinnydev  4 หลายเดือนก่อน

      Geri dönüş için teşekkürler. Daha sade bir şeyler araştırayım

  • @ayxanhasanov9941
    @ayxanhasanov9941 หลายเดือนก่อน

    Faydalı bir içerik olmuş eline sağlık. Ancak sanırım non monobehaviour'u non monobehaviour classtan çağıramıyoruz

  • @burakrucoglu6049
    @burakrucoglu6049 2 หลายเดือนก่อน

    Video çok iyi eline sağlık hocam. Ufak bir sorum var düşman birimleri için yaptığım statelerden birinde bunu nasıl kullanabilirim? Bu enemy birimlerimin saldırı durumunda çalışan script
    Object Pooldan nesne çekim işini singleten ile yapıyordum videoyu görünce bu sisteme geçmek istediim ama erişemiyorum. Ahanda kod bu :d
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using Zenject;
    public class EnemyAttackState : EnemyState
    {
    private Transform _playerTransform;
    private float _timer;
    private float _timeBetweenShots = 2f;
    private float _exitTimer;
    private float _timeTillExit;
    private float _distancetoCountExit = 3f;
    private float bulletSpeed = 10f;
    private PoolStorage poolStorage;
    public EnemyAttackState(Enemy enemy, EnemyStateMachine enemyStateMachine) : base(enemy, enemyStateMachine)
    {
    }
    // Dependency Injection ile PoolStorage'ı alın
    public EnemyAttackState(Enemy enemy, EnemyStateMachine enemyStateMachine, PoolStorage poolStorage)
    : base(enemy, enemyStateMachine)
    {
    this.poolStorage = poolStorage;
    }
    public override void AnimationTriggerEvent(Enemy.AnimationTriggerType triggerType)
    {
    base.AnimationTriggerEvent(triggerType);
    }
    public override void EnterState()
    {
    base.EnterState();
    Debug.Log("AttackStateEnemy");
    enemy.targetDir = (enemy.target.position - enemy.transform.position).normalized;
    // Hedef ile pozisyon arasındaki farkı hesaplayın, Y eksenini sıfırlayın
    Vector3 targetDir = enemy.target.position - enemy.transform.position;
    // Y eksenini sıfırlayarak sadece XZ düzleminde hesaplama yapıyoruz
    targetDir.y = 0;
    // Yön vektörünü normalize et (birim vektör yap)
    targetDir = targetDir.normalized;
    // Düşmanı hedefe doğru döndür (sadece yatay eksende)
    enemy.transform.rotation = Quaternion.LookRotation(targetDir);
    enemy.ChangeAnimationState(enemy.animatoinClass.ENEMY_SHOOT_AUTO);
    EnemyFireType(enemy.myWeapon.enemy_Gnnr_Type);
    }
    public override void ExitState()
    {
    base.ExitState();
    }
    public override void FrameUpdate()
    {
    base.FrameUpdate();
    Debug.Log("AttackStateEnemy");
    _timer += Time.deltaTime;
    if (_timer > _timeBetweenShots)
    {
    _timer = 0;
    // Havuzdan mermi al
    GameObject bullet = poolStorage.GetFromPool("bullet");
    bullet.transform.position = enemy.myWeapon.myBarrelT.position;
    // Hedefe yönlendir
    Vector3 targetDir = (enemy.target.position - enemy.myWeapon.myBarrelT.position).normalized;
    bullet.transform.forward = targetDir;
    // Kuvvet uygula
    bullet.GetComponent().AddForce(targetDir * bulletSpeed, ForceMode.Impulse);
    // Belirli bir süre sonra mermiyi havuza iade et
    poolStorage.StartReturnBulletCoroutine(bullet, 3f);
    }
    if (Vector2.Distance(enemy.target.position, enemy.transform.position) > _distancetoCountExit)
    {
    _exitTimer += Time.deltaTime;
    if (_exitTimer > 0)
    {
    enemy.StateMachine.ChangeState(enemy.ChaseState);
    }
    }
    else
    {
    _exitTimer = 0;
    }
    }
    private IEnumerator ReturnBulletToPoolAfterTime(GameObject bullet, float delay)
    {
    yield return new WaitForSeconds(delay);
    poolStorage.ReturnToPool(bullet);
    }
    public override void PhysicsUpdate()
    {
    base.PhysicsUpdate();
    }
    private void BulletFiring()
    {
    }
    private void BombExplosive()
    {
    Debug.Log("Spider bomb = ");
    enemy.myWeapon.ammoPrefab.SetActive(true);
    Collider[] colliders = Physics.OverlapSphere(enemy.transform.position, enemy.myWeapon.explosionRadius);
    foreach (Collider collider in colliders)
    {
    if (collider.tag == enemy.enemyGroupTag && collider.GetComponent())
    {
    DamageExplosive(collider.transform);
    Debug.Log("Spider bomb = " + collider.name);
    }
    }
    }
    private void DamageExplosive(Transform enemyObj)
    {
    TryModelController e = enemyObj.GetComponent();
    if (e != null)
    {
    e.Damage(enemy.myWeapon.damage);
    enemy.Die();
    enemy.myWeapon.damage = 0;
    }
    }
    private void LaserFiring()
    {
    }
    public void EnemyFireType(EnemyGunnerType enmyGnrType)
    {
    switch (enmyGnrType)
    {
    case EnemyGunnerType.Bullet:
    BulletFiring();
    break;
    case EnemyGunnerType.Laser:
    LaserFiring();
    break;
    case EnemyGunnerType.Bomb:
    BombExplosive();

    break;
    }
    }
    void OnDrawGizmosSelected()
    {
    Gizmos.color = Color.red;
    Gizmos.DrawWireSphere(transform.position, myWeapon.explosionRadius);
    }
    }

  • @cihangiryaman1391
    @cihangiryaman1391 4 หลายเดือนก่อน

    Visual studio'da kod(metin) düzenleme alanında kasmalar donmalar oluyor. Beni hayattan bezdirdi açıkçası. Sistemim i5 12.nesil. Bu islemciyi kullanan tanidiklarimda. Bu sorun yok

    • @skinnydev
      @skinnydev  4 หลายเดือนก่อน

      VSCode’a geçmeyi düşünebilirsiniz. Ben çok memnunum

    • @cihangiryaman1391
      @cihangiryaman1391 4 หลายเดือนก่อน

      @@skinnydev ara ara düşünüyorum bunu ama Visual Studio'nun kullanım kolaylığı insanı cezbediyor.

  • @semih-ze9uo
    @semih-ze9uo 4 หลายเดือนก่อน

    Hocam sizce referans verme ıle nesne oluşturm arasındaki fark nedir ? ikiside ayni işlevi gormuyor mu

    • @skinnydev
      @skinnydev  4 หลายเดือนก่อน

      Mono olmayan sınıflardan bahsediyorsunuz sanırım. Referans verme işleminde ek olarak new'lemezseniz hata fırlatır çünkü objeyi bulamaz. Nesne oluşturma dediğimiz şey ise zaten new'lemektir. Aralarındaki farkı böyle özetleyebilirim

    • @semih-ze9uo
      @semih-ze9uo 4 หลายเดือนก่อน

      @@skinnydev hocam public yapıp objeyı ustune bıraksak yanı soyle public Controller controller bununla Controller contoller=new Controller() arasındakı fark ne? public Controller controller bu referans verme olmuyor mu hıyerarsıde ustune bırakırız o gameObjectı bulur zaten

  • @sezerkar1216
    @sezerkar1216 4 หลายเดือนก่อน

    Hocam ikidir aynı şeyi yazıyorum kusura bakmayın ama compile time sıkıntısı çekiyorum en ufak bişey yazdığımda 20 sn beklemem gerekiyo library silmem yetmedi. ne yapmam gerekiyor sizinki gibi bi compile süresi görmem için

    • @gesat03
      @gesat03 4 หลายเดือนก่อน

      1. Güçlü bir işlemci
      2. SSD: unity ve proje aynı ssd de olmalı
      3. Project Settings => Editor => Enter Play Mode Options kutucuğunu işaretle

    • @skinnydev
      @skinnydev  4 หลายเดือนก่อน +1

      @@gesat03'ün de dediği gibi, bir de benim sistemim şuan güçlü bir sistem bu yüzden hızlı açılıyor, açılmadığı kısımları da editte kırpıyorum. Bu yüzden yanlış bir algı olmasın 😅

  • @bentbase
    @bentbase 4 หลายเดือนก่อน

    Hadi bakalım.

    • @skinnydev
      @skinnydev  4 หลายเดือนก่อน +1

  • @EmilAhadov
    @EmilAhadov 4 หลายเดือนก่อน

    More more more more more

    • @skinnydev
      @skinnydev  4 หลายเดือนก่อน

      🎉🎉🎉

  • @EmilAhadov
    @EmilAhadov 4 หลายเดือนก่อน

    Monolar için tek bir SO kullanmak daha mantıklı gibi geldi bakınca

    • @skinnydev
      @skinnydev  4 หลายเดือนก่อน

      Scriptable Object Installer diyorsan onun olayı bambaşka, diğer türlü anlayamadım 😁

  • @Developer566
    @Developer566 4 หลายเดือนก่อน

    Yandex games de herkese sponsorluk vermiş gerçekten bu kadar iyi mi ?

    • @skinnydev
      @skinnydev  4 หลายเดือนก่อน

      Keşfederek öğrenebiliriz 😊

  • @MET_X
    @MET_X 4 หลายเดือนก่อน

    singeletonun yerini tutmaz bence

    • @skinnydev
      @skinnydev  4 หลายเดือนก่อน

      Maalesef Singleton çoğu durumda bir Anti Pattern