Sınır denetimi — MRTK2

Sınır denetimi

BoundsControl , daha önce BoundingBox'ta bulunan işleme davranışı için yeni bileşendir. Sınır denetimi, kurulumda bir dizi geliştirme ve basitleştirme yapar ve yeni özellikler ekler. Bu bileşen sınırlayıcı kutunun yerine geçer ve kullanım dışı kalır.

Betik, BoundsControl.cs karma gerçeklikte nesneleri dönüştürmek için temel işlevler sağlar. Sınır denetimi hologramın çevresinde etkileşime girilebileceğini belirten bir kutu gösterir. Kutunun köşelerindeki ve kenarlarında bulunan tutamaçlar, nesneyi ölçeklendirmeye, döndürmeye veya çevirmeye olanak sağlar. Sınır denetimi de kullanıcı girişine tepki gösterir. Örneğin, HoloLens 2 sınır denetimi parmak yakınlığıyla yanıt verir ve nesneden uzaklığı algılamaya yardımcı olmak için görsel geri bildirim sağlar. Tüm etkileşimler ve görseller kolayca özelleştirilebilir.

Örnek sahne

Sahnedeki BoundsControlExamples sınır denetimi yapılandırmalarının örneklerini bulabilirsiniz.

Sınır denetimi Örneği

Denetçi özellikleri

Hedef nesne

Bu özellik, hangi nesnenin sınır denetimi düzenlemesi tarafından dönüştürüleceğini belirtir. Hiçbir nesne ayarlı değilse, varsayılan olarak sahip nesnesine ayarlanır.

Etkinleştirme davranışı

Sınır denetimi arabirimini etkinleştirmek için çeşitli seçenekler vardır.

  • Başlangıçta Etkinleştir: Sahne başlatıldıktan sonra Sınır denetimi görünür hale gelir.
  • Yakınlık Ile Etkinleştir: Sınır denetimi, eklemli bir el nesneye yakın olduğunda görünür hale gelir.
  • İşaretçiye Göre Etkinleştir: Sınır denetimi, bir el ışını işaretçisi tarafından hedeflendiğinde görünür hale gelir.
  • Yakınlık ve İşaretçiye Göre Etkinleştir: Sınır denetimi, bir el ışın işaretçisi tarafından hedeflendiğinde veya eklemli bir el nesneye yakın olduğunda görünür hale gelir.
  • El ile Etkinleştir: Sınır denetimi otomatik olarak görünmez. BoundsControl.Active özelliğine erişerek betik aracılığıyla el ile etkinleştirebilirsiniz.

Sınırları geçersiz kılma

Sınırlar hesaplaması için nesneden bir kutu harmanlaması ayarlar.

Kutu doldurma

Denetimin kapsamlarını hesaplamak için kullanılan harmanlayıcı sınırlarına bir doldurma ekler. Bu yalnızca etkileşimi değil görselleri de etkiler.

Düzleştirilmiş eksen

Denetimin eksenlerden birinde düzleştirilmiş olup olmadığını gösterir; bu da denetimi 2 boyutlu hale getirir ve bu eksen boyunca işlemeye izin vermez. Bu özellik, kayrak gibi ince nesneler için kullanılabilir. Düzleştirilmiş eksen Otomatik Olarak Düzleştirilmiş olarak ayarlanırsa betik, ekseni en küçük ölçüde düzleştirilmiş eksen olarak otomatik olarak seçer.

Yumuşatma

Düzeltme bölümü, denetimin ölçeği ve döndürmesi için düzeltme davranışını yapılandırmaya olanak tanır.

Görseller

Sınır denetiminin görünümü, ilgili görsel yapılandırmalarından biri değiştirilerek yapılandırılabilir. Görsel yapılandırmalar bağlantılı veya satır içi betiklenebilir nesnelerdir ve yapılandırma nesnesi bölümünde daha ayrıntılı olarak açıklanmıştır.

Yapılandırma Nesneleri

Denetim, betiklenebilir nesneler olarak depolanabilen ve farklı örnekler veya ön öğeler arasında paylaşılabilen bir dizi yapılandırma nesnesiyle birlikte gelir. Yapılandırmalar tek tek betiklenebilir varlık dosyaları olarak veya ön eklerin içinde iç içe betiklenebilir varlıklar olarak paylaşılabilir ve bağlanabilir. Diğer yapılandırmalar, dış veya iç içe betiklenebilir bir varlığa bağlanmadan doğrudan örnekte de tanımlanabilir.

Sınır denetimi denetçisi, özellik denetçisinde bir ileti göstererek yapılandırmanın geçerli örneğin bir parçası olarak paylaşılıp paylaşılmadığını veya çizili olduğunu gösterir. Ayrıca paylaşılan örnekler doğrudan sınır denetimi özellik penceresinde düzenlenemez, ancak paylaşılan yapılandırmalarda yanlışlıkla yapılan değişikliklerden kaçınmak için bağlandığı varlığın doğrudan modfiya edilmesi gerekir.

Şu anda sınır denetimi aşağıdaki özellikler için yapılandırma nesneleri seçenekleri sunar:

Kutu yapılandırması

Kutu yapılandırması, harmanlama boyutu ve kutu doldurma aracılığıyla tanımlanan sınırlarla düz bir kutu oluşturmakla sorumludur. Aşağıdaki özellikler ayarlanabilir:

  • Kutu malzemesi: Hiçbir etkileşim gerçekleşmediğinde işlenen kutuya uygulanan malzemeyi tanımlar. Bir kutu yalnızca bu malzeme ayarlanırsa işlenir.
  • Kutu kapılmış malzeme: Kullanıcı yakın veya uzak etkileşim yoluyla tutarak denetimle etkileşime geçtiğinde kutu için malzeme.
  • Eksen görüntüleme ölçeğini düzleştirme: Eksenlerden biri düzleştirilmişse kutu ekranına uygulanan ölçek.

Ölçek tanıtıcıları yapılandırması

Bu özellik çekmecesi, sınır denetiminin ölçek tutamaçlarının davranışını ve görselleştirmesini değiştirmenizi sağlar.

  • Tutamaç malzemesi: tutamaçlara uygulanan malzeme.
  • Tutamaklı malzeme: kapılmış tutamaca uygulanan malzeme.
  • Ön kaynak işleme: ölçek tutamacı için isteğe bağlı ön bildirim. Ayarlanmamışsa MRTK varsayılan olarak bir küp kullanır.
  • Tutamaç boyutu: ölçek tutamacının boyutu.
  • Harmanlama doldurma: tutamaç harmanlamasına eklenecek doldurma.
  • Düzenlerken tether çiz: etkin olduğunda etkileşimin başlangıcından geçerli el veya işaretçi konumuna bir tether çizgisi çizer.
  • Tanıtıcılar harmanlamayı yoksayar: Burada bir harmanlama bağlanırsa, tutamaçlar bu harmanlamayla çakışmayı yoksayar.
  • Denetim düzleştirilmiş durumdayken tanıtıcı için kullanılacak slate prefab: prefab işle.
  • Ölçek tutamaçlarını göster: tutamacın görünürlüğünü denetler.
  • Ölçeklendirme davranışı: Tekdüzen veya tekdüzen olmayan ölçeklendirmeye ayarlanabilir.

Döndürme yapılandırmayı işler

Bu yapılandırma döndürme tutamacı davranışını tanımlar.

  • Tutamaç malzemesi: tutamaçlara uygulanan malzeme.
  • Tutamaklı malzeme: kapılmış tutamaca uygulanan malzeme.
  • Tanıtıcı prefab: tanıtıcı için isteğe bağlı ön bildirim. Ayarlanmamışsa MRTK varsayılan olarak bir küre kullanır.
  • Tutamaç boyutu: tutamacın boyutu.
  • Harmanlama doldurma: tutamaç harmanlamasına eklenecek doldurma.
  • Düzenlerken tether çiz: etkin olduğunda etkileşimin başlangıcından geçerli el veya işaretçi konumuna bir tether çizgisi çizer.
  • Tanıtıcılar harmanlamayı yoksayar: Burada bir harmanlama bağlanırsa, tutamaçlar bu harmanlamayla çakışmayı yoksayar.
  • Prefabrik harmanlama türünü işleme: oluşturulan tanıtıcıyla kullanılacak harmanlama türü.
  • X için tanıtıcıyı göster: X ekseni tutamacının görünürlüğünü denetler.
  • Y için tanıtıcıyı göster: Y ekseni tutamacının görünürlüğünü denetler.
  • Z tutamacını göster: Z ekseni tutamacının görünürlüğünü denetler.

Çeviri yapılandırmayı işler

Sınır denetimi için çeviri tanıtıcılarının etkinleştirilmesine ve yapılandırılmasına izin verir. Çeviri tanıtıcılarının varsayılan olarak devre dışı bırakıldığını unutmayın.

  • Tutamaç malzemesi: tutamaçlara uygulanan malzeme.
  • Tutamaklı malzeme: kapılmış tutamaca uygulanan malzeme.
  • Tanıtıcı prefab: tanıtıcı için isteğe bağlı ön bildirim. Ayarlanmamışsa MRTK varsayılan olarak bir küre kullanır.
  • Tutamaç boyutu: tutamacın boyutu.
  • Harmanlama doldurma: tutamaç harmanlamasına eklenecek doldurma.
  • Düzenlerken tether çiz: etkin olduğunda, etkileşimin başlangıcından geçerli el veya işaretçi konumuna kadar bir tether çizgisi çizer.
  • Tanıtıcılar harmanlayıcıyı yoksayar: Buraya bir harmanlayıcı bağlanırsa, tutamaçlar bu çarpışanla çakışmayı yoksayar.
  • Prefabrik harmanlama türünü işleme: oluşturulan tanıtıcıyla kullanılacak harmanlayıcı türü.
  • X için tanıtıcıyı göster: X ekseni tutamacının görünürlüğünü denetler.
  • Y için tanıtıcıyı göster: Y ekseni tutamacının görünürlüğünü denetler.
  • Z için tanıtıcıyı göster: Z ekseni tutamacının görünürlüğünü denetler.

Bağlantı yapılandırması, sınır denetiminin tel çerçeve özelliğini etkinleştirir. Aşağıdaki özellikler yapılandırılabilir:

  • Tel çerçeve malzemesi: Tel kafes örgüsne uygulanan malzeme.
  • Tel çerçeve kenar yarıçapı: tel çerçevenin kalınlığı.
  • Tel çerçeve şekli: Tel çerçevenin şekli kübik veya silindirik olabilir.
  • Tel çerçeveyi göster: Tel çerçevenin görünürlüğünü denetler.

Yakınlık etkisi yapılandırması

Tutamaçları, ellere uzaklık temelinde animasyonla gösterin ve gizleyin. İki aşamalı ölçeklendirme animasyonu vardır. Varsayılanlar HoloLens 2 stil davranışına ayarlanır.

Sınır denetimi Yakınlık
  • Yakınlık Etkisi Etkin: Yakınlık tabanlı tanıtıcı etkinleştirmeyi etkinleştirme
  • Nesne Orta Yakınlığı: 1. adım ölçeklendirme için uzaklık
  • NesneYe YakınLık: İkinci adım ölçeklendirme için uzaklık
  • Uzak Ölçek: Eller sınırların dışındayken tutamaç varlığının varsayılan ölçek değeri denetim etkileşimi (yukarıda 'Orta Yakınlığı İşle' ile tanımlanan uzaklık). Tutamacı varsayılan olarak gizlemek için 0 kullanın)
  • Orta Ölçekli: Eller sınır denetimi etkileşiminin (yukarıda 'Yakınlığı İşle' ile tanımlanan uzaklık) aralığında olduğunda tutamaç varlığının değerini ölçeklendirin. Normal boyutu göstermek için 1 kullanın)
  • Ölçeği Kapat: Eller tutma etkileşiminin aralığındayken tutamaç varlığının değerini ölçeklendirin (yukarıda 'Yakını İşle' ile tanımlanan mesafe). Daha büyük boyutu göstermek için 1.x kullanın)
  • Uzak Büyüme Hızı: El orta düzeyden uzağa doğru hareket ettiğinde yakınlık ölçeklendirilmiş nesne ölçeklerini derecelendirin.
  • Orta Büyüme Hızı: El orta düzeyden yakına doğru hareket ettiğinde yakınlık ölçeklendirilmiş nesne ölçeklerini derecelendirin.
  • Büyütme Hızını Kapat: El nesne merkezine yakın mesafeden hareket ettiğinde yakınlık ölçeklendirilen nesne ölçeklerini derecelendirin.

Kısıtlama Sistemi

Sınır denetimi, sınır denetimi tanıtıcılarını kullanırken çeviri, döndürme veya ölçeklendirme davranışını sınırlamak veya değiştirmek için kısıtlama yöneticisinin kullanılmasını destekler.

Özellik denetçisi, seçili kısıtlama yöneticisini kaydırma ve vurgulama seçeneğinin yer aldığı bir açılan listede aynı oyun nesnesine eklenmiş tüm kullanılabilir kısıtlama yöneticilerini gösterir.

Sınır denetimi Kısıtlamaları

Ekinlikler

Sınır denetimi aşağıdaki olayları sağlar. Bu örnekte, sesli geri bildirim yürütmek için bu olaylar kullanılır.

  • Döndürme Başlatıldı: Döndürme başladığında tetiklenir.
  • Döndürme Durduruldu: Döndürme durduğunda tetiklenir.
  • Ölçeklendirme Başlatıldı: Ölçeklendirme başladığında tetiklenir.
  • Ölçek Durduruldu: Ölçeklendirme durduğunda tetiklenir.
  • Çeviri Başlatıldı: Çeviri başlatıldığında tetikler.
  • Çeviri Durduruldu: Çeviri durduğunda tetikler.
Sınır denetimi Olayları

Elastikler (Deneysel)

Elastikler, sınır denetimi aracılığıyla nesneleri düzenlerken kullanılabilir. Elastik sistemin hala deneysel durumda olduğunu unutmayın. Elastikleri etkinleştirmek için mevcut bir elastics manager bileşenini bağlayın veya düğmeyi kullanarak Add Elastics Manager yeni bir elastik yönetici oluşturup bağlayın.

Sınır denetimi Elastikler

Stilleri işleme

Varsayılan olarak, betiği atadığınızda BoundsControl.cs HoloLens 1. nesil stilinin tutamacı gösterilir. HoloLens 2 stil tutamaçlarını kullanmak için uygun tanıtıcı ön öğeleri ve malzemeleri atamanız gerekir.

Sınırlar Denetim Tutamacı Stilleri 2

Aşağıda, HoloLens 2 stili sınır denetim tutamaçları için prefablar, malzemeler ve ölçeklendirme değerleri yer alır. Bu örneği BoundsControlExamples sahnede bulabilirsiniz.

Sınır denetimi HandleStyles

Tanıtıcılar (HoloLens 2 stili için kurulum)

  • Tanıtıcı Malzeme: BoundingBoxHandleWhite.mat
  • Tutamaç Kapılmış Malzeme: BoundingBoxHandleBlueGrabbed.mat
  • Ölçek Tutamacı Prefab: MRTK_BoundingBox_ScaleHandle.prefab
  • Ölçek Tanıtıcısı Slate Prefab: MRTK_BoundingBox_ScaleHandle_Slate.prefab
  • Ölçek Tutamacı Boyutu: 0,016 (1,6cm)
  • Ölçek Tutamacı Harmanlayıcı Doldurma: 0,016 (kapılabilir harmanlayıcıyı handle görselinden biraz daha büyük yapar)
  • Döndürme Tutamacı Prefab: MRTK_BoundingBox_RotateHandle.prefab
  • Döndürme Tutamacı Boyutu: 0,016
  • Döndürme Tutamacı Harmanlayıcı Doldurma: 0,016 (kapılabilir harmanlayıcıyı tutamaç görselinden biraz daha büyük yapar)

Nesne manipülatör ile dönüşüm değişiklikleri

Bir sınır denetimi, tanıtıcılar kullanmadan belirli işleme türlerine (örneğin nesneyi taşımaya) izin vermek için ile ObjectManipulator.cs birlikte kullanılabilir. düzenleme işleyicisi hem bir hem de iki elle etkileşimleri destekler. El izleme , bir nesneyle yakından etkileşim kurmak için kullanılabilir.

Sınır denetimi Nesne Manipülatör

Sınırların denetim kenarlarının ' uzak etkileşimini kullanarak ObjectManipulatorhareket ettirirken aynı şekilde davranması için, yukarıdaki ekran görüntüsünde gösterildiği gibi sırasıyla İşleme Başladı / İşleme Sona ErdiBoundsControl.HighlightWires / BoundsControl.UnhighlightWires için olaylarını öğesine bağlaması önerilir.

Unity Inspector kullanarak sınır denetimi ekleme ve yapılandırma

  1. Nesneye Box Collider ekleme
  2. Nesneye betik atama BoundsControl
  3. 'Etkinleştirme' yöntemleri gibi seçenekleri yapılandırın (aşağıdaki Denetçi özellikleri bölümüne bakın)
  4. (İsteğe bağlı) HoloLens 2 stil sınırları denetimi için önkoşullar ve malzemeler atama (aşağıdaki Stilleri işleme bölümüne bakın)

Not

Birden çok alt bileşen içeren nesnede belirli bir nesneyi ve çarpıştırıcıyı atamak için denetçideki Hedef Nesne ve Sınırları Geçersiz Kılma alanını kullanın.

Sınır Denetimi

Kodda sınır denetimi ekleme ve yapılandırma

  1. Küp GameObject örneği oluşturma

    GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
    
  2. AddComponent<>() kullanarak bir nesneye collider ile betik atama BoundsControl

    private BoundsControl boundsControl;
    boundsControl = cube.AddComponent<BoundsControl>();
    
  3. Seçenekleri doğrudan denetimde veya betik yazılabilir yapılandırmalardan biriyle yapılandırın (aşağıdaki Denetçi özellikleri ve Yapılandırmalar bölümüne bakın)

    // Change activation method
    boundsControl.BoundsControlActivation = BoundsControlActivationType.ActivateByProximityAndPointer;
    // Make the scale handles large
    boundsControl.ScaleHandlesConfig.HandleSize = 0.1f;
    // Hide rotation handles for x axis
    boundsControl.RotationHandlesConfig.ShowRotationHandleForX = false;
    
  4. (İsteğe bağlı) HoloLens 2 stil sınırları denetimi için ön kullanılanlar ve malzemeler atayın. Malzemeler ve prefablar dinamik olarak yüklendiğinden, bu durum yine de denetçi aracılığıyla atama yapılmasını gerektirir.

Not

Çalışma zamanında gölgelendirici permütasyonları eksik olabileceğinden, unity'nin 'Resources' klasörünün veya Shader.Find'ın gölgelendiricileri dinamik olarak yüklemek için kullanılması önerilmez.

BoxDisplayConfiguration boxConfiguration = boundsControl.BoxDisplayConfig;
boxConfiguration.BoxMaterial = [Assign BoundingBox.mat]
boxConfiguration.BoxGrabbedMaterial = [Assign BoundingBoxGrabbed.mat]
ScaleHandlesConfiguration scaleHandleConfiguration = boundsControl.ScaleHandlesConfig;
scaleHandleConfiguration.HandleMaterial = [Assign BoundingBoxHandleWhite.mat]
scaleHandleConfiguration.HandleGrabbedMaterial = [Assign BoundingBoxHandleBlueGrabbed.mat]
scaleHandleConfiguration.HandlePrefab = [Assign MRTK_BoundingBox_ScaleHandle.prefab]
scaleHandleConfiguration.HandleSlatePrefab = [Assign MRTK_BoundingBox_ScaleHandle_Slate.prefab]
scaleHandleConfiguration.HandleSize = 0.016f;
scaleHandleConfiguration.ColliderPadding = 0.016f;
RotationHandlesConfiguration rotationHandleConfiguration = boundsControl.RotationHandlesConfig;
rotationHandleConfiguration.HandleMaterial = [Assign BoundingBoxHandleWhite.mat]
rotationHandleConfiguration.HandleGrabbedMaterial = [Assign BoundingBoxHandleBlueGrabbed.mat]
rotationHandleConfiguration.HandlePrefab = [Assign MRTK_BoundingBox_RotateHandle.prefab]
rotationHandleConfiguration.HandleSize = 0.016f;
rotationHandleConfiguration.ColliderPadding = 0.016f;

Örnek: MinMaxScaleConstraint kullanarak minimum, maksimum sınır denetimi ölçeğini ayarlama

Minimum ve maksimum ölçeği ayarlamak için, denetiminize bir MinMaxScaleConstraint ekleyin. Sınır denetimi kısıtlama yöneticisini otomatik olarak ekleyip etkinleştirdikçe MinMaxScaleConstraint, eklendikten ve yapılandırıldıktan sonra dönüştürme değişikliklerine otomatik olarak uygulanır.

MinMaxScaleConstraint kullanarak da için ObjectManipulatoren düşük ve en yüksek ölçeği ayarlayabilirsiniz.

GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
bcontrol = cube.AddComponent<BoundsControl>();
// Important: BoundsControl creates a constraint manager on start if one does not exist.
// There's no need to manually attach a constraint manager.
MinMaxScaleConstraint scaleConstraint = bcontrol.gameObject.AddComponent<MinMaxScaleConstraint>();
scaleConstraint.ScaleMinimum = 1f;
scaleConstraint.ScaleMaximum = 2f;

Örnek: Oyun nesnesinin çevresine sınır denetimi ekleme

Nesnenin çevresine sınır denetimi eklemek için nesneye bir BoundsControl bileşen eklemeniz yeterlidir:

private void PutABoundsControlAroundIt(GameObject target)
{
   target.AddComponent<BoundsControl>();
}

Sınırlayıcı Kutudan Geçiş

Sınırlayıcı kutu kullanan mevcut önkoşullar ve örnekler, MRTK araç paketinin parçası olan geçiş penceresi aracılığıyla yeni sınır denetimine yükseltilebilir.

Sınırlayıcı kutunun tek tek örneklerini yükseltmek için bileşenin özellik denetçisinde bir geçiş seçeneği de vardır.

Sınır denetimi Geçişi

Ayrıca bkz.