LCC Unity SDK, yerleşik bir çarpışma sistemine sahiptir. Bu sistem, çarpışma alanı (collider) oluşturmayı ve çarpışma algılamayı hızlandırmaya, yani çarpışma performansı sorununu çözmeye odaklanır. Unity'nin Collider sistemi, çok büyük sahnelerde gerçek zamanlı algılamayı işleyemez.
LCC Unity SDK, Unity'nin MeshCollider bileşenine ve ilgili özelliklere dayanmayan, kendi yerleşik çarpışma sistemini kullanır. Bu nedenle Unity sahnesindeki GameObject'ler üzerinde doğrudan etkili olamaz. XGrids'in ürettiği resmi LCC veri formatı (LCC Studio), yeniden oluşturma sırasında çarpışma için kullanılan mesh verisini de aynı anda üretir. SDK bu çarpışma verisini kullanarak sahne çarpışmasını hızlı ve verimli biçimde oluşturur. Çarpışma sistemi SDK'ya özgü olduğundan, çarpışma özelliğini kullanmak için SDK'nın sunduğu ilgili metotları çağırmanız gerekir.
Not:
SDK'nın yerleşik çarpışma sistemi Unity'nin Collider sistemiyle uyumlu değildir ve Unity'deki
Rigidbodynesneleri üzerinde doğrudan etkili olamaz. Dijital insan gibi karakterlerin çarpışması, SDK'nın algılama metotlarıyla yönetilmelidir (aşağıdaki "Dijital İnsan Çarpışma Uygulaması" bölümüne bakın).Sabit sahnelerde mesh verisini çıkarıp önceden NavMesh olarak bake edebilirsiniz. Bu yöntem Unity'nin Collider sistemiyle uyumludur. Ayrıntılar için NavMesh kılavuzuna bakın.
Veri Ön Koşulları
Çarpışma algılamanın çalışması için ön koşul, sahnenin ilgili çarpışma verisine sahip olmasıdır. Önceki sürümlerde yeniden oluşturulan veriler çarpışma verisi içermeyebilir. Bu durumda SetColliderEnable(true) çağrısı false döndürür ve sonraki tüm algılama metotları kullanılamaz.
Bu nedenle çarpışmayı etkinleştirdikten sonra dönüş değerini mutlaka kontrol edin:
bool ok = renderer.SetColliderEnable(true);
if (!ok)
{
Debug.LogWarning("The current data contains no collider, cannot enable collision detection");
}
Temel Kullanım İş Akışı
Çarpışma özelliğinin temel iş akışı üç adımdan oluşur:
- Sahne verisini
Load()metodu ile yükleyin. - Yükleme tamamlandığında çağrılan geri çağrı fonksiyonunda
SetColliderEnable(true)ile çarpışmayı etkinleştirin. - Çeşitli algılama metotlarıyla (
RaycastMesh/IntersectsSphere/IntersectsCapsule) çarpışma algılamayı gerçekleştirin.
// 1. Load the scene
renderer.Load(dataPath, onProgress: null, onComplete: () =>
{
// 2. Enable collision after loading completes
if (renderer.SetColliderEnable(true))
{
colliderReady = true;
}
});
void Update()
{
if (!colliderReady) return;
// 3. Perform collision detection every frame
var capsule = new Capsule(footPos, headPos, 0.3f);
if (m_manager.IntersectsCapsule(capsule, out Vector3 delta))
{
characterController.Move(delta);
}
}
Not:
SetColliderEnable(),Renderersınıfının bir metodudur. Algılama metotları (RaycastMesh/IntersectsSphere/IntersectsCapsule/Raycast) iseLCCManagerüzerindedir. Bunları ilgili nesneler üzerinde ayrı ayrı çağırın.

Temel çarpışma sistemi iş akışı
Dijital İnsan Çarpışma Uygulaması
SDK'nın çarpışma sistemi Unity'nin Rigidbody bileşeni üzerinde etkili olmadığından, dijital insanların (karakterlerin) çarpışması algılama metotlarıyla yönetilmelidir. Yaygın olarak üç yaklaşım kullanılır:
- Çift ışın algılama:
RaycastMesh()ile biri aşağı, biri ileri olmak üzere iki ışın gönderin. Karakterin yürüyüp yürüyemeyeceğini ışın sonuçlarına göre belirleyin (aşağı doğru zemini, ileri doğru engelleri yoklayın). - Kapsül algılama:
IntersectsCapsule()ile dijital insanın içinde bulunduğu kapsülün çarpışma mesh'i ile kesişip kesişmediğini algılayın ve yürüyüp yürüyemeyeceğini belirleyin. Aşırı yüklenmiş sürümün_deltadeğeri, güvenle ulaşılabilecek bir sonraki noktanın ofsetini döndürür. - Küre algılama:
IntersectsSphere()ile dijital insanın içinde bulunduğu kürenin çarpışma mesh'i ile kesişip kesişmediğini algılayın ve yürüyüp yürüyemeyeceğini belirleyin. Aşırı yüklenmiş sürümün_deltadeğeri de güvenle ulaşılabilecek bir noktanın ofsetini döndürür.

Dijital insan çarpışması için üç uygulama yaklaşımı
RaycastMesh ve Raycast Arasında Seçim
SDK, farklı amaçlara yönelik iki tür ışın algılama metodu sunar:
| Yöntem | Algılama hedefi | Hassasiyet | Hız | Uygun senaryo |
|---|---|---|---|---|
RaycastMesh() | Çarpışma mesh'i (Collider verisi) | Göreceli olarak düşük | Hızlı | Dijital insan çarpışması, kare başına algılama |
Raycast() | Gauss primitifleri (çarpışma mesh'ine dayanmaz) | Göreceli olarak yüksek | Yavaş | Ölçüm türü uygulamalar |
Raycast(), ışın algılamayı doğrudan Gauss primitifleri üzerinde yapar. Hassasiyeti daha yüksektir ancak hızı düşüktür ve her karede çağrılması önerilmez. Bu nedenle dijital insan çarpışması için uygun değildir, yalnızca ölçüm türü kullanımlara uygundur. Dijital insan çarpışması için çarpışma mesh'ine dayanan RaycastMesh() metodunu tercih edin.
İlgili API'ler
Aşağıdaki çarpışmayla ilgili metotlardan SetColliderEnable(), Renderer üzerindedir; diğer algılama metotları ise LCCManager üzerindedir. Tüm algılama metotları yalnızca sahne yüklemeyi tamamladıktan ve SetColliderEnable(true) başarıyla çağrıldıktan sonra kullanılabilir.
SetColliderEnable
// Return value: bool → true=set successfully, false=data contains no collider or instance is not active
public bool SetColliderEnable(bool _enable)
Collider özelliğini açar veya kapatır. Etkinleştirildikten sonra IntersectsSphere / IntersectsCapsule / RaycastMesh kullanılabilir hale gelir.
| Parametre | Tür | Açıklama |
|---|---|---|
_enable | bool | Collider'ın etkinleştirilip etkinleştirilmeyeceği |
Kullanım örneği:
bool ok = renderer.SetColliderEnable(true);
if (!ok) Debug.LogWarning("Data contains no collider");
Açıklama:
- Veri çarpışma (Mesh) verisi içermelidir, aksi halde
falsedöndürülür. Rendererbileşeninin etkin durumda olması gerekir.
RaycastMesh (ekran koordinatları)
// Return value: bool → true=hit
public bool RaycastMesh(Vector3 mousePos, out HitResult _finalResult, float _disatnce = 70.0f)
Ekran koordinatlarından bir ışın göndererek çarpışma mesh'ini algılar. Algılama için Collider verisini kullanır; Raycast metodundan daha hızlıdır ancak hassasiyeti daha düşüktür.
| Parametre | Tür | Açıklama |
|---|---|---|
mousePos | Vector3 | Ekran koordinatları |
_finalResult | out HitResult | İsabet sonucu |
_disatnce | float | Maksimum algılama mesafesi, varsayılan 70.0 |
Kullanım örneği:
if (m_manager.RaycastMesh(Input.mousePosition, out HitResult hit))
{
Debug.Log(hit.hitPos);
}
Açıklama:
- Önce çarpışmanın başarıyla etkinleştirilmiş olması gerekir.
- Önce
SetColliderEnable(true)çağrılmalıdır.
RaycastMesh (Işın + Sınırlar)
// Return value: bool → true=hit
public bool RaycastMesh(Ray ray, out HitResult result, out Bounds hitBounds, float maxDist = 70.0f)
Çarpışma mesh'i algılaması için özel bir Ray kullanır ve isabet eden düğümün sınırlayıcı kutu bilgisini de döndürür.
| Parametre | Tür | Açıklama |
|---|---|---|
ray | Ray | Işın |
result | out HitResult | İsabet sonucu |
hitBounds | out Bounds | İsabet eden düğümün sınırlayıcı kutusu (isabet eden LOD düğümünün sınırlayıcı kutusu) |
maxDist | float | Maksimum algılama mesafesi, varsayılan 70.0 |
Kullanım örneği:
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (m_manager.RaycastMesh(ray, out HitResult hit, out Bounds bounds))
{
Debug.Log(bounds.center);
}
Açıklama:
- Önce çarpışmanın başarıyla etkinleştirilmiş olması gerekir.
- Bu metot, bir dijital insanın yürüyüp yürüyemeyeceğini belirlemek için çoğunlukla çift ışın algılamada (aşağı ve ileri) kullanılır.
IntersectsSphere
// Return value: bool → true=intersect
public bool IntersectsSphere(Sphere sphere)
// Return value: bool → true=intersect
public bool IntersectsSphere(Sphere sphere, out Vector3 delta)
Bir kürenin çarpışma mesh'i ile kesişip kesişmediğini algılar. İkinci aşırı yükleme ek olarak, bir sonraki güvenli ulaşılabilir noktayı hesaplamak için kullanılabilen delta penetrasyon vektörünü (itme yönü ve mesafesi) döndürür.
| Parametre | Tür | Açıklama |
|---|---|---|
sphere | Sphere | Algılanacak küre |
delta | out Vector3 | Penetrasyon vektörü (itme yönü ve mesafesi) |
Kullanım örneği:
var sphere = new Sphere(transform.position, 0.5f);
if (m_manager.IntersectsSphere(sphere, out Vector3 delta))
{
transform.position += delta;
}
Açıklama:
- Önce çarpışmanın başarıyla etkinleştirilmiş olması gerekir.
- Önce
SetColliderEnable(true)çağrılmalıdır. - Etkin tüm
Rendererbileşenleri üzerinde yineleme yapar.
IntersectsCapsule
// Return value: bool → true=intersect
public bool IntersectsCapsule(Capsule capsule)
// Return value: bool → true=intersect
public bool IntersectsCapsule(Capsule capsule, out Vector3 delta)
Bir kapsülün çarpışma mesh'i ile kesişip kesişmediğini algılar. Çoğunlukla karakter denetleyicisi çarpışma algılamada kullanılır. İkinci aşırı yükleme, dijital insan için bir sonraki güvenli ulaşılabilir noktaya ofset olarak kullanılabilen delta penetrasyon vektörünü döndürür.
| Parametre | Tür | Açıklama |
|---|---|---|
capsule | Capsule | Algılanacak kapsül |
delta | out Vector3 | Penetrasyon vektörü |
Kullanım örneği:
var capsule = new Capsule(footPos, headPos, 0.3f);
if (m_manager.IntersectsCapsule(capsule, out Vector3 delta))
{
characterController.Move(delta);
}
Açıklama:
- Verinin çarpışma düğümleri içermesi gerekir.
- Önce
SetColliderEnable(true)çağrılmalıdır. - Birinci şahıs / üçüncü şahıs karakter çarpışması için uygundur.
Raycast
// Return value: bool → true=hit
public bool Raycast(Ray _ray, out HitResult _finalResult)
Gauss primitifleri üzerinde ışın algılama yapmak için özel bir Ray kullanır, etkin tüm Renderer bileşenleri üzerinde yineleme yapar ve en yakın isabeti döndürür. Çarpışma mesh'ine dayanmaz; hassasiyeti daha yüksektir ancak daha yavaştır.
| Parametre | Tür | Açıklama |
|---|---|---|
_ray | Ray | Işın |
_finalResult | out HitResult | İsabet sonucu |
Kullanım örneği:
Ray ray = new Ray(origin, direction);
if (m_manager.Raycast(ray, out HitResult hit))
{
Debug.Log(hit.hitPos);
}
Açıklama:
- Çarpışma mesh'ine dayanmaz,
SetColliderEnablegerekmez. - Hassasiyeti daha yüksektir ancak daha yavaştır, her karede çağrılması önerilmez, ölçüm türü uygulamalara uygundur, dijital insan çarpışması için uygun değildir.
HitResult
Yukarıdaki algılama metotlarının isabet sonuçları HitResult struct'ı ile döndürülür:
public struct HitResult {
public bool isHit; // Whether it hit
public float distance; // Distance
public Vector3 hitPos; // Hit point world coordinates (field name is hitPos, not position)
public Vector3 normal; // Hit normal
public float hitAlpha; // Alpha of the hit ellipsoid
public float dist2Origin; // Distance to the ray origin
public float scale; // Ellipsoid scale
}
Not:
İsabet noktasının dünya koordinatlarını içeren alanın adı
positiondeğil,hitPosşeklindedir. Alana gerçek adıyla erişin.
Bu bölüm XGRIDS'in resmî kullanım kılavuzundan Türkçeye çevrildi; ekran görüntüleri ve arayüz adları özgün haliyle İngilizcedir. İngilizce aslı (yeni sekmede açılır) · Güncelleme:

