이렇게 묶어놓고 탱크 위치를 이동시키면
탱크의 좌표는 변하지만
탱크 아래에 있는 바디, 탑, 캐논의 좌표 변화는 없다
그 이유는 탱크의 좌표계를 기준으로 좌표를 보여주기 때문이다.
각각의 글로벌 좌표를 보고 싶다면 탱크 범위에서 벗어나면 원하는 좌표가 나온다.
포신을 회전시키고 싶을 경우 그것만 바꾸면 된다.
플레이어 손에 무기를 쥐고 플레이어가 휘두를때마다 무기 좌표를 변경해 주는 과정이 원래는 필요한데 이렇게 부모-자식 사용하면 그렇게 할 필요가 없다
탱크 1000대를 만든다고 가정하면 Ctrl+D 복붙으로 1000개를 만들거나
일일이 탱크를 만드는 코드를 만들어야한다(미친짓)
이를 개선하기 위해서 프리팹이라는것을 사용한다
C#에서 클래스, 인스턴스와 비슷하다
class Tank
{
//온갖정보
public float speed = 10.0f;
}
Tank tank1 = new Tank(); //인스턴스를 만든다
위 관계처럼 프리팹이 사용된다
아래 Project폴더 아무곳에나 집어넣는다
언제든지 꺼내쓰기 가능(코드상 생성도 가능)
프리팹으로 만들어졌다.
프리팹 에셋설정을 건들이면 프리팹 인스턴스로 만들어진 애들한테 적용이 된다
Speed를 변경하면 Tank, Tank(1), Tank(2) 다 바뀐다
만들어둔 프리팹 더블클릭으로 프리팹에셋 수정가능
이렇게 가상공간이 할당되고 설정가능하다
이것도 바꾸면 같은 프리팹에셋이라서 다른것들도 다 바뀐다
탱크 들어가서 Speed를 오버라이딩하면 된다
(그냥 들어가서 다른값 주면 글자 굵게 변하면서 혼자만 바뀐다)
바꾼 굵기
기존 굵기
글 굵기로는 확인이 어려울 경우 Inspector부분의 Overrides부분을 확인하면 된다
class Tank
{
//온갖정보
public float speed = 10.0f;
Player player; //포함관계 Nested(중첩된) Prefab(Pre-Fabrication)
}
class Player
{
}
코드로 보면 이런관계이다
프리팹 만드는것처럼 폴더에 집어넣는다
여기서도 왼쪽 탱크의 값을 바꾸면 PlayerInTank의 Speed값도 영향을 받는다.
class Tank
{
//온갖정보
public float speed = 10.0f;
}
class FastTank : Tank
{
}
상속과 유사하다(여기서는 FastTank와 유사)
기존의 탱크 프리팹을 다시 폴더로 옮기면 위와같이 뜬다
Prefab Variant를 클릭하면 만들어진다