유니티 프로그래밍 기초 : 프리팹(Prefab)-2

이번 포스팅에서는 저번에 만든 프리팹을 생성시 프리팹의 속성을 변경하는것에 대해 알아보겠습니다. 같은 프리팹을 사용하더라도 생성시 속성을 변경하면 원본과는 다른 프리팹을 생성할 수 있습니다. 속성 그 자체는 같기 때문에 기본적인 틀은 같습니다.

 

1. 예문

 

기존 Update문 밑에 J, K, L에 반응하는 If문을 추가하였습니다.

스페이스바를 누를때마다 Instantiate로 boxPrefab에 담긴 프리팹을 매번 생성하게 되는데 이렇게 각각 생성되는 프리팹에 수정을 가하고 싶어도 따로 접근을 할 수가 없습니다.

그래서 GameObject missile 이라는 게임오브젝트 타입 변수 missile에 프리팹을 생성하면서 그 프리팹을 missile에 담습니다.

이 missile은 다른 프리팹을 생성해서 missile에 새로운 값을 담지 않는한 유지되기 때문에 담고 있는동안 속성을 변경시켜준다면 각각의 프리팹에도 접근이 가능합니다.


이것을 활용해서

J에는 트랜스폼에서 크기를 5배로 변경.

K에는 메쉬렌더러에서 색을 빨간색으로 변경.

L에는 Playermove스크립트에서 AddForce에 사용되는 힘의 크기를 100.0f에서 500.0f으로 변경

하였습니다.

 

 

순서대로 스페이스바, J, K, L의 프리팹을 생성하고 움직여봤습니다.

 

2. 주의

만약 GameObject missile로 접근하지 않고 Instantiate(boxPrefab, …)의 boxPrefab에 접근하려고 한다면 null에러가 발생하거나 Assets폴더에 드래그해서 직접 만들었던 Box 프리팹파일 자체가 변경되는 경우가 생깁니다.

이렇게 되는 경우 J, K, L로 변경했던 속성이 Box 프리팹파일 자체를 변경시켜버리고 이후 스페이스바로 오리저널 프리팹을 생성하려고 할 때 변경된 속성으로 프리팹을 생성하게 됩니다.

 

프리팹에 간단한 속성 변경을 적용하고자 한다면 이런식으로 속성값에 접근하여 수정하면 됩니다. 하지만 경우에 따라서 속성이 다르거나 변경점이 복잡하거나 스크립트로 수정하기에 복잡하다고 느껴지면 그냥 프리팹 파일을 하나 더 만들고 사용하는 것이 나은 경우도 있습니다.

댓글 남기기