Artık 3B dünyanız var, bu eğitimin bu bölümü size bir para toplama mekanizması tanımlamak için ilk senaryonuzu nasıl ekleyeceğinizi öğretir.Bu mekanizma, oyuncuların para toplamasına izin verir ve yakın zamanda toplanmış bir para toplamasını devre dışı bırakır.
Paraları oluşturun
Herhangi bir şeyi senaryolaştırmadan önce, paralarınız olarak kullanmak için dünyada yer tutucu nesneleriniz olması gerekir.Önceki bölümde yaptığınız deniz yığın platformları gibi, paralar basit Part nesneler olabilir.
Paraları oluşturmak için:
Araştırmacı penceresinde, Dünya klasörüne yeni bir klasör ekleyin, ardından adını Paralar olarak değiştirin.
Bir silindir parçasını Altın klasörüne ekleyin, ardından parçayı Altın olarak yeniden adlandırın.
Parçayı seçin, ardından Özellikler penceresinde,
- Set TuğlaRenk to Altın .
- Malzeme Metal 'e ayarlayın.
- Boyutu 0.6, 8, 4.
- Devre dışı bırak CanCollide .Bu, motorun diğer parçaların para içinden geçebileceğini söyler, yani oyuncular onları toplamak için para üzerinden yürüyebilir.
- Sabitlenmiş etkinleştirin.Bu, motorun asla fizikle ilgili bir simülasyon nedeniyle para konumunu değiştirmemesini söyler, yani oyuncular konumunu etkilemeden paraya dokunabilir.
Birkaç para daha kopyalayın ve test için haritanın etrafına yerleştirin.
Silindir parçalarınız artık para gibi görünüyor ve fizik simülasyonunu engelliyor, ancak oyuncuların onları toplayabilmesi için parçalara mantık eklemelisiniz.
Senaryo oluştur Create the script
Paraların toplanabilir olması için, onlara dokunan oyunculara tepki vermek istiyorsunuz.Roblox Motoru, bir şey bir paraya dokunduğunda sizi bilgilendirebilir, ancak bunu bir senaryoda belirtmeniz gerekir.Bir senaryo oluşturmak için:
Gezgin penceresinde, Sunucu Kod Hizmeti üzerine gelin ve ⊕ düğmesine tıklayın. Bir bağımsız menü görüntülenir.
Kontekst menüsünden, Komut Dosyası seçin.Yeni bir senaryo, Sunucu Kript Hizmeti altında görüntülenir ve motorun kodu sunucuda çalıştırmasını sağlar ve müşterilerin kodlara erişmesini engeller.
Komut dosyasını CoinService olarak yeniden adlandırın.
Varsayılan kodu aşağıdaki kodla değiştirin:
-- Hizmetler ve değişkenlerin başlatılmasılocal Workspace = game:GetService("Workspace")local Players = game:GetService("Players")local coinsFolder = Workspace.World.Coinslocal coins = coinsFolder:GetChildren()local COOLDOWN = 10-- Etkinlik işleyicisini tanımlamalocal function onCoinTouched(otherPart, coin)if coin:GetAttribute("Enabled") thenlocal character = otherPart.Parentlocal player = Players:GetPlayerFromCharacter(character)if player then-- Oyuncu bir para dokunducoin.Transparency = 1coin:SetAttribute("Enabled", false)print("Player collected coin")task.wait(COOLDOWN)coin.Transparency = 0coin:SetAttribute("Enabled", true)endendend-- Etkinlik dinleyicilerini ayarlamafor _, coin in coins docoin:SetAttribute("Enabled", true)coin.Touched:Connect(function(otherPart)onCoinTouched(otherPart, coin)end)endŞimdi, bir oyuncu herhangi bir para dokununca, para 10 saniye boyunca kaybolur ve çıktı günlüğü Player collected coin basar.
Kod açıklamasıAşağıdaki bölümler, senaryonun daha ayrıntılı olarak nasıl çalıştığını açıklar.
Hizmetleri ve değişkenleri başlat
Muhtemelen başka dillerde yazdığınız birçok kod gibi, senaryonun en üstünde daha sonra ihtiyacınız olacak değişkenleri tanımlarsınız.Kodumuz takip edilenyapar:
Tüm paralara referans alın - Ardından, 3B çalışma alanı tüm para nesnelerine GetChildren() yöntemiyle referans verir.Bu yöntem, ilişkili olduğu nesneye ait her şeyi içeren bir dizi döndürür, ki bu durumda önceden oluşturduğunuz Workspace.World.Coins klasörüdür.
Küresel bir değişken tanımlar - COOLDOWN değişkeni, toplandıktan sonra bir parayı devre dışı bırakma süresini tanımlamak için daha sonra kullanılır
Hizmetler ve Değişkenlerin Başlatılmasılocal Workspace = game:GetService("Workspace")local Players = game:GetService("Players")local coinsFolder = Workspace.World.Coinslocal coins = coinsFolder:GetChildren()local COOLDOWN = 10...
Etkinlik işleyicisini tanımlayın
Roblox Motoru fiziksel olarak 3B dünyayı simüle eder ve görüntüleme, fizik ve ağ ile ilgili olayları ele almak için birçok mantığı idare eder.Bu olaylardan bazıları sırasında kendi mantığınızı yazmakla ilgileniyorsanız, motorun geri kalanını yaparken onları dinleyip ele alabilirsiniz.Bu durumda, dokunulan para ile ilgili olayları dinler ve ele alırsınız.Senaryo, bu olayın ele alınması için onCoinTouched() yöntemindeki mantığı tanımlar, ki bu takip edilenyapar:
Paranın etkinleştirilip etkinleştirilmediğini tespit eder - Her Instance 3B dünyada nesnenin var olup olmadığını tanımlayan bir Enabled booleen özniteliğe sahiptir.Örnek özniteliklerini GetAttribute() yöntemi ile alabilirsiniz.
Bir oyuncunun para dokunduğunu algılar - Eğer bir para etkinleştirilmişse, yöntem oyuncunun para dokunduğu nesneyi gerçekten bir oyuncu olup olmadığını kontrol etmek için oyuncu hizmetini kullanır.Bir dokunma olayı meydana geldiğinde, Roblox Motoru para ile temasa geçen nesneyi bir otherPart parametre olarak geçer.Senaryo, otherPart ebeveyninin bir oyuncuya ait olup olmadığını kontrol eder.
Bir oyuncu ona dokunduğunda para devre dışı kalır ve 10 saniye sonra yeniden etkinleştirilir - Son olarak, bir oyuncu para dokunduğunda, yöntem para devre dışı kalır, 10 saniye bekler ve ardından koleksiyoniçin para yeniden etkinleştirir. task.wait() , kod yürütmesini tamamen duraklatmadığı için wait() yerine kullanılır, böylece diğer işlemlerin iş parçacıklarının aynı anda çalışmasına izin verir.
Etkinlik Elemanını Tanımlamalocal function onCoinTouched(otherPart, coin)if coin:GetAttribute("Enabled") thenlocal character = otherPart.Parentlocal player = Players:GetPlayerFromCharacter(character)if player then-- Oyuncu bir para dokunducoin.Transparency = 1coin:SetAttribute("Enabled", false)print("Player collected coin")task.wait(COOLDOWN)coin.Transparency = 0coin:SetAttribute("Enabled", true)endendend
Etkinlik işleyicisini bağla
Tüm simüle edilmiş 3B nesneler BasePart'dan miras alır ve bu nedenle bir Touched() etkinliği vardır.Aşağıdaki döngü, takip edilenişlemleri yaparak her parçacığın dokunma etkinliğine onTouchedEvent() el eleçi bağlar:
Tüm paraları döngüye sokun - Genel döngü kullanarak her bir parayı döngüye sokun.
Elektronik cihazı olaya bağlayın - Döngünün her dönüşünde, para varsayılan olarak etkinleştirilir, bu nedenle deneyimin ilk başlangıcı sırasında 3B dünyada görünür.onCoinTouched() işlemci yöntemi de para olayı her meydana geldiğinde çalışması için para olayının Touched etkinliğine bağlıdır.Motor bir dokunuş tespit ettiğinde, ayrıca objeye dokunan nesneyi de geçer, otherPart .
Etkinlik işleyicisini bağlamafor _, coin in coins docoin:SetAttribute("Enabled", true)coin.Touched:Connect(function(otherPart)onCoinTouched(otherPart, coin)end)end
Mekaniği test et
Para koleksiyon mekanizmasının niyetine uygun çalışıp çalışmadığını görmenin zamanı geldi. Deneyiminizi test etmek için:
Araç çubuğunda, Oyna düğmesine tıklayın. Studio oyun testi moduna girer.
Karakterini bir para dokunmak için hareket ettir.Eğer senaryolarınız doğru çalışıyorsa, Çıkış penceresi Player collected coin görüntüler ve para yeniden görünmeden önce 10 saniye boyunca kaybolur.