Arduino ve Unity ile Nasıl Özel Oyun Kumandası Yapılır

  • Michael Cain
  • 0
  • 1480
  • 259
reklâm

Hiç kendi oyun kumandasını tasarlamak istedin mi? Düşündüğünden daha kolay!

Bu kısa projede, Unity oyun motoruyla kullanmak için basit bir özel oyun denetleyicisi kuracağız. Bu kontrolör bir Arduino Uno tarafından desteklenecektir, ancak birçok alternatiften birini kullanabilseniz de Arduino Satın Alma Rehberi: Hangi Kurulu Almalısınız? Arduino Satın Alma Rehberi: Hangi Kurulu Almalısınız? Dışarıda pek çok farklı Arduino tahtası var, kafanız karıştığı için affedilirsiniz. Projeniz için hangisini satın almalısınız? Bu Arduino satın alma rehberi ile yardım edelim! Bu proje için de orada. Ayrıca, nesnelerin düşmesini önlemek ve zamanı yavaşlatmak için kontrol cihazınızı kullanacağınız temel bir oyun yaratacağız..

Bu Proje İçin İhtiyacınız Olacak

  • Arduino veya benzeri bir mikrodenetleyici
  • 1 x 10k Ohm direnç
  • 1 x Anlık geçiş
  • 1 x Potansiyometre
  • Bağlama telleri
  • Bir breadboard
  • Birlik oyun motoru
  • Unity Asset Store'dan Uniduino eklentisi (30 YTL)
  • Yazmak istemiyorsanız, proje kodunu tamamlayın (Uniduino eklentisini içermez)

Bu şeylerin çoğu Arduino başlangıç ​​kitinde mevcuttur. Başlangıç ​​kitine sahip değilseniz, en iyi 4 Arduino Yeni Başlayanlar İçin En İyi 4 Başlangıç ​​Kitini seçmek için kılavuzumuza göz atın. 4 Arduino Yeni Başlayanlar için En İyi Başlangıç ​​Seti 4 Başlamak için kullanabileceğiniz birçok harika başlangıç ​​seviyesi Arduino projesi var. önce bir Arduino ve bazı bileşenlere ihtiyaç duyarsınız. İşte sizin için en uygun başlangıç ​​kitlerinden 4'ü….

Kontrolörünüzü istediğiniz kadar karmaşık hale getirebilirsiniz, ancak bu örnekte bir potansiyometre ve bir düğme ayarlayacağız - basit bir arcade oyununu kontrol etmek için mükemmel.

Kontrol Ünitesinin Montajı

Breadboard ve Arduino'nuzu aşağıdaki resimde gösterildiği gibi ayarlayın. Oyun kumandamız olarak kullanacağımız şey budur, ancak bir DIY midi kumandası ile aynı kurulumu kullanabilirsiniz. Arduino ile MIDI Kumandası Nasıl Arduino ile MIDI Kumandası Nasıl Yapılır müzik aletleri ve gürültü kutuları koleksiyonu, mütevazi Arduino, özel bir MIDI denetleyicisi oluşturmak için mükemmel bir araçtır. çok!

Arduino'nuzu hazırlamak

Her şeyi bağladıktan sonra, Arduino'nuzu USB üzerinden bağlayın. Arduino Yazılım IDE’de Araçlar> Yönetim Kurulu ve Araçlar> Liman kullanmak istediğiniz mikrodenetleyici ve bağlantı noktasını seçmek için. Arduino IDE, ihtiyacımız olan çizim ile birlikte gelir ve altında bulabilirsiniz. Dosya> Örnekler> Firmata> StandardFirmata. Yükle'yi tıkladığınızda gitmeye hazır olacaksınız.

Arduino'da yeniyseniz ve başınız hafifçe eriyorsa, Başlangıç ​​Kılavuzumuzu inceleyin Arduino ile Başlarken: Başlangıç ​​Kılavuzu Arduino ile Başlarken: Başlangıç ​​Kılavuzu Arduino, esnek, kolay kullanılan bir açık kaynaklı elektronik prototip platformudur. donanım ve yazılımı kullanın. Sanatçılar, tasarımcılar, hobiler ve etkileşimli nesneler veya ortamlar yaratmak isteyen herkes için tasarlanmıştır. bilgisayarınızla güzel bir şekilde konuşmanıza yardımcı olmak için.

Unity Projenizi Kurmak

Birlik'te, açık Pencere> Varlık Mağazası Unity'nin Varlık Mağazasına Unity Editor içinden erişmek için. Uniduino eklentisi için Varlık Mağazasını arayın. Bu eklenti, Unity içindeki Arduino pinlerinizden veri almanıza ve göndermenize olanak sağlar. Yazma sırasında eklenti 30 $ maliyeti. Bu projeyi eklentiyi satın almadan yapmak mümkündür, ancak daha karmaşık olmasına rağmen, eklentiyi daha rahat bulabilirsiniz.

Eklentinin oluşturucularından gelen bu video, ilk kurulumun yanı sıra, her şeyin çalıştığını test etme sürecinde sizi yönlendirir. Ayrıca Unity düzenleyicisini Windows'ta sıfırlamanız gerekebileceğini unutmayın.

Kontrol cihazımızı test etmek için aynı test panelini kullanabiliriz. Pin D2'yi GİRİŞ ve Dijital olarak ayarlayın. Daha aşağı, Pin A5'i ANALOG olarak ayarlayın. Potansiyometreniz ve düğmeniz, şimdi pin numaralarının yanındaki değerleri ekranda göstermelidir. İlerleme!

Şimdi kontrol edebileceğimiz bir şey yapmak için

Yani bir kontrolcümüz var, ama neyi kontrol edelim? Pekala, olasılıklar sınırsız, ancak bugün için yeni kontrol sistemimizi test etmek için çok basit bir kaçma oyunu yaratacağız. Oyun kurulumuna hızlı bir şekilde geçeceğiz, bu yüzden Unity motorunda tamamen yeniyseniz, Unity Oyun Programlama Başlangıç ​​Kılavuzu'nu bulabilirsiniz Unity Motor Bir Oyun Programlama: Yeni Başlayanlar Kılavuzu Unity İle Bir Oyun Programlama: Gelişenlerde indie oyun geliştirme peyzaj, Unity fiili bir standart bir şey olarak ortaya çıkmıştır: düşük maliyeti, kullanım kolaylığı ve geniş özellik seti hızlı oyun gelişimi için ideal kılar. senin rulmanlar almak için yararlı.

Amacınız, yeni yapılmış özel kontrolörünüzü kullanacak düşme küplerinden kaçınmak için kürenizi sola ve sağa çekmek olan çok basit bir oyun inşa edeceğiz..

Yeni bir sahne oluşturun ve Uniduino prefabrik Varlıklar> Uniduino> Prefabrikler senin hiyerarşinin içine sok ve Uniduino prefabrikini hiyerarşinin içine sok. Oyunumuz ve oyuncumuz arasındaki konuşmayı yapmak için orada ihtiyacımız var..

Birlik hiyerarşisinde, tıklayın Oluştur> Küre ve Müfettiş'teki Dönüştür sekmesini oyun ekranının altına taşımak için kullanın.

Kodlama Zamanı

Şimdi bu partiye bazı kodlar eklemek için. Hiyerarşi alanında küre seçiliyken, Bileşen Ekle> Yeni Komut Dosyası Müfettiş penceresinin altında. Adını sen koy sphereMover ve seç C keskin açılır menüden. Click Yarat ve Ekle ve script GameObject'e eklenecek. Komut dosyasını açmak ve bu kodu girmek için üzerine çift tıklayın:

UnityEngine kullanarak; System.Collections kullanarak; Uniduino kullanarak; public class sphereMover: MonoBehaviour // Başlıklar kesinlikle gerekli değil, ancak Müfettiş'te hayatı kolaylaştırıyorlar. [Başlık ("Arduino Değişkenleri")] // Arduino'yu halka açık Arduino arduino olarak ilan etmemiz gerekir; // potansiyometremizin pin numarası için bir tamsayı bildirmemiz gerekir, // bu değişkenleri genel yapmak, onları daha sonra düzenleyicide değiştirebileceğimiz anlamına gelir // eğer arduino public int potPinNumber; // potansiyometre değerini (0 - 1023) tutmak için bir değişken değişken - genel değişkenlik potValue; // daha sonra potValue değerini kapsülümüzün y pozisyonuna getirip, bu halka açık float mappedPot değişkeninde tutacağız; // bizim düğme pinimiz için public int public int buttonPinNumber; [Header ("Sphere Variables")] // ekranımızın genel yüzleri için daha önce not ettiğimiz değerleri saklayan değişkenler leftEdge; halka açık yüzer hakkıEdge; // Bunu başlatma için kullanın void Start () // ve Arduino Değişkeninden başlayarak başlayacağımızı başlat. // biz sadece bir arduino kullanıyoruz, bu yüzden onu almak için Arduino.global'ı kullanabiliriz. arduino = Arduino.global; arduino.Setup (ConfigurePins);  void ConfigurePins () // Arduino pinini potansiyometremiz için analog olacak şekilde yapılandırın arduino.pinMode (potPinNumber, PinMode.ANALOG); // Arduino'ya potansiyometre değerimizdeki herhangi bir değişikliği rapor etmesini söyle arduino.reportAnalog (5, 1); // Button pin'i yapılandırın arduino.pinMode (buttonPinNumber, PinMode.INPUT); arduino.reportDigital ((byte) (buttonPinNumber / 8), 1); 

Kod yorumlarını okumak için bir dakikanızı ayırın. Şimdiye kadar Arduino'muz, pimleri ve Küremiz için bazı değişkenler ilan ettik. Biz de kullandık
Arduino'yu çalışma zamanında başlatmak için Start ve ConfigurePins yöntemleri. Senaryomuzu kurtaralım ve Birlik editörüne geri dönelim ve neyin değiştiğini görelim.

Artık genel değişkenlerimizi Müfettiş penceresinde görebiliyoruz. Bize daha sonra yardımcı olmak için bu aşamada neler girebileceğimizi görelim. Arduino'da hangi zarın kullandığımızı daha önceki yapımızdan biliyoruz, onlara girebiliriz. Ayrıca, denememizden, küremizin sola ve sağa gitmesini ne kadar istediğimizi bildiğimizi biliyoruz, böylece ekrandan düşmez. Şimdi bu değerleri girelim.

Hayatın İlk Belirtileri

Aslında Birlik Editörünün içindeki Arduino değerlerimizi görmenin zamanı geldi. Şimdilik, sphereMover komut dosyasının Güncelleme işlevine bir satır kod ekleyebilir ve komut dosyasını yeniden kaydedebiliriz.

void Update () // Arduino'nun potansiyometremizden okuduğu değeri potValue değişkenimize atarız potValue = arduino.analogRead (potPinNumber);  

Artık potValue değişkenimizi her karede güncellediğimize göre, Unity Inspector'da değerini gerçek zamanlı olarak görebiliriz. Bir test yapmadan önce, Uniduino fişinin doğru bağlantı noktasını dinlediğini kontrol etmek için şimdi iyi bir zaman olurdu. Heirarchy'deki Uniduino'ya tıklayın ve Müfettiş'teki Port Adını kontrol edin. Boşsa, Arduino'nuz için doğru port numarasını girin. Bu durumda sizin için farklı olsa da, COM4 idi. Emin değilseniz Arduino IDE'yi kullanın..

Hiyerarşideki kürenizi seçin ve ekranın üstündeki Oynat düğmesine tıklayın. Sistemin başlatılması için birkaç saniye gerekir, daha sonra potansiyometreyi hareket ettirirken denetçideki Pot Value değişken değişimini görmeye başlamanız gerekir..

Şimdi konuşuyoruz! Şey, kesinlikle Birlik ve Arduino konuşuyor, ama kim sayıyor? Bu ana kadar elinizde bulunan ve denetçideki değer değişimini göremiyorsanız, kurulum adımlarını gözden geçirin ve Arduino'nuz için doğru Portu seçtiğinizden emin olun.

Bu Küreyi Taşıyalım

Şimdi potValue değişkenini güncellediğimize göre, bu değeri küremizi hareket ettirmek için kullanmak istiyoruz. Potansiyometre tamamen sola döndüğünde, kürenin ekranın sol tarafında olmasını ve bunun tersi olmasını isteriz. Birlik içindeki nesneler, Transform.position öğelerinin değerleriyle belirlenen Vektör uzayında bir noktada konumlandırılır. Aşağıdaki resimde, kürenin sola en uzak noktada olduğu yerde isteriz, konum vektörünün 9.5, -4, 0 olduğunu görebilirsiniz.

Kürenin X konumunu etkilemek istiyoruz. Ne yazık ki, potansiyometremizdeki değerleri doğrudan kullanmak işe yaramaz, çünkü potansiyometre tamamen sola doğru giderken 0 değerini verir - bu da küremizi ekranın tam ortasına yerleştirir. Diğer uçta ise, potansiyometrenin en yüksek değeri olan 1023, küpü ekranımızın sağına yerleştirir. Yararlı değil. Burada ihtiyacımız olan biraz matematik..

Birlik Sizin İçin Yapacakken Neden Matematik Yapın??

Dışarıda olanlar için saçma sapan sayılarla kaplı bir kağıda bakmayı hayal ediyorlar (bazı harika web siteleri olsa da, Matematik Öğrenmeniz Gereken 20 İnternet Adım Adım Matematik Öğrenmeniz Gereken 20 İnternet Adım Adım Her seviye için en iyi siteler, böylece sistematik olarak öğrenebilir, her seferinde bir seviyedeki matematiği daha iyi kavrayabilir ve eğlenebilirsiniz! Potansiyometre değerlerimizi küremizin X pozisyonuna uygun olacak şekilde yapmanın bir yoluna ihtiyacımız var. Neyse ki, bir kullanabilirsiniz Uzatma yöntemi.

Uzatma Yöntemi, bizim için belirli bir iş yapan bir komut dosyasıdır. Bu durumda, sahip olduğumuz değerleri veririz ve bunları birbirimizle eşlenmiş, kullanıma hazır hale getirilmiş olarak döndürür. sphereMover senaryo. Proje panelinin üstünde, tıklayın Oluştur> C # Komut Dosyası ve ExtensionMethods olarak adlandırın. Komut dosyasına aşağıdaki kodu girin:

UnityEngine kullanarak; System.Collections kullanarak; public static sınıfı ExtensionMethods // kullanışlı dandy Remapper işlevi public static float Remap (bu float değeri, 1'den float, 1'den flo'a 1, 2'den 2'ye, 2'den float'a) return (value - from1) / (to1 - from1) * (to2 - 2'den + 2'ye; 

Komut dosyasını kaydedin ve sphereMover komut dosyasına geri dönün. Potansiyometre değerlerimizi oyunumuzda kullanılabilir değerlere dönüştürmek için artık bu Remap işlevini Güncelleme işlevimizdeki ExtensionMethods komut dosyasında kullanabiliriz. PotValue değişkenini yeni atadığımız yerin altına aşağıdakini yazın:

Bilgi istemi Remap'ımızın iki set From ve To değerleri aldığını ve birlikte haritaladıklarını gösterir. Değerlerimizi buna girebiliriz.

mappedPot = potValue.Remap (0, 1023, leftEdge, rightEdge);

Komut dosyanızı kaydedin, Birlik düzenleyicisine geri dönün ve oynat düğmesine basın. Potansiyometreyi hareket ettirdiğinizde Mapped Pot değişkeninin Sol ve Sağ Kenarlarımız için belirlediğimiz değerlere karşılık gelecek şekilde değiştiğini görmelisiniz. Arkanıza yaslanın ve ExtensionMethods betiğinize teşekkür edin. Görünürde hesap makinesi değil.

Not: Değerlerinizin tersine döndüğünü fark ediyorsanız, potansiyometreniz tamamen sağa olduğunda Mapped Pot değişkeniniz için negatif bir değer alıyorsanız, potansiyometrenizi yanlış ayarlamış olabilirsiniz. Neyse ki, bunu herhangi bir kablolama yapmadan düzeltebilirsiniz. Değerleri yeniden eşleştirdiğinizde basitçe değiştirebilirsiniz:

Şimdi nihayet kullanılabilir değerlere sahibiz. Şimdi tek yapmamız gereken bu değerleri küremizin X pozisyonuna atamak:

// Eşlenen pot değerini kürenin x pozisyonuna atayın transform.position = new Vector3 (mappedPot, transform.position.y, transform.position.z);

Komut dosyanızı kaydedin, Unity editörüne geri dönün ve play tuşuna basın. Potansiyometrenizi kullanarak Küre'nizi sola ve sağa hareket ettirebilmeniz gerekir.!

Düğmeyi Çalışmak

Artık küremiz hareket ediyor, dar bir noktaya geldiğimizde işleri biraz yavaşlatmanın bir yolu olmaz mıydı? Oyunumuzdaki zamanı yavaşlatmak için butonumuzu kullanacağız. SphereMover komut dosyanızı açın ve bu kodu Güncelleme işlevinize ekleyin

// Eğer Birlik, düğmeye basıldığını tespit ederse, zaman ölçeği yavaşlar, eğer (arduino.digitalRead (buttonPinNumber) == 1) Time.timeScale = 0.4f;  else Time.timeScale = 1.0f;

Şimdi oyunumuzun mekaniğine sahibiz, hadi bazı engeller ekleyelim! Kürenin doğal düşmanı olan küpü kullanacağız. Hiyerarşide, tıklayın Oluştur> 3d Nesne> Küp. Küpün müfettişinde, Bileşen Ekle> Fizik> Rigidbody. Sert cismin Sürükleme değerini 5 olarak ayarlayın. Ayrıca, denetçideki Kutu Çarpıştırıcısı bileşeninin altında, Tetikleme Olduğunu seçin. Bu, Küre ile çarpışmaları tespit etmemize olanak sağlayacaktır..

Küpte bir komut dosyası oluşturun ve onu çağırın collideWithSphere, betiği açın ve bu kez ihtiyaç duymayacağımızdan Başlat ve Güncelle işlevlerini silin. Bu kodu giriniz:

UnityEngine kullanarak; System.Collections kullanarak; kamu sınıfı collideWithSphere: MonoBehaviour void OnTriggerEnter (Diğer Collider) Destroy (other.gameObject); 

OnTriggerEnter, tetikleyici çarpıştırıcısı başka bir çarpıştırıcıya çarptığında bir mesaj gönderir. Bu örnekte, dokunduğu her şeyi yok etmesini söylüyoruz. Komut dosyasını kaydedin ve Unity editörüne geri dönün. Küpü hiyerarşiden Proje paneline sürükleyin. Hiyerarşideki küp metninin maviye döndüğünü fark edeceksiniz. Bunun nedeni bir prefabrik oluşturduk ve onu projemize kaydettik. Küpünüzü hiyerarşiden şimdi silin.

Şimdi tek ihtiyacımız olan, küpleri doğuracak bir senaryo. Hiyerarşide tıklayın Oluştur> Boş Oluştur, ve Müfettiş'deki Oyun Yöneticisine yeniden adlandırın ve gameManager adlı bir komut dosyasını ekleyin. Komut dosyasını açın ve bu kodu ekleyin:

UnityEngine kullanarak; System.Collections kullanarak; public class gameManager: MonoBehaviour // prefabrik tutma değişkeni, genel GameObject küpünü oluşturmak istiyoruz; // bazı değişkenlerin herhangi bir küpün nasıl ortaya çıkacağına karar vermesini istiyoruz // ve üstümüzde ne kadar yüksek olduklarını kamuoyunda görmemizi istiyoruz int int numberToSpwan; halka açıklık yüzer en düşükSpawnheight; halka açık en yüksek Şalter yüksekliği; // Bunu başlatma için kullan void Start () için (int i = 0; i < numberToSpwan; i++)  Instantiate(cube, new Vector3(Random.Range(-9, 9), Random.Range(lowestSpawnheight, highestSpawnheight), 0), Quaternion.identity);   // Update is called once per frame void Update ()   

Komut dosyasını kaydedin. Editöre geri döndüğünüzde, hiyerarşideki Oyun Yöneticisini seçin ve küp prefabrikinizi proje panelinden Inspector'daki Cube değişkenine sürükleyin. Yumurtladığınız değerleri de burada doldurun. İstediğiniz kadar zor veya kolay hale getirmek için onunla keman yapabilirsiniz. Uniduino'nun başlamasını sağlamak için en düşük küplerinizin yeterince yüksek olmasına dikkat edin - hareket edebilmeniz için oyunu kaybetmeniz sinir bozucu olabilir.!

Bitmiş proje

Şimdi oyuna bastığınızda, küpler sizin üzerinizde doğacak ve düşecek. Potansiyometreyi onlardan kaçınmak için ve düğmenizi zamanı yavaşlatmak için kullanabilirsiniz.

Bu projede, bir Arduino ile özel bir kontrolör oluşturduk, Unity ve Uniduino ile iletişim kurduk ve test etmek için basit bir oyun yarattık. Buradaki kavramlar neredeyse her projeye uygulanabilir ve özel kontrol cihazlarında uzmanlaşmış oyun sıkışmaları bile vardır.

Arduino ve Unity ile neredeyse her şeyden özel bir kontrolör oluşturabilirsiniz. Bir uzay aracını kontrol eden bir hi-fi yarattın mı? Bir platform oyununu kontrol eden bir ekmek kızartma makinesi?

Böyle bir proje yaptıysanız, görmeyi çok isterim! Aşağıdaki yorumlara gönderin!




Henüz no comments

Modern teknoloji hakkında basit ve uygun fiyatlı.
Modern teknoloji dünyasında rehberiniz. Her gün bizi çevreleyen teknolojileri ve araçları nasıl kullanacağınızı ve Internet'te ilginç şeyleri nasıl keşfedeceğinizi öğrenin.