충돌 감지 설정

업데이트: 2020/01/30

여기에서는 입력된 좌표에서 모델 충돌 감지를 취득하는 방법을 설명합니다.
[SDK 가져오기~모델 배치]를 수행한 프로젝트에 추가하는 것을 전제로 한 설명입니다.

충돌 감지의 취득에는 Unity의 Collider를 이용할 수도 있지만, 이하는 Cubism SDK에 포함되는 기능을 이용하는 경우의 설명입니다.

개요

충돌 감지를 취득하려면 Cubism SDK에서는 Raycast라는 구성 요소를 사용합니다.

SDK에는 이 컴포넌트를 사용한 [Raycasting]이라는 샘플 프로젝트가 포함되어 있으므로, 그 쪽도 함께 봐 주세요.
/Assets/Live2D/Cubism/Samples/Raycasting

Raycast를 설정하려면 다음 세 가지를 수행합니다.

  1. Raycast를 실행하는 구성 요소 연결
  2. 충돌 감지에 사용할 아트메쉬를 지정
  3. CubismRaycaster.Raycast로부터 판정 결과 취득

Raycast를 실행하는 구성 요소 연결

모델의 루트가 되는 GameObject에, 충돌 감지 처리를 실시하는 [CubismRaycaster]라고 하는 컴퍼넌트를 연결합니다.

충돌 감지에 사용할 아트메쉬를 지정

[모델]/Drawables/ 아래에는 그려지는 아트메쉬 하나하나를 관리하는 GameObject가 배치되어 있습니다.
GameObject의 이름은 파라미터의 ID입니다.

이 GameObject 중에서 충돌 감지용 범위로서 취급하는 것에 [CubismRaycastable]을 연결합니다.

CubismRaycastable에서는 연결한 메쉬의 충돌 감지 범위를 선택할 수 있습니다.

– Bounding Box : 그 메쉬를 둘러싸는 직사각형을 충돌 감지로 합니다. Triangles보다 부하가 가볍습니다.
– Triangles : 그 메쉬의 형상을 충돌 감지로 합니다. 범위를 정확하게 판정하고 싶은 경우는 이쪽을 설정해 주세요.

CubismRaycaster.Raycast로부터 판정 결과 취득

마지막으로, 모델의 루트에 연결한 CubismRaycaster의 Raycast()를 사용해 충돌 감지의 결과를 취득합니다.

「CubismHitTest」라는 C# 스크립트를 작성하고 코드를 다음과 같이 추가하여 모델의 루트에 연결합니다.

using UnityEngine;
using Live2D.Cubism.Framework.Raycasting;

public class CubismHitTest : MonoBehaviour
{

    private void Update()
    {
        // Return early in case of no user interaction.
        if (!Input.GetMouseButtonDown(0))
        {
            return;
        }


        var raycaster = GetComponent<CubismRaycaster>();
        // Get up to 4 results of collision detection.
        var results = new CubismRaycastHit[4];


        // Cast ray from pointer position.
        var ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        var hitCount = raycaster.Raycast(ray, results);


        // Show results.
        var resultsText = hitCount.ToString();
        for (var i = 0; i < hitCount; i++)
        {
            resultsText += "n" + results[i].Drawable.name;
        }


        Debug.Log(resultsText);
    }
}

이상으로 설정이 완료됩니다.

이 상태에서 실행 중에 Game 뷰에서 CubismRaycastable이 연결된 메쉬를 클릭하면, 충돌 감지 결과를 Console 뷰에 출력합니다.

실행 예

3
layer0
layer2
layer6

이 기사가 도움이 되었나요?
아니요
이 기사에 관한 의견 및 요청사항을 보내 주시기 바랍니다.