Sınırlayıcı kutu — MRTK2

Sınırlayıcı kutu

Not

Sınırlayıcı kutu kullanım dışıdır ve ardıl sınır denetimiyle değiştirilir. Mevcut oyun nesnelerini yükseltmek için geçiş seçeneklerinden birini kullanın.

Betik, BoundingBox.cs karma gerçeklikte nesneleri dönüştürmek için temel işlevler sağlar. Sınırlayıcı kutu, hologramın çevresinde etkileşime girilebileceğini belirten bir küp gösterir. Küpünün köşelerindeki ve kenarlarında bulunan tutamaçlar, nesnenin ölçeklenmesine veya döndürülmesini sağlar. Sınırlayıcı kutu, kullanıcı girişine de tepki gösterir. Örneğin, HoloLens 2 sınırlayıcı kutu parmak yakınlığı 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.

Daha fazla bilgi için bkz. Windows Geliştirme Merkezi'ndeki Sınırlayıcı kutu ve Uygulama çubuğu .

Örnek sahne

Sınırlayıcı kutu yapılandırmalarının BoundingBoxExamples örneklerini sahnede bulabilirsiniz.

Sınırlayıcı Kutu Örnekleri

Unity Inspector kullanarak sınırlayıcı kutu ekleme ve yapılandırma

  1. Nesneye Box Collider ekleme
  2. Nesneye betik atama BoundingBox
  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 stili sınırlayıcı kutusu için ön ekleri ve malzemeleri 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 harmanlayıcıyı atamak için denetçideki Hedef Nesne ve Sınırları Geçersiz Kılma alanını kullanın.

Sınırlayıcı Kutu 1

Kodda sınırlayıcı kutu ekleme ve yapılandırma

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

    GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
    
  2. AddComponent<>() kullanarak harmanlamalı bir nesneye betik atama BoundingBox

    private BoundingBox bbox;
    bbox = cube.AddComponent<BoundingBox>();
    
  3. Seçenekleri yapılandırma (aşağıdaki Denetçi özellikleri bölümüne bakın)

    // Make the scale handles large
    bbox.ScaleHandleSize = 0.1f;
    // Hide rotation handles
    bbox.ShowRotationHandleForX = false;
    bbox.ShowRotationHandleForY = false;
    bbox.ShowRotationHandleForZ = false;
    
  4. (İsteğe bağlı) HoloLens 2 stili sınırlayıcı kutu için ön ekleri ve malzemeleri atayın. Malzemeler ve prefablar dinamik olarak yüklendiği için bu işlem 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ü veya Shader.Find'ı kullanarak gölgelendiricilerin dinamik olarak yüklenmesi önerilmez.

bbox.BoxMaterial = [Assign BoundingBox.mat]
bbox.BoxGrabbedMaterial = [Assign BoundingBoxGrabbed.mat]
bbox.HandleMaterial = [Assign BoundingBoxHandleWhite.mat]
bbox.HandleGrabbedMaterial = [Assign BoundingBoxHandleBlueGrabbed.mat]
bbox.ScaleHandlePrefab = [Assign MRTK_BoundingBox_ScaleHandle.prefab]
bbox.ScaleHandleSlatePrefab = [Assign MRTK_BoundingBox_ScaleHandle_Slate.prefab]
bbox.ScaleHandleSize = 0.016f;
bbox.ScaleHandleColliderPadding = 0.016f;
bbox.RotationHandleSlatePrefab = [Assign MRTK_BoundingBox_RotateHandle.prefab]
bbox.RotationHandleSize = 0.016f;
bbox.RotateHandleColliderPadding = 0.016f;

Örnek: MinMaxScaleConstraint kullanarak minimum, maksimum sınırlayıcı kutu ölçeğini ayarlama

En düşük ve en yüksek ölçeği ayarlamak için kullanın MinMaxScaleConstraint. MinMaxScaleConstraint'i, için en düşük ve en yüksek ölçeği ayarlamak için ManipulationHandlerde kullanabilirsiniz.

GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
bbox = cube.AddComponent<BoundingBox>();
// Important: BoundingBox creates a scale handler on start if one does not exist
// do not use AddComponent, as that will create a  duplicate handler that will not be used
MinMaxScaleConstraint scaleConstraint = bbox.gameObject.GetComponent<MinMaxScaleConstraint>();
scaleConstraint.ScaleMinimum = 1f;
scaleConstraint.ScaleMaximum = 2f;

Örnek: Oyun nesnesinin çevresine sınırlayıcı kutu ekleme

Nesnenin çevresine sınırlayıcı kutu eklemek için, nesneye bir BoundingBox bileşen eklemeniz yeterlidir:

private void PutABoxAroundIt(GameObject target)
{
   target.AddComponent<BoundingBox>();
}

Denetçi özellikleri

Hedef nesne

Bu özellik, sınırlayıcı kutu işlemesi tarafından hangi nesnenin dönüştürüleceğini belirtir. Hiçbir nesne ayarlanmadıysa sınırlayıcı kutu varsayılan olarak sahip nesnesine ayarlanır.

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

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

Etkinleştirme davranışı

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

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

En düşük ölçek

İzin verilen en düşük ölçek. Bu özellik kullanım dışıdır ve betik MinMaxScaleConstraint eklenmesi tercih edilir. Bu betik eklenirse, sınırlayıcı kutu yerine en düşük ölçek alınır.

Ölçek üst sınırı

İzin verilen en yüksek ölçek. Bu özellik kullanım dışıdır ve betik MinMaxScaleConstraint eklenmesi tercih edilir. Bu betik eklenirse, sınırlayıcı kutu yerine en yüksek ölçek ondan alınır.

Kutu ekranı

Çeşitli sınırlayıcı kutu görselleştirme seçenekleri.

Düzleştirilmiş Eksen Otomatik Olarak Ayarlanırsa, betik eksen boyunca en küçük ölçüde düzenlemeye izin vermeyecektir. Bu, genellikle ince nesneler için kullanılan 2B sınırlayıcı kutuyla sonuçlanır.

Handles

Tutamaç stilini geçersiz kılmak için malzemeyi ve ön başlığı atayabilirsiniz. Hiçbir tanıtıcı atanmazsa, bunlar varsayılan stilde görüntülenir.

Ekinlikler

Sınırlayıcı kutu aşağıdaki olayları sağlar. Bu örnek, sesli geri bildirim yürütmek için bu olayları kullanır.

  • Döndürme Başlatıldı: Döndürme başladığında tetiklenir.
  • Döndürme Sona Erdi: Döndürme sona erdiğinde tetiklenir.
  • Ölçeklendirme Başlatıldı: Ölçeklendirme başladığında tetiklenir.
  • Ölçek Sona Erdi: Ölçeklendirme sona erdiğinde tetiklenir.
Ekinlikler

Tutamaç stilleri

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

Sınırlayıcı Kutu Tutamacı Stilleri

Aşağıda, HoloLens 2 stili sınırlayıcı kutu tutamaçları için ön bileşenler, malzemeler ve ölçeklendirme değerleri yer alır. Bu örneği BoundingBoxExamples sahnede bulabilirsiniz.

El Stilleri 2

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

  • Tanıtıcı Malzemesi: SınırlayıcıBoxHandleWhite.mat
  • Tutamaç Kapılmış Malzeme: BoundingBoxHandleBlueGrabbed.mat
  • Ölçek Tutamacı Prefab: MRTK_BoundingBox_ScaleHandle.prefab
  • Ölçek Tutamacı Slate Prefab: MRTK_BoundingBox_ScaleHandle_Slate.prefab
  • Ölçek Tutamacı Boyutu: 0,016 (1,6cm)
  • Ölçek Tutamacı Harmanlama Doldurması: 0,016 (kavranabilir collider'ı tutamaç görselinden biraz daha büyük hale getirir)
  • Döndürme Tutamacı Prefab: MRTK_BoundingBox_RotateHandle.prefab
  • Döndürme Tutamacı Boyutu: 0,016
  • Döndürme Tutamacı Harmanlama Doldurması: 0,016 (kavranabilir harmanlamanın tutamaç görselinden biraz daha büyük olmasını sağlar)

Yakınlık (HoloLens 2 stili için kurulum)

Tutamaçları, ellere olan uzaklığı temel alarak animasyonla gösterin ve gizleyin. İki aşamalı ölçeklendirme animasyonu vardır.

Yakınlık
  • Yakınlık Etkisi Etkin: Yakınlık tabanlı tanıtıcı etkinleştirmeyi etkinleştirme
  • Orta Yakınlığı İşleme: 1. adım ölçeklendirme için uzaklık
  • Yakınlığı İşle: İkinci adım ölçeklendirme için uzaklık
  • Uzak Ölçek: Eller sınırlayıcı kutu etkileşiminin aralığının dışında olduğunda tutamaç varlığının varsayılan ölçek değeri (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ırlayıcı kutu etkileşiminin aralığında olduğunda tutamaç varlığının değerini ölçeklendirin (yukarıda 'Yakınlığı İşle' ile tanımlanan uzaklık). Normal boyutu göstermek için 1 kullanın)
  • Ölçeği Kapat: Eller tutma etkileşiminin aralığında olduğunda tutamaç varlığının değerini ölçeklendirin (yukarıda 'Yakınlığı İşle' ile tanımlanan uzaklık). Daha büyük boyut göstermek için 1.x kullanın)

Bir nesneyi işleme işleyicisi ile taşınabilir hale getirme

Sınırlayıcı kutu ile ManipulationHandler.cs birleştirilerek nesne uzak etkileşim kullanılarak taşınabilir hale getirilebilir. 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.

İşleme İşleyicisi

Sınırlayıcı kutu kenarlarının , 'nin uzak etkileşimini kullanarak ManipulationHandlertaşırken aynı şekilde davranması için yukarıdaki ekran görüntüsünde gösterildiği gibi sırasıyla düzenleme başlatıldı / düzenlemesi sona erdiBoundingBox.HighlightWires / BoundingBox.UnhighlightWires için olaylarını bağlaması önerilir.

Sınır denetimine geçiş

Sınırlayıcı kutu kullanan mevcut prefabs ve örnekler, MRTK araçları paketinin bir 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