프리팹

·2023년 4월 9일
0

Unity

목록 보기
8/22

📌부품조립


이렇게 묶어놓고 탱크 위치를 이동시키면

탱크의 좌표는 변하지만

탱크 아래에 있는 바디, 탑, 캐논의 좌표 변화는 없다

그 이유는 탱크의 좌표계를 기준으로 좌표를 보여주기 때문이다.

각각의 글로벌 좌표를 보고 싶다면 탱크 범위에서 벗어나면 원하는 좌표가 나온다.

장점

포신을 회전시키고 싶을 경우 그것만 바꾸면 된다.

플레이어 손에 무기를 쥐고 플레이어가 휘두를때마다 무기 좌표를 변경해 주는 과정이 원래는 필요한데 이렇게 부모-자식 사용하면 그렇게 할 필요가 없다

문제점

탱크 1000대를 만든다고 가정하면 Ctrl+D 복붙으로 1000개를 만들거나
일일이 탱크를 만드는 코드를 만들어야한다(미친짓)

이를 개선하기 위해서 프리팹이라는것을 사용한다


📌프리팹(Prefab)


C#에서 클래스, 인스턴스와 비슷하다

class Tank
{
    //온갖정보
    public float speed = 10.0f;
}

Tank tank1 = new Tank(); //인스턴스를 만든다

위 관계처럼 프리팹이 사용된다

프리팹 만드는법

아래 Project폴더 아무곳에나 집어넣는다

언제든지 꺼내쓰기 가능(코드상 생성도 가능)

프리팹으로 만들어졌다.

프리팹 장점

프리팹 에셋설정을 건들이면 프리팹 인스턴스로 만들어진 애들한테 적용이 된다
Speed를 변경하면 Tank, Tank(1), Tank(2) 다 바뀐다

프리팹 수정

1.프리팹모드

만들어둔 프리팹 더블클릭으로 프리팹에셋 수정가능

이렇게 가상공간이 할당되고 설정가능하다

2.인스턴스에 있는 프리팹 수정

이것도 바꾸면 같은 프리팹에셋이라서 다른것들도 다 바뀐다

각기다른 속도를 주고 싶으면 어떻게 하는가?

탱크 들어가서 Speed를 오버라이딩하면 된다
(그냥 들어가서 다른값 주면 글자 굵게 변하면서 혼자만 바뀐다)

바꾼 굵기

기존 굵기

오버라이드 확인

글 굵기로는 확인이 어려울 경우 Inspector부분의 Overrides부분을 확인하면 된다


📌Nested Prefabs


class Tank
{
    //온갖정보
    public float speed = 10.0f;
    Player player; //포함관계 Nested(중첩된) Prefab(Pre-Fabrication)
}

class Player
{ 

}

코드로 보면 이런관계이다

만드는 방법

프리팹 만드는것처럼 폴더에 집어넣는다

여기서도 왼쪽 탱크의 값을 바꾸면 PlayerInTank의 Speed값도 영향을 받는다.


📌Prefab Variant


class Tank
{
    //온갖정보
    public float speed = 10.0f;
    
}
class FastTank : Tank
{

}

상속과 유사하다(여기서는 FastTank와 유사)

만드는 방법

기존의 탱크 프리팹을 다시 폴더로 옮기면 위와같이 뜬다
Prefab Variant를 클릭하면 만들어진다


참고자료


Part3: 유니티 엔진
섹션 3.Prefab(프리팹)

profile
개인공부저장용(하루의 기록)

0개의 댓글