İçindekiler:
- Adım 1: Kontrol Düğmelerini Arduino'ya Bağlama
- Adım 2: Arduino Leonardo'yu Kodlamak:
- Aşama 3:
- 4. Adım:
- Adım 5:
- 6. Adım:
- 7. Adım:
- Adım 8: Unity'de Hareketi Kodlama:
- 9. Adım:
- Adım 10:
- Adım 11:
- Adım 1/2:
- Adım 13:
- Adım 14: Işıkları Arduino'ya Bağlama
- Adım 15: Arduino Uno'yu Kodlamak
- 16. Adım:
- Adım 17:
- Adım 18: Işıkların Birlik Tarafını Kodlama:
- Adım 19:
- Adım 20:
- Adım 21:
- Adım 22:
- 23. Adım:
- Adım 24:
Video: Unity Oyununuza Cevap Veren Işıklı Arduino Oyun Denetleyicisi:: 24 Adım
2025 Yazar: John Day | [email protected]. Son düzenleme: 2025-01-13 06:58
İlk önce bu şeyi word'de yazdım. Bu, talimat verebilirliği ilk kez kullanıyorum, bu yüzden ne zaman söylesem: kod yaz, bu adımın en üstündeki resme atıfta bulunduğumu bil.
Bu projede 2 ayrı kod biti çalıştırmak için 2 arduino kullanıyorum çünkü sadece bir tane ile çalışırken biraz zorlandım.
Bunlar Uno ve Leonardo
toplamda bu, bu projeyi breadboard için ihtiyacınız olacak.
· 7 basma düğmesi
· 23 atlama teli
· 1 arduino Leonardo + usb kablosu
· 4 direnç · 4 led
· 1 arduino uno + usb kablosu
· 2 ekmek tahtası
Adım 1: Kontrol Düğmelerini Arduino'ya Bağlama
Bu parçayı bağlamak için neye ihtiyacınız olacak:
· 7 basma düğmesi
· 14 atlama teli
· 1 arduino Leonardo + usb kablosu
· devre tahtası
Düğmelerin takılması oldukça basittir ancak görüntü biçiminde görüntülenmesi çabucak bir karmaşaya dönüşebilir.
· İlk önce butonları yukarıdaki resimde işaretlediğim yerlere yerleştirin.
· İkinci olarak, arduino Leonardo üzerindeki yer yuvasından devre tahtasının eksi sırasına bir jumper bağlamak istiyorsunuz.
· Artık eksi satırın herhangi bir yerinden düğmenizin sağ pimi ile aynı hizada olan sıraya jumper bağlayabilirsiniz. bu ona güç besleyecektir.
· Ardından, düğmenizin sol pimi ile aynı hizada olan bir satırdan Leonardo'nun dijital giriş yuvalarına bir atlama teli bağlamak istiyorsunuz. Buradaki düğmeler için yuva 2 - 3 – 4 – 5 - 6 - 7- 8 kullandım
Resimde sadece 8 girişine giden teli gösterdim çünkü tüm tellerin birbirini kestiğini size göstermek çok dağınık bir resim haline geliyor.
Adım 2: Arduino Leonardo'yu Kodlamak:
Size bunun için Leonardo'yu kullanmamın nedenini anlatmak için. Bunun nedeni, Uno'nun bilgisayarın onu bir usb giriş aygıtı olarak tanımasını sağlayan belirli bir çipe sahip olmasıdır. Çok gibi bir klavye olurdu. Bu da, bu proje için programcılar olarak hayatımızı çok daha kolay hale getiren bir şey yapmamızı sağlıyor. Klavye öykünmesi. Aslında kontrol cihazımızdaki düğmelere basarken, bilgisayarı klavyedeki belirli tuşlara bastığımızı düşünmesi için kandıracağız.
Şimdi adım adım düşündüğünüz kodu yürüyeceğim.
Her şeyden önce, en üstte Keyboard.h'yi ekliyoruz. Bu, kodumuzda kullanacağımız klavye fonksiyonlarını kullanmamızı sağlayacaktır.
Aşama 3:
Daha sonra üzerinde kullanacağımız sayısal giriş slotlarını tanımlamamız gerekiyor.
Her düğme için Leonardo.
Ayrıca her birine öyküneceğim anahtarın adını verdim.
4. Adım:
Oradan kurulum işlevine giriyoruz. Bu
arduino başlangıçta ne yapar.
ilk önce seri portu açacak ve veri hızını 9600 bps'ye ayarlayacak olan Serial.begin'i yazıyoruz.
ve hepsini giriş olarak adlandırılmış pinler olarak tanımlıyoruz.
Adım 5:
Ve son olarak, olup olmadığını kontrol edecek olan döngü fonksiyonumuzu yazıyoruz.
düğmelere basılıyor ve arduino'ya buna nasıl yanıt vereceğini söylüyor.
İlk önce arduino'ya klavye işlevlerini kullanarak bize bakması gerektiğini söyleyen Keyboard.begin yazıyoruz.
6. Adım:
Sonra her buton için şöyle bir if/else ifadesi yazıyoruz.
Yani burada arduino'ya söylediğim şey şu: Kontrol cihazında sol tuşa basılıyorsa, bilgisayarı “a” tuşuna bastığımızı düşünmesini sağlayın ve durum böyle değilse, tuşu bıraktığımızı düşünmesini sağlayın.
Temel olarak bu kod bloğunu kontrol cihazınızdaki her düğme için tekrarlarsınız. her değişken için değişiklikler ve değişkenin taklit etmesi gereken anahtarlarla
7. Adım:
Bilgisayara buraya vurmasını söylediğimiz tuşlar W – A – S – D ki
PC oyunlarında ve E – Q – hareket için hemen hemen standarttır ve bu kodda “” olarak tanınan boşluk çubuğu, almak için kullandığım düğmelerdir - oyunumda kapatın ve ateşleyin. Bunları, oyununuz/denetleyiciniz için daha iyi çalıştığını düşündüğünüz tuşlarla değiştirmekten çekinmeyin.
Sonra son olarak arduino'ya hangi Keyboard.end'in kontrolünü durdurmasını söyleriz.
Adım 8: Unity'de Hareketi Kodlama:
Öncelikle bunu 2 boyutlu bir oyun için yaptığımı söyleyeyim.
göreceğiniz örnekler bunun için yapılmıştır. Esasen benim vektör2'leri kullandığım yerde, eğer 3d'de çalışıyorsanız, vektör3'leri kullanacaksınız demektir. çünkü 3 boyutlu hareketin ekstra boyutu hakkında endişelenmeniz gerekir.
Şimdi arduino tarafında Klavye öykünmesini kullanmamın nedeni, Unity'nin klavyede kullanabileceğimiz tuşları tanımak için yerleşik bir şeye sahip olmasıdır.
Projenizi birlik içinde açarsanız, Düzenle -> Proje ayarları -> Giriş'e gidin. Müfettişinizde giriş yöneticisini başlattığını görebilirsiniz. Eksenlere tıklarsanız, normalde şu anda yaptığımız gibi bilgisayar denetleyicileri için kullanılan bir dizi giriş adının açıldığını görebilirsiniz. Kullanacağımız 2 giriş, W-A-S-D tahmin ettiğinizi kontrol eden Yatay ve Dikey'dir.
İlk önce birlik sahneleri hiyerarşinizde oyuncunuz olacak bir nesne yapmak istiyorsunuz. Benim durumumda bu eğlenceli küçük adam olmak. Bu, ihtiyacınız olan her şey olabilir, ancak oyunumun amacı için bu adamı yaptım.
9. Adım:
Bu oyuncuya 2 şey vermek istiyorsunuz. Bir kutu çarpıştırıcısı 2d ve
bir Rigidbody 2d ve bunları yukarıdaki resim gibi olacak şekilde düzenleyin.
Adım 10:
Ardından, projeler klasörünüze gitmek ve bir
C# komut dosyası. PlayerMovement adını verdim.
Bu komut dosyasında 2 değişken tanımlayacaksınız. MoveSpeed adını verdiğim halka açık bir şamandıra. Hangisi ne kadar hızlı gideceğinizi belirleyecek. Ve RigidPlayer adını verdiğim özel bir Rigidbody2D. Bu, oyuncularınızın sert gövdesini arayacaktır.
Unity editörünüze ulaşmayı unutmayın, oynatıcınıza tıklayın ve bu yeni scripti denetçiye sürükleyerek ekleyin ve moveSpeed için bir sayı değeri ayarlayın.
Adım 11:
şimdi Start()'ınızda bir şey yapmak istiyorsunuz ve bu
RigidPlayer'ınızın ödeme yapan katı cisim 2d'nizi bulabildiğinden emin olun. Bunu aşağıdaki kod satırıyla yaparsınız:
Adım 1/2:
Sonra güncellemeye () geçiyoruz. İşte nereye gidiyoruz
Oyuncuyu hareket ettirmek için.
Bunu, Yatay (AD) ve Dikey (SW)'den negatif ve pozitif tuşlara bakacak ve bunu zorlamak için bir sayı olarak uygulayacak oldukça basit bir if ifadesiyle yapıyoruz ve oyuncumuzu içeri itmek için katı cisim 2d'yi koyacağız. bir yön. Bu sayı, moveSpeed değişkeni ile çarpılacaktır.
Adım 13:
Son olarak, oynatıcınızın ne zaman hareket etmeyi bıraktığından emin olmak istersiniz.
hiçbir şeye basmıyorsun. Bu çok hoşunuza gidiyor:
Şimdi, diğer 3 düğmenizi herhangi bir şey için kullanmak istiyorsanız, bunu bu if ifadesiyle yapın: if(Input. GetKeyDown(Keycode. Space))
boşluk tuşu için ve boşluk yerine diğer tuşlar için kullanmayı seçtiğiniz diğer tuşların harfini koyun.
Adım 14: Işıkları Arduino'ya Bağlama
·
Bu parçayı bağlamak için neye ihtiyacınız olacak:
· 9 atlama teli
· 4 direnç
· 4 led
· 1 arduino uno + usb kablosu
· devre tahtası
Işıklar için bağlantı Uno aracılığıyla yapılacaktır.
Yukarıdaki resim gibi görünecek:
Dirençleri LED'lerin uzun tarafına bağlarsınız. Ardından, uno üzerindeki dijital pin numarasından dirençlere bir jumper bağlarsınız. bu durumda 9 – 10 -11 -12 numaralı dijital pin yuvalarını kullandım, ışıkların koduna geldiğimizde bu numaralar alakalı olacaktır.
Oradan, yukarıdaki resimde siyah tel ile görüldüğü gibi, arduino Uno'nuzdaki yer yuvasından tahtanızdaki noktaya bir jumper bağlamak istiyorsunuz.
Ardından, her bir LED'in kısa ucuna giden 4 jumper'a sahip olmak istersiniz.
Adım 15: Arduino Uno'yu Kodlamak
Pekala ilk önce değişkenlerimizi tekrar tanımlayacağız
Yani önce ışıklarımız için hangi dijital girişleri kullanıyoruz. Ve myCol[20] adında bir karakter yapacağız.
16. Adım:
Daha sonra kurulumda Serial.begin'i tekrar yapmak istiyoruz. Tüm LED'lerimizi Çıkışa getirin ve başlangıçta hepsini kapatın.
Adım 17:
Ve son olarak döngü fonksiyonunuzu yazmak istiyorsunuz.
Bu, Arduino'nun seriden gelen herhangi bir veriyi iki olaydan biri gerçekleşene kadar okumasına neden olacaktır. Ya bir satır besleme karakteri algılandı; bu, 10'a ayarlanan ve ilk argüman olan veya belirli miktarda bayt okunan lf ile tanımlanır. Bu üçüncü argümandır ve bu örnek için yalnızca bir bayta ayarlanmıştır. Veriler, char olarak ayarlanmış ve limiti 20 olan myCol değişkeninde saklanır. readBytesUntil'de bu ikinci argümandır. Veya bunu açıklamanın başka bir yolu Serial.readBytesUntil(terminatorCharacter, buffer, byteLimit);
Ve if ifadeleri, birlik sinyali verdiğinde belirli ışıkların yanmasını sağlayacaktır. Bu durumda 4 farklı renkli ışığım var, bu yüzden yeşil LED'in yanması için g, mavi LED'in yanması için b, kırmızı LED'in yanması için r ve sarı LED'in yanması için y'yi birleştiriyorum.
Adım 18: Işıkların Birlik Tarafını Kodlama:
Bu konuya girmeden önce 2 şeyi tamamlayın.
1. arduino kodlama programınızda Araç -> Bağlantı Noktası -> seçeneğine gidin ve uno'nuzun hangi COM'da olduğunu kontrol edin. Benim durumumda COM3 (kodda bu önemli olacaktır)
2.in birlik Düzenle -> Proje ayarları -> Oynatıcı'ya gidin, ardından denetçide diğer ayarlara tıklayın Api uyumluluk Düzeyine gidin ve. NET 2.0 alt ağından sadece. NET 2.0'a geçin
Tamam bu yapıldı. Hadi buna girelim.
Hiyerarşinize sağ tıklayın ve Boş oluştur'a tıklayın.
Bu, bizim için bir komut dosyası tutmak için oyununuzda var olacak boş bir oyun nesnesi olacaktır. Bu nesneye Init adını verdim.
Adım 19:
Ardından projeler sekmenize gidin ve yeni bir C# betiği oluşturun
ve Gönderme olarak adlandırın.
Yaptığınız ilk şey, bunları kodunuzun kullanım bölümlerindeki satırlara yazmaktır:
System. IO. Port'ları kullanarak;
System. Threading kullanarak;
bu, SerialPort değişkenini kullanabilmemizi sağlar
Adım 20:
bu komut dosyasında aşağıdaki değişkenleri yapacağız. Şimdi COM3'ün orada olduğunu unutmayın, bu adımın başında tartıştığımız gibi bu sizin için farklı olabilir. 3'ü sizin için söylediği numarayla değiştirin.
Adım 21:
Başlangıçta komut dosyasına OpenConnection kullanmasını söylüyoruz.
birazdan yazacağımız fonksiyon
güncelleme daha çok bir testtir, ancak eklemek istiyorsanız, birliğe gönderilen mesajları test etmek içindir. Dürüstçe görmezden gelebilirsin.
Adım 22:
Bu OpenConnection işlevi için şimdi tamam. Bu sadece büyük
bağlantıyı açık tutan if/else deyimini sadece yazıldığı gibi kopyalayın ve iyi olmalısınız.
23. Adım:
Şimdi kontrol ettiğim arduino kodundan hatırla
birliğin kendisine göndereceği sinyaller.
işte bu olay burada. Benim durumumda 4 ışık bağladım, bu yüzden son derece basit 4 fonksiyon yazdım. Tek yaptıkları, arandıklarında arduino'ya bir mektup göndermek. Arduino bu harfi aldığında, söz konusu harfe karşılık gelen ışığı yakar.
Adım 24:
Bunu nasıl çağıracağımı merak ediyor olabilirsiniz.
işlev? Peki bunu, oyununuz için kullandığınız diğer c# betiklerinizin herhangi birinde basit bir satırla yaparsınız. Sending. NameFunctionhere();. Örneğin benim oyunumda oyuncunun görevi 4 renkli küre toplamak. Bu yüzden, birine yaklaştığında ve doğru düğmeye bastığında onu almasını ve arduinoya bu durumda Sarı kürenin alındığı sinyalini göndermesini sağlayan küçük bir senaryo yazdım. Bilsin diye, tamam, Sarı LED'i açmalıyım:
Bu tek satırlık kodu istediğiniz yere koyabilirsiniz. Oyun başladığında yanmasını istiyorsanız, başlat işlevine koyun. Öldüğünde yanmasını isteyin, oyuncuların ölümü için işlevinize koyun. Biraz etrafta deney yapın. Ekranı karıştırmadan toplamanız gereken küreleri takip etmek için ışıkları oyunun dışında bir tür kullanıcı arayüzü öğesi yapmayı seçiyorum.