Çözücü genel bakış

Çözücü ana

Lehler, bir nesnenin konum & yönünü önceden tanımlanmış bir algoritmaya göre hesaplamayı kolaylaştıran bileşenlerdir. Bir örnek, kullanıcının Gaze raycast Şu anda isabet üzerine bir nesne yerleştirilemeyebilir.

Ayrıca, bu dönüşüm hesaplamaları için, bileşenlerin güncelleştirme düzeninde Unity 'yi belirtmenin güvenilir bir yolu olmadığından, çözücü sistemi bu dönüştürme hesaplamaları için bir işlem sırası belirler.

Lehler, nesneleri diğer nesnelere veya sistemlere eklemek için bir dizi davranış sunar. Diğer bir örnek, kullanıcının önüne (kameraya bağlı olarak) yakın bir etiket nesnesi olabilir. Bir çözücü, denetleyici ve nesne etiketi oluşturmak için bir denetleyiciye ve bir nesneye de bağlanabilir. Tüm Lehler güvenli bir şekilde yığılmış (örneğin, bir etiket-taraftaki davranış + yüzey manyetik dokulu ve itici güç).

Çözücü kullanma

Çözücü sistemi üç komut dosyası kategorisinden oluşur:

  • Solver: Tüm Lehler tarafından türetilen temel soyut sınıf. Durum izleme, düzeltme parametreleri ve uygulama, otomatik çözücü sistem tümleştirmesi ve güncelleştirme sırası sağlar.
  • SolverHandler: Başvuru nesnesini (örn. ana kamera dönüştürmesi, el Ray vb.) izlemek için ayarlar, çözücü bileşenleri toplamayı işler ve bunları uygun sırada güncellemeyi yürütür.

Üçüncü kategori, çözücü 'nin kendisidir. Aşağıdaki Lehler temel davranış için yapı taşları sağlar:

  • Orbital: Başvurulan nesneden belirtilen bir konuma ve uzaklığa kilitler.
  • ConstantViewSize: Başvurulan nesnenin görünümüne göre sabit boyutunu korumak için ölçeklendirilir.
  • RadialView: Nesneyi başvurulan nesne tarafından bir görünüm koni içinde tutar.
  • Follow: Nesneyi başvurulan nesnenin Kullanıcı tanımlı sınırlarının bir kümesi içinde tutar.
  • InBetween: İki izlenen nesne arasında bir nesneyi tutar.
  • SurfaceMagnetism: dünyadaki yüzeylere ışınları yayınlar ve nesneyi bu yüzeye hizalayın.
  • DirectionalIndicator: Bir nesnenin konumunu ve yönünü yönlü bir gösterge olarak belirler. SolverHandler Izlenen hedefinin başvuru noktasından bu gösterge sağlanan DirectionalTarget 'a yönelecektir.
  • Momentum: Diğer Lehler/bileşenler tarafından taşınan bir nesne için itici güç ve sprinleştirme benzetimi yapmak üzere hızlandırma/hız/savunma uygular.
  • HandConstraint: Uygulamalı nesne ile bir oyun nesnesiyle kesişmeyen bir bölgedeki nesneleri izlemek için kısıtlar. Menüler vb. gibi etkileşimli içerik için faydalıdır. Bu çözücü, IMixedRealityHand ile çalışmak üzere tasarlanmıştır, ancak IMixedRealityControllerile de çalışır.
  • HandConstraintPalmUp: HandConstraint 'ten türetiliyor, ancak Palm, etkinleştirmeden önce kullanıcıya sunulup test edilecek mantığı içerir. Bu çözücü yalnızca IMixedRealityHand denetleyicileri ile birlikte çalışarak, bu çözücü, temel sınıfı gibi davranır.

Çözücü sistemini kullanabilmek için, yukarıda listelenen bileşenlerden birini bir GameObject öğesine eklemeniz yeterlidir. Tüm Lehler için bir SolverHandler tane gerektiğinden, Unity tarafından otomatik olarak oluşturulur.

Not

Lehvers sisteminin nasıl kullanılacağına ilişkin örnekler, Solverexamples. sahne dosyasında bulunabilir.

İzleme başvurusunu değiştirme

Bileşenin Izlenen hedef türü özelliği, Tüm Lehler 'in algoritmalarını hesaplamak için kullanacağı başvuru noktasını tanımlar. Örneğin, basit bir bileşenle bir değer türü, bir HeadSurfaceMagnetism raydan ve kullanıcının ne kadar yüzünü çözmeyle ilgili olarak bir raya dönüştürme işlemiyle sonuçlanır. Özelliği için olası değerler TrackedTargetType şunlardır:

  • Head : başvuru noktası ana kameranın dönüşümüyle
  • Controllerray: başvuru noktası, bir denetleyicideki dönüşümdir (bir hareket denetleyicisi veya el denetleyicisindeki işaretçi kaynağı), Line Ray 'un yönünü işaret eder
    • Özelliği kullanarak, TrackedHandedness handedlik tercihini seçin (sol, sağ, her Ikisi de)
  • Handjoint: başvuru noktası, belirli bir el ekinin dönüşümüyle
    • Özelliği kullanarak, TrackedHandedness handedlik tercihini seçin (sol, sağ, her Ikisi de)
    • Kullanılacak TrackedHandJoint eklem dönüşümünü öğrenmek için özelliğini kullanın
  • Customoverride: atanan

Not

Hem Controllerray hem de handjoint Types için, çözücü işleyici önce sol denetleyiciyi/el dönüştürmeyi, sonra da eski kullanılamıyorsa veya özellik aksini belirtmediği taktirde sağ ve ardından hakkı sağlamaya çalışacaktır .

Her bir TrackedTargetType ile ilişkili çeşitli özelliklerin çözücü tarafındanizlenen nesneörneği

Önemli

En çok Lehler, tarafından sağlanan izlenen dönüştürme hedefinin ileri vektörünü kullanır SolverHandler . Birlikte bulunan bir el ile izlenen hedef türü kullanırken, Palm Joint 'ın iletme vektörü, Palm aracılığıyla değil, parmakları işaret edebilir. Bu, el ile Birleşik verileri sağlayan platforma bağlıdır. giriş benzetimi ve Windows Mixed Reality için, palm aracılığıyla işaret eden (yeşil vektör çalışıyor, mavi vektör ileri) bir yukarı vektör .

Vektör ilet

Bunu aşmak için, üzerinde ek döndürme özelliğini 90, 0, 0 >olarak güncelleştirin. Bu, lehcörler için sağlanan ileriye doğru vektör, Palm 'ye işaret ediyor ve bir yandan dışarıya dışarı doğru bir şekilde uzaklaşacaktır.

Ek döndürme

Alternatif olarak, uygulamalı ile işaret eden benzer davranışları almak için Controller Ray izlenen hedef türünü kullanın.

Lehcılar nasıl zincirleme yapılır

SolverAynı oyun nesnesine birden çok bileşen eklemek ve bu sayede algoritmalarının zincirleme olması mümkündür. SolverHandlerBileşenler, tüm lehlerini aynı GameObject üzerinde güncellemeyi işler. Varsayılan olarak, SolverHandler Başlangıç olarak, GetComponents<Solver>() başlatmaları denetçisinde göründükleri sırada döndürecek olan çağrılar.

Ayrıca, güncelleştirilmiş bağlantılı dönüşüm özelliğinin true olarak ayarlanması, hesaplanan konumunu, yönünü, & ölçeğini tüm Lehler tarafından erişilebilen bir ara değişkene (ör GoalPosition .) kaydetmenizi sağlar. Yanlış olduğunda, Solver Oyunnesne dönüşümünü doğrudan güncelleştirir. Dönüşüm özelliklerini bir ara konuma kaydederek, diğer Lehler, ara değişkenden başlayarak hesaplamalarını gerçekleştirebilir. Bunun nedeni, Unity 'nin gameObject 'e yönelik güncelleştirmelere izin vermez. aynı çerçeve içinde yığına dönüştürme.

Not

Geliştiriciler, özelliği doğrudan ayarlayarak Lehcilerinizi yürütme sırasını değiştirebilir SolverHandler.Solvers .

Yeni bir çözücü oluşturma

Tüm Lehler, soyut temel sınıftan devralması gerekir Solver . Bir çözücü uzantısının birincil gereksinimleri, yöntemi geçersiz kılmayı içerir SolverUpdate . Bu yöntemde, geliştiriciler devralınmış GoalPositionGoalRotation ve GoalScale özellikleri istenen değerlere güncellemelidir. Ayrıca, genellikle SolverHandler.TransformTarget tüketici tarafından istenen başvuru çerçevesi olarak faydalanır.

Aşağıda verilen kod, InFront eklenen nesne 2m öğesini önüne yerleştiren adlı yeni bir çözücü bileşeni örneği sağlar SolverHandler.TransformTarget . , SolverHandler.TrackedTargetType Tüketici tarafından olarak ayarlandıysa, HeadSolverHandler.TransformTarget Kamera dönüştürmesi olur ve bu nedenle bu çözücü, eklenen gameobject 2m 'yi kullanıcıların her çerçeveye kaze olarak yerleştirir.

/// <summary>
/// InFront solver positions an object 2m in front of the tracked transform target
/// </summary>
public class InFront : Solver
{
    ...

    public override void SolverUpdate()
    {
        if (SolverHandler != null && SolverHandler.TransformTarget != null)
        {
            var target = SolverHandler.TransformTarget;
            GoalPosition = target.position + target.forward * 2.0f;
        }
    }
}

Çözücü uygulama kılavuzu

Ortak çözücü özellikleri

Her çözücü bileşeni, çekirdek çözücü davranışını denetleyen bir özdeş özellikler kümesi içerir.

Yumuşatma etkinleştirilirse, çözücü oyun nesnesinin zaman içindeki dönüşümünü hesaplanan değerlere aşamalı olarak güncelleştirir. Bu değişikliğin hızı, her dönüşüm bileşeninin Lerptime özelliği tarafından belirlenir. Örneğin, daha yüksek bir MoveLerpTime değeri Çerçeveler arasındaki hareket halinde daha yavaş artışlara neden olur.

Bakım ölçeği etkinse, çözücü gameobject 'in varsayılan ölçeğini kullanır.

Temel Çözücü özellikleri
Tüm çözücü bileşenleri tarafından devralınan ortak özellikler

Orbte dili

OrbitalSınıfı, bir Solar sisteminde planetler gibi davranan bir etiket-bileşen bileşenidir. Bu çözücü, izlenen dönüştürme etrafında eklenmiş oyun nesnesi ve bitlerini sağlayacaktır. Bu nedenle, öğesinin Izlenen hedef türü olarak ayarlandıysa Head , oyun nesnesi, sabit bir uzaklığa uygulanan kullanıcının baş etrafında daha fazla olur.

Geliştiriciler, menüleri veya diğer sahne bileşenlerini göz önünde veya Waist düzeyinde ya da bir Kullanıcı etrafında tutmak için bu sabit sapmayı değiştirebilir. Bu, yerel konum ve Dünya boşluğu özellikleri değiştirilerek yapılır. Yönlendirme türü özelliği, nesnenin özgün döndürmesini korumalı veya her zaman kamerayı ya da yüzünün konumunu hangi dönüşümle yönlendirdiğini, nesne için uygulanacağını belirler.

Orbte örneği
Orbte örneği

RadialView

, RadialView Kullanıcının görünümündeki Frustum içindeki bir GameObject 'in belirli bir bölümünü tutan başka bir etiket-bileşen bileşenidir.

Minimum en büyük görünüm derecesi özellikleri, gameobject 'in bir kısmının her zaman görünümde ne kadar büyük olacağını belirler.

En büyük uzaklık özellikleri, oyunobject 'in kullanıcıdan ne kadar saklanacağını belirler. Örneğin, en az 1 milyon mesafele oyun nesnesini yaklaştırmak, bir kullanıcı için 1 milyon ' den daha yakın olmadığından emin olmak için oyunucıyı bir yere gönderir.

Genellikle, RadialView bileşeni kullanıcının Gaze ' ı takip edebilmesi için, RadialView olarak ayarlanan ile birlikte kullanılır Head . Ancak, bu bileşen, Izlenen hedef türlerinin"Görünüm" bölümünde tutulması için işlev görebilir.

RadialView örneği
RadialView örneği

İzleme

FollowSınıfı, izlenen hedefin önünde bir öğeyi yerel ileri eksenine göre konumlandırır. Öğe, izlenen hedef Kullanıcı tanımlı sınırların ötesinde ilerlene kadar takip edilene kadar, daha esnek bir şekilde kısıtlanmış (deyişle etiketi) olabilir.

En büyük yatay Dikey görünüm derecelerdeve nesnenin yönünü değiştirme mekanizmalarının yönetilmesi için ek denetimlerle RadialView çözücü ile benzer şekilde çalışır.

Özellikleri izleyin
Özellikleri izleyin

Örnek sahneyi izleyin
Örnek sahneyi izleyin (varlıklar/MRTK/örnekler/tanıtımlar/Solıcılar/sahneler/Izleme Solverexample. Unity)

Inbetween

InBetweenSınıfı, eklenen GameObject 'i iki dönüşüm arasında tutacaktır. Bu iki dönüşüm uç noktası, GameObject 'in kendi SolverHandlerSolverHandler ve InBetween bileşenin InBetween özelliği tarafından tanımlanır. Genellikle, her iki tür olarak ayarlanır CustomOverride ve elde edilen SolverHandler.TransformOverride ve InBetween.SecondTransformOverride değerleri iki izlenen uç noktaya ayarlanır.

Çalışma zamanında, InBetween bileşen SolverHandlerInBetween ve SolverHandler özelliklerine bağlı olarak başka bir bileşen oluşturacak.

, PartwayOffset Nesnenin iki dönüşümüyle ilgili olarak, en fazla 0,5, ilk dönüşümde 1,0 ve ikinci dönüşümde 0,0 ile birlikte ile yerleştirileceğini tanımlar.

Inbetween örneği
Nesneyi iki dönüşüm arasında tutmak için çözücü arasında ıntıl kullanma örneği

Surfacemagnetisd

SurfaceMagnetismBu, yüzeyler için bir raycast gerçekleştirerek ve oyun nesnesini bu iletişim noktasında yerleştirilerek işe yarar.

Yüzey normal uzaklığı , oyun nesnesini yüzeyde vuruş noktasında normal olarak yüzeyden uzağa doğru bir şekilde ayarlanan uzaklığa yerleştirir.

Buna karşılık, Surface Ray uzaklığı , gameobject 'i yüzeyden uzağa, ancak raycast 'un ters yönünde yerleştirir. Bu nedenle, raycast kullanıcının Gaze ise, oyun nesnesi yüzey üzerindeki isabet noktasından kameraya yaklaştırılır.

Yönlendirme modu , yüzeyde normal şekilde uygulanacak döndürme türünü belirler.

  • Hiçbiri -hiçbir döndürme uygulanmadı
  • Trackedtarget -nesne, raycast 'u yönlendiren izlenen dönüşümü alacak
  • SurfaceNormal -nesne, yüzeye göre normal bir vuruş noktasında hizalanır
  • Karıştırılmış -nesne, YÜZDEKI ve izlenen dönüşümle ilgili olarak, her zamanki gibi, bir vuruş noktasında normal olarak hizalanır.

İlişkili Oyunobject 'in hiçbiridışında herhangi bir modda dikey kalmasını zorlamak için yönlendirmeyi etkinleştir dikey.

Not

Yön moduBlend olarak ayarlandığındadöndürme faktörleri arasındaki dengeyi denetlemek için yönlendirme Blend özelliğini kullanın. 0,0 değeri, Trackedtarget modu tarafından tamamen yönlendirilerek bir 1,0 değeri Ile tamamen SurfaceNormaltarafından yönlendirme yapılır.

Surfacemagnetisd örneği

Hangi yüzeylerin isabet yapabileceğini belirleme

Bir SurfaceMagnetism oyunu nesnesine bir bileşen eklerken, herhangi bir Çarpışdığınızda oyun nesnesinin ve alt öğelerinin katmanını göz önünde bulundurmanız önemlidir. Bileşen, "mıknatıs" öğesinin kendisi için hangi yüzeyi kullandığını belirlemek üzere çeşitli raya türleri gerçekleştirerek işe yarar. Çözücü GameObject, özelliğinde listelenen katmanlardan birinde bir Collider sahipse MagneticSurfacesSurfaceMagnetism , raycast büyük olasılıkla kendi Collider noktasına iliştirmeye yol açar. Bu tek davranışın, ana Oyunnesnesi ve tüm alt öğeleri Ignore Raycast katmanına ayarlanarak veya layermask dizisinin uygun şekilde değiştirilmesi önlenmiş olabilir.

Buna karşılık, bir SurfaceMagnetism gameobject, özelliğinde listelenmeyen bir katmandaki yüzeylerle çakışmaz MagneticSurfaces . Tüm istenen yüzeyleri özel bir katmana (yani yüzeyler) yerleştirmeniz ve özelliği yalnızca bu katmana ayarlamak önerilir. Varsayılan veya her şeyin kullanılması, Kullanıcı arabirimi bileşenleri veya çözücü 'e katkıda bulunan imleçler ile sonuçlanabilir.

Son olarak, özellik ayarından daha uzakta yüzeyler MaxRaycastDistance raya 'ler tarafından yok sayılır SurfaceMagnetism .

Directionalgöstergesi

DirectionalIndicatorSınıfı, kendisini, istenen bir noktanın bulunduğu yöne yönlerine yönlendirir.

En yaygın olarak, ' nin Izlenen hedef türü olarak ayarlandığında kullanılır Head . Bu şekilde, çözücü 'e sahip bir UX bileşeni, DirectionalIndicator bir kullanıcıyı, istenen noktada alana bakmayacak şekilde yönlendirir.

İstenen nokta boşluk, yönlü Target özelliği aracılığıyla belirlenir.

Yön hedefi Kullanıcı tarafından görüntülenebilir veya içinde herhangi bir başvuru çerçevesi ayarlanırsa, SolverHandler Bu çözücü altındaki tüm bileşenleri devre dışı bırakır Renderer . Görüntülenemeyecek kadar her şey gösterge üzerinde etkinleştirilir.

Göstergenin boyutu, kullanıcının FOV 'de Yön hedefini yakalamak için ne kadar yakın olduğunu küçültecektir.

  • En az gösterge ölçeği -gösterge nesnesi için minimum ölçek

  • Maksimum gösterge ölçeği -gösterge nesnesi için maksimum ölçek

  • Açıklamalı hedef noktasının görüntülenebilir olup olmadığını belirleyen FOV 'yi artırma veya azaltma Için görünürlük ölçeği çarpanı çarpanı

  • Görünümü görüntüleme -başvuru çerçevesinin görüş açısından bakış açısı (büyük olasılıkla kamera), bu özellik gösterge yönünün görünüm penceresinin merkezinden ne kadar olduğunu tanımlar.

Yön göstergesi özellikleri
Yön göstergesi özellikleri

Yön göstergesi örnek görünümü
Yön göstergesi örnek sahneyi (varlıklar/MRTK/örnekler/gösteriler/Lehvers/sahneler/Directionalındicatorsolverexample. Unity)

HandConstraint ve HandConstraintPalmUp ile el menü

El menü UX örneği

HandConstraintDavranış, izlenen nesneyi el ile kısıtlanmış içerik (örneğin, el ile Kullanıcı arabirimi, menüler vb.) için güvenli bir bölgeye kısıtlayan bir çözücü sağlar. Kasa bölgeler, el ile kesişmeyen alanları kabul edilir. Elde edilen bir türetilmiş sınıf, HandConstraintHandConstraintPalmUp Palm tarafından Kullanıcı kullanıma sunulmasından sonra çözücü tarafından izlenen nesneyi etkinleştirecek yaygın bir davranışı göstermek için de eklenmiştir.

El ile kullanılan menüler oluşturmak için el ile kısıtlama çözücüsü kullanma örnekleri için bkz. el menü sayfası .

Ayrıca bkz.