Foliage를 브러시를 이용해서 칠하고 나면 아웃라이너에 Instanced Foliage Actor가 생성된 것을 볼 수 있음.
실제 해당 액터를 클릭하면 액터에는 Foliage Instanced StaticMesh Component가 붙어있는 것을 확인할 수 있다.
Foliage Instanced StaticMesh Component를 눌러서 Detail 패널을 보면 Instance로 각 메시가 저장되어있는 것을 확인.
그렇다면 Instance에 접근하면 정보를 가져올 수 있을 것이다.
이를 간단하게 테스트하기 위해 레벨블루프린트에서 노드 작업을 한다.
위 이미지를 보면 레벨이 시작하면 Instanced Foliage Actor를 가져와 변수에 저장한다.
현재 레벨에는 하나만 배치했기때문에 무조건 0번 하나만 있을 것이다.
이제 틱에서 테스트를 하기위해 저장한 액터에서 위에서 언급한 'Foliage Instanced StaticMesh Component' 를 검색해서 가져오도록 한다.
아웃라이너에서 확인했듯이 현재는 하나의 컴포넌트가 있지만, 만약 폴리지 메시를 여러개 설정해서 브러시를 칠해 뒀다면 메시의 종류만큼 컴포넌트가 있을 것이다.
만약 그렇다면 컴포넌트를 가져와 컴포넌트가 가지고있는 StaticMesh를 들고와 어떤 메시를 위한 컴포넌트 인지 구분할 수도 있다.
현재 테스트에선 간단하게 하기 위해 하나만 칠한 상태인것을 참고해야함.
안타깝게도 Instace는 Private이기 때문에 외부에서 직접 배열에 접근할 수는 없다.
하지만 갯수를 구할 수 있으니 Count를 가져와서 For문을 돌리도록 한다.
For문의 Index는 0부터 시작.
때문에 갯수 -1의 인덱스로 끝내야 한다.( 3개면 인덱스가 0~2까지이기 때문)
해당 컴포넌트에는 인덱스를 통해서 인스턴스의 Transform을 가져올 수 있는 노드가 존재한다.
우리는 이미 인덱스를 통한 For문을 만들었기 때문에 그 인덱스로 접근하여 모든 메시의 Transform에 접근할 수 있다.
반환되는 Trasform의 노드를 분할하여 Rotation을 이용하면 Normal Vector에 접근하는 것이 가능하다.
결과 화면.
직접 인스턴스에 접근하거나 노드가 없는 정보에 접근하고 싶다면 코딩으로 직접 노드를 만들어 주는 방법을 쓸 수 있다.