Unity Oyununuza Cevap Veren Işıklı Arduino Oyun Denetleyicisi:: 24 Adım
Unity Oyununuza Cevap Veren Işıklı Arduino Oyun Denetleyicisi:: 24 Adım

Video: Unity Oyununuza Cevap Veren Işıklı Arduino Oyun Denetleyicisi:: 24 Adım

Video: Unity Oyununuza Cevap Veren Işıklı Arduino Oyun Denetleyicisi:: 24 Adım
Video: Kodlama Siteleri 2025, Ocak
Anonim
Unity Oyununuza Cevap Veren Işıklı Arduino Oyun Denetleyicisi
Unity Oyununuza Cevap Veren Işıklı Arduino Oyun Denetleyicisi

İ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

Kontrol Düğmelerini Arduino'ya Bağlama
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:

Arduino Leonardo'yu Kodlamak
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:

resim
resim

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:

resim
resim

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:

resim
resim

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:

resim
resim
resim
resim
resim
resim

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:

resim
resim

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:

Unity'de Kodlama Hareketi
Unity'de Kodlama Hareketi

Ö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:

resim
resim

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:

resim
resim

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:

resim
resim

ş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:

resim
resim

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:

resim
resim

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

Işıkları Arduino'ya Bağlamak
Işıkları Arduino'ya Bağlamak

·

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

Arduino Uno'yu Kodlamak
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:

resim
resim

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:

resim
resim

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:

Kodlama Işıkları Unity Side
Kodlama Işıkları Unity Side

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:

resim
resim

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:

resim
resim

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:

resim
resim

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:

resim
resim

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:

resim
resim

Ş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:

resim
resim

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.