Aracılığıyla paylaş


Mesh Görsel Betik Oluşturma Programcı Kılavuzu

Görsel Betik oluşturma genel bakış makalesine gidin

Sınırlamalar

  • Unity işlevselliğinin yalnızca bir alt kümesi görsel betiklere sunulur.
  • Basit olmayan türlere sahip değişkenler ve özellikler (nesne başvuruları dahil) otomatik olarak paylaşılamaz. Bu konuda daha fazla bilgi edinmek için aşağıdaki Paylaşım ve ağ oluşturma bölümüne bakın.

Hello World

Oluşturabileceğiniz en basit görsel betik, yalnızca bir ileti kutusu açan betiktir:

Merhaba Dünya örneğin görsel betik grafiğinin ekran görüntüsü

Mesh'te şöyle görünür:

Merhaba Dünya ve Tamam düğmesinin görüntülendiği bir açılan iletişim kutusu içeren Mesh tarayıcı penceresi

Mesh Görsel Betik oluşturma Merhaba Dünya sahnesinin açık olduğu Unity Düzenleyicisi'nin ekran görüntüsü.

Betiklerinizi test etme

Sahnenizi Mesh'e yüklemeden önce, Mesh Öykünmesi ile Oynatma Modu'nu kullanarak bölünmüş ekran modunda birden çok istemcide bile görsel betikler geliştirebilir ve test edebilirsiniz.

Düzenleyici'de görsel betik tanılaması

Dönüştürme hiyerarşisinde Betik Makinesi olan bir GameObject seçildiğinde Mesh, Denetçi panelinin alt kısmındaki Mesh Görsel Betik Tanılama panelini görüntüler:

Mesh Görsel Betik tanılama panelinin ekran görüntüsü

Tanılama paneli, betiklerinizin Mesh'te düzgün çalışmasını engelleyebilecek uyarılar veya hatalar hakkında anında geri bildirim sağlar.

Geçerli sınırlama: Tanılama panelinin gelecekteki sürümleri, görsel betiğin paylaşılan değişkenleri ve özellikleri kullanmasına ilişkin içgörüler verebilir ve ek tanılama ve uyarılar görüntüleyebilir.

Mesh'e yükleme

Görsel betikler içeren sahneleri karşıya yüklemek için Mesh Uploader'ı kullanın. Yükleyici'yi açmak için Mesh Araç Seti menüsünde Ortamlar'ı seçin.

Not: Mesh Uploader, karşıya yüklemeden önce görsel betikleri doğrular ve herhangi bir görsel betikte doğrulama hataları olduğunda karşıya yüklemeyi reddeder. Ayrıntılı tanılamalar Konsol'a gönderilir.

Paylaşım ve ağ

Paylaşılan ve yerel betik durumu

Mesh, ağ iletişimi olmadan çalışacak şekilde tasarlanmış Unity Görsel Betiği'ni kullanır. Görsel betikler her istemcide bağımsız olarak çalışır. Ancak kullanıcıların Mesh deneyimi paylaşılır; tüm kullanıcılar, tüm istemcilerde aynı görünen tek bir paylaşılan sahne yaşar.

Görsel betiğin yürütülmesinin etkisi, sahnenin durumunu nasıl değiştirdiğinden kaynaklanır.

Varsayılan olarak Mesh, bir istemcideki görsel betikler tarafından yapılan sahne değişikliklerini otomatik olarak diğer tüm istemcilere çoğaltır. Bir sahnede paylaşılan her şeyin yanı sıra, bazı durum her istemcide (başka bir deyişle yerel) bağımsız kalır.

Yerel değişiklikler, istemcilerden gelen değişikliklerden geçici olarak önceliklidir. Örnek: Bir nesneyi yerel olarak animasyonlandırmaya devam ederseniz, diğer istemcilerden gelen değişiklikler yerel animasyonunuzun gizliliğinin tehlikeye atılmasına neden olmaz.

Bazı otomatik güncelleştirme hızı sınırlamaları vardır. İstemci, henüz uçuştayken ek güncelleştirmeler göndermez; sunucu üzerinden gidiş dönüş başına bir güncelleştirme gönderilir. Bu, pratik durumlarda saniyede yaklaşık beş ila altı güncelleştirmeye eşittir. Başka bir deyişle, bir istemci tarafından yönlendiren düzgün bir animasyon diğer istemcilerde düzgün görünmeyecek. En iyi yöntem, düzgün animasyonları yerel olarak, ideal olarak görsel betikler aracılığıyla değil, normal Unity animasyon sistemi aracılığıyla yapmaktır.

Paylaşılan durumun nihai tutarlılığı garanti edilir (istemcilerin durumları geçici olarak farklı olsa bile).

Yerel durum:

  • Doğal yerel durum – sesler, kullanıcı arabirimi, işleme.
  • Kullanıcı tarafından denetlenen yerel durum – Yerel Betik Kapsamı bileşeniyle işaretlenmiş alt sahneler.
  • Teknik yerel durum – sahne hiyerarşisinin parçası olmayan nesneler (örneğin, işleyici malzemeleri, varlıklar).

Paylaşılan durum:

  • Görsel betik değişkenleri ve sahne hiyerarşisinin parçası olan GameObjects ve sahne bileşenlerinin özellikleriyle sınırlıdır.
  • Yalnızca basit türlerin değişkenleri ve özellikleri çoğaltılabilir: tamsayılar, kayan nokta sayıları, boole'lar, dizeler, Color, Vector24/3/, Quaternion, Matrix4x4ve .Rect

Paylaşılan durumda yapılan tüm değişiklikler ağ üzerinden gönderilir. Bu, ağ trafiğini artırır ve dikkatsizce kullanıldığında önemli ölçüde bant genişliği tüketebilir.

Paylaşılan ve yerel betik tetikleyicileri

Tüm görsel betik akışları bir olaya yanıt olarak başlar.

  • Olay tek bir istemciden kaynaklanıyorsa (örneğin, kullanıcı bir düğmeye tıklarsa), görsel betik yalnızca bu istemcide yürütülür.
  • Olay tüm istemcilerde gerçekleşirse görsel betik tüm istemcilerde yürütülür (örneğin zamanlayıcı olayı, paylaşılan özellik değişikliği, paylaşılan değişken güncelleştirmesi, avatar tetikleyici girer, fizik gövdesine dokunmalar harmanlayıcısı).

Bir nesnenin seçili olup olmadığını algılamak için düğüm eklerken, doğru olanı seçmek önemlidir. İki seçeneğiniz vardır: Mesh Etkileşimli Gövde: Yerel Olarak Seçilir ve Mesh Etkileşime Dönüştürülebilir Gövde: Seçilidir. Örneğin, ışınlanmayı tetikleyen bir düğmeye tıklamak istediğinizi varsayalım. Katılımcının düğmeye tıklamasını ve yalnızca kendisini taşımasını sağlamak için Mesh Etkileşime Geçilebilir Gövde: Yerel Olarak Seçildi düğümünü kullanın.

Mesh Etkileşimli Gövdesi yerel olarak seçilir düğümünün ekran görüntüsü.

Katılımcının düğmeye tıklamasını ve deneyimdeki herkesi ışınlayıp göndermesini sağlamak için Mesh Etkileşime Dönüştürülebilir Gövde: Seçili düğümünü kullanın. Her durumda, düğümün üzerindeki metin size bekleyebileceğiniz davranışı bildirir:

Mesh Etkileşime Dönüştürülebilir Gövde Seçildi düğümünün ekran görüntüsü, tüm istemcileri etkileyecektir.

Yerel betik paylaşılan bir değişken ayarlarsa ve ikinci bir betik bu değişkendeki değişiklikleri dinlerse (Durum Değişti tetikleyicisini kullanarak; aşağıya bakın), ikinci betik tüm istemcilerde yürütülür.

Mesh bazı özel betik düğümleri sunar:

  • Aralıkta , tüm istemcilerde düzenli aralıklarla zaman uyumlu olarak tetiklenir.
  • Durum Değişti durumunda, girişleri değiştiğinde tetikler (örneğin, paylaşılan özellikler, paylaşılan değişkenler, yerel).
  • İletişim Kutusunu Göster seçeneği, isteğe bağlı olarak yanıt seçenekleri olarak düğmeler sağlayabilecek özel metin içeren bir ileti iletişim kutusu görüntüler.

Mesh, basitlik açısından bazı dengeleri sağlar:

  • Birden fazla istemci aynı verileri değiştirmeye çalışırsa, son istemci kazanır (işlem tabanlı veri güncelleştirme modeli kullanmak yerine).
  • Veri tutarlılığını sağlamak için, tüm istemcilerde çalışan görsel betiklerin paylaşılan özellikleri veya değişkenleri okumaması ve yazmaması gerekir. Bu durumda bir çalışma zamanı hatası tetikler ve betik akışının yürütülmesini durdurur.

En iyi yöntemler

Görsel betikler yerel C# kodundan önemli ölçüde daha yavaştır. Ayrıca Mesh, görsel betikleri ağ ve diğer tümleştirme özellikleriyle genişletir ve düşük ek yüke sahip görsel betik eylemleri ağ trafiğine neden olabilir. Görsel betiklerinizden en iyi performansı elde etme hakkında bilgi edinmek için aşağıdaki makaleleri görüntülemenizi öneririz:

Görsel Betik oluşturma en iyi yöntemlerine genel bakış
Performans için en iyi Görsel Betik uygulamaları
Ağ iletişimi için en iyi Görsel Betik uygulamaları
Hata ayıklama için en iyi Görsel Betik uygulamaları

Güvenlik

Mesh, kullanıcıları şunlar gibi tehdit senaryolarından korur:

  • Güvenliği aşılmış sahne içeriği; örneğin, hassas yerel verilere erişmeye yönelik kötü amaçlı girişimler.
  • Güvenliği aşılmış istemci veya aktarım kanalı; örneğin, diğer istemcilerde erişilemeyen uzak verileri okuma veya yazma gibi kötü amaçlı girişimler.

Bunu başarmak için Mesh, görsel betikleri bir korumalı alanda (web tarayıcısında JavaScript gibi) çalıştırır.

Sahne başlangıcında Mesh, belirli Unity bileşeni türlerine ve bunların özelliklerinin güvenli bir alt kümesine erişimi sınırlamak üzere görsel betikleri doğrulamak için seçilmiş bir izin verilenler listesi kullanır.

Sahne çalışma zamanında Mesh, sahnenin belirli bölümlerine erişimi sınırlar:

  • Yerel olarak: Mesh iç öğelerine ve diğer hassas verilere erişimi engelleyerek.
  • Uzaktan: sahnenin yazarının sahnenin bu kısmının değiştirilmesini amaçladığını denetleyerek. Bu işlem, olası sahne yazma işlemleri için alıcının tarafındaki görsel betikleri statik olarak analiz ederek yapılır.

Örnekler:

  • Kötü amaçlı bir yerel görsel betik, tüm avatarlara sallanan kafalar vermek istiyor. Bu amaçla, avatar kafalarını temsil eden GameObjects için sahnenin tamamını taramaya çalışır. Mesh, avatar sistemini dışlamak için tarama sonuçlarını otomatik olarak filtreler.
  • Kötü amaçlı bir uzak istemci, tüm GameObjects'i baş aşağı çevirerek sahneyi yok etmek istiyor. Bunu başarmak için, sahnedeki her GameObject'in dikey ölçeğini ayarlayan bir özellik güncelleştirmesi gönderir. Ancak, alıcı istemcide hiçbir görsel betik böyle bir şey yapmak üzere tasarlanmamış olduğundan, yerel istemci uzak girişi yoksayar.

Mesh tümleştirmesi

Geçerli sınırlama: Bu bölümde, devam etmekte olan özelliklerin önizlemesi açıklanmaktadır.

Genellikle, diğer bileşenlerle tümleştirme genellikle bileşen özelliği değişikliklerini değiştirerek ve dinleyerek yapılır. Örneğin:

  • Etkileşim kurulabilir öğeler: "Vurgulandı" ve "Seçili" özelliklerini gözlemleyin.

  • Fizik etkileşimleri: Tetikleyici hacmindeki veya collider ile temas halindeki bedenleri gözlemleyin.

  • Avatarlar: Avatar konumunu, görüntüleme döndürmesini ve ad plakasını okuyun. (Henüz kullanılamıyor.)

  • Oturum durumu: Katılımcıları listeleyin ve katılımcı bilgilerini okuyun. (Henüz kullanılamıyor.)

  • Bulut Betiği: Değişkenleri ve bileşen özelliklerini okuyabilen ve yazabilen bulut betikleriyle birlikte çalışır. (Henüz kullanılamıyor.)

Bazı bileşenler yerel eylemler sağlar:

  • Ses Yöneticisi
  • Zaman çizelgesi
  • Animatörler
  • İşleme: malzeme ve gölgelendirici özelliklerini okuma ve yazma

Fizik özel olarak işlenir çünkü belirli bir fizik nesnesinin simülasyonu her zaman yalnızca bir istemci tarafından yetkili olarak yapılır: sahibi. Bu işlemi yapmak için fizik özelliklerinin ayarlanması, değişikliği uygulayan istemciye otomatik sahiplik aktarımını tetikler.

Sonraki adımlar