프리팹 | 유니티

  Рет қаралды 12,036

WER's GAME DEVELOP YOUTUBE

WER's GAME DEVELOP YOUTUBE

Күн бұрын

Пікірлер: 60
@박수종-q4g
@박수종-q4g 2 жыл бұрын
이걸로 유니티 공부 중인데 설명이 자세해서 좋아요 감사합니다
@지니-q3s9j
@지니-q3s9j 2 жыл бұрын
유니티 요즘 입문했는데 프리팹이 이해가 잘 안갔는데 단번에 이해됐어요! 감사합니다 ㅎㅎ
@kkang___
@kkang___ 2 жыл бұрын
크 베르님 덕분에 따라하면서 익히니까 재밌어요!!ㅠㅠ 사랑합니당
@아이조아라-r1w
@아이조아라-r1w Жыл бұрын
여러 오브젝트를 아무 계획 없이 막 생성하다가 그 오브젝트들이 프리펩으로 되어있었다면 얼마나 좋을까 후회합니다.. 프리펩을 만들어놓고 일반오브젝트가 이 프리펩을 따라가게 하는 방법도 있나요...
@짱구는옷말려-h9b
@짱구는옷말려-h9b 2 жыл бұрын
좋은 강의 감사합니다! 혹시 그 프리팹으로 만든거만 남기고 에셋은 삭제하고 싶은데 그건 어떻게 해야할까요??ㅠㅠ에셋을 삭제하니 다같이 삭제되어 버리네요ㅠㅠ
@wergia
@wergia 2 жыл бұрын
어떤 에셋을 삭제하시는 건가요?
@stronghawk
@stronghawk 3 жыл бұрын
하필 유니티 튜토리얼의 프리펩 주요 강의에 자막이 없어서(자막 넣는 사람이 처음에는 잘 넣다가 귀차니즘 걸렸는지 띄엄띄엄 넣나봐요;;) 찾아왔는데 정말 친절한 설명 감사합니다... 그런데 요즘에는 original prefab이랑 variant prefab 두 개가 뜨는데 뭐가 다른지 잘 모르겠습니다... 찾아보긴 했는데 확실하게 이해되지는 않네요.상속이랑 관련있는것 같은데... 답변가능하실까요..?
@wergia
@wergia 3 жыл бұрын
원본 프리팹과 변형 프리팹은 단어 거의 그대로 이해하시면 됩니다. Original Prefab은 프리팹의 원형이고 Variant Prefab은 Original Prefab으로부터 파생되어 원형을 가능한한 유지한 채로 조금씩의 변형을 추가한 프리팹을 만드는 겁니다. 간단한 예시로는 몬스터 고블린에 대한 프리팹을 만들어두고, 좀 더 빠르게 움직이는 잽싼 고블린을 만들기 위해서 고블린 프리팹으로부터 파생 프리팹을 만들고 이동 속도 수치를 변경해주는 경우가 있습니다.
@왕방빵-q6z
@왕방빵-q6z 4 жыл бұрын
프리팹을 원하는 위치에 원하는 트렌스 폼 값을 줘서 생성 시킬 수 있나요 ! , 또 ... 프리팹 각자에게 트렌스폼을 걸면 각자의 로컬 기준으로 회전이 들어가는게 맞나요!
@wergia
@wergia 4 жыл бұрын
프리팹을 게임 오브젝트로 인스턴스화할 때 사용하는 Instantiate 함수에는 여러 가지 매개변수 조합을 지원합니다. 첫 번째 형태인 Instantiate(GameObject)는 프리팹을 월드 중심 위치에 아무런 회전도 없는 상태로 생성합니다. 두 번째 형태인 Instantiate(GameObject, Transform)은 Transform에 넣어준 게임 오브젝트의 자식 오브젝트가 되어서 생성됩니다. 그리고 위치와 회전은 부모 오브젝트의 위치와 회전를 기준으로 계산됩니다. 프리팹이 기본적으로 가지고 있는 위치가 0,0이라면 부모 오브젝트 자리에 생성되고 10, 0 이라면 부모 오브젝트로부터 10, 0 만큼 떨어진 자리에 생성되죠. 네 번째 형태인 Instantiate(GameObject, Vector3, Quaternion)은 부모 오브젝트 없이 입력한 위치와 회전으로만 프리팹을 인스턴스화 합니다. 이 세 가지 방식이 제일 많이 사용되는 편입니다.
@왕방빵-q6z
@왕방빵-q6z 4 жыл бұрын
@@wergia 하다보니까 막히는 부분이 ,,, 스크립트로 불러오는 2번째 방법은 프리팹불러올 때 CreateNewBlackBox를 사용하는데 이건 다른 스크립트에서 선언한 함수 잖아요? 이건 복잡한 오브젝트나 다른 곳에서 가져온 오브젝트 쓸 땐 쓰기 어려운걸로 이해하면 되나요?
@wergia
@wergia 4 жыл бұрын
@@왕방빵-q6z 블랙박스를 생성할 때 BoxSpawner에서 처리하지 않고 CreateNewBlackBox 함수를 굳이 BlackBox의 정적(static) 함수로 만들어서 호출한 이유에 대한 질문이신거죠? 그 이유는 여러가지가 있지만, 가장 중요한 건 여기서는 BlackBox의 객체를 만드는 주체를 다른 클래스에 두지 않고 BlackBox 클래스에 두는 것으로 설계했기 때문입니다. 물론 앞의 방법에서는 그 설계 기준이 깨지기는 했지만 예시를 보여드리기 위해 기준을 벗어난 것으로 보시면 됩니다. 이렇게 BlackBox 클래스의 정적 함수에서 BlackBox 객체를 생성하는 방식처럼 한 클래스의 객체를 생성하는 코드를 클래스 안에 작성해두면, 이 클래스의 객체를 생성하는 외부 코드를 복잡하게 찾아다니지 않아도 된다는 장점이 있습니다.
@종망겜
@종망겜 2 жыл бұрын
질문있습니다. 혹시 지금도 알려주시나요 Player 오브젝트에 스크립트를 적용하고 그 스크립트에 프리팹을 적용하려하는데 아예 들어가지도 못하고 이동도 못합니다 이런경우엔 뭐가 잘못된거죠? 코드엔 아무잘못 없는거같은데
@wergia
@wergia 2 жыл бұрын
게임 오브젝트에 작성하신 컴포넌트가 붙지 않는다는 뜻일까요? Console 창에서 빨간색으로 표시되는 에러가 없는지 확인해보셨나요?
@전사의훙
@전사의훙 3 жыл бұрын
자료파일 다운 받으려고 링크된 사이트 들어가보니 찾을 수 없는 사이트라고 뜨는것 같은데 자료 다운 받으려면 어떻게 해야 할까요?
@wergia
@wergia 3 жыл бұрын
링크 수정했습니다!
@유튭프리미엄-r6w
@유튭프리미엄-r6w 3 жыл бұрын
혹시 지금도 질문 하시면 알려주실수 아실까여? 다른게 아니고 제가 fps 게임을 만들고 있는데 총을 다 prefab으로 만들어 놨는데 각 총마다 총을 쏠떄마다 카메라가 흔들리도록 하고싶은데 public Look(플레이어 시선[카메라]) cams; 이렇게 변수를 만들었는데 프리팹이 아닌 그냥 오브젝트에서는 카메라가 넣어지는데 prefab 스크립트에서는 None(Look) 이렇게 되어있고 카메라를 넣으려고 + 키를 눌렀는데 아무것도 없었어여... 혹시 prefab안에 플레이어 시선(카메라) 를 넣으려면 얻덯게 해야 할까요?
@유튭프리미엄-r6w
@유튭프리미엄-r6w 3 жыл бұрын
혹시 inheritance 나 instantiate를 써야 할까여
@wergia
@wergia 3 жыл бұрын
카메라는 씬에 하나 두고 캐릭터 프리팹에 카메라 소켓 역할을 하는 오브젝트를 만들어서 플레이어가 정해지면 그 캐릭터 프리팹에 있는 카메라 소켓에 카메라를 붙이는 방법이 어떨까요?
@유튭프리미엄-r6w
@유튭프리미엄-r6w 3 жыл бұрын
@@wergia 댓글 감사합니다 참고 해보겠숩니다
@user-fy7ik8ms5g
@user-fy7ik8ms5g 3 жыл бұрын
혹시 프로그램이 끝날때까지 시간차로 생성하려면 스크립트를 어떻게 짜야할까요??
@wergia
@wergia 3 жыл бұрын
IEnumerator Coroutine() { var waiter = new WaitForSeconds(1f); while (true) { yield return waiter; Instantiate(prefab, transform.position, Quaternion.identity); yield return null; } } 이렇게 짜주시면 프로그램이 실행되는 동안 코루틴이 계속 동작하면서 1초마다 프리팹이 생성될거에요!
@oopp21
@oopp21 2 жыл бұрын
유도미사일을 만들고 프리팹화 시켜셔 프리팹화된 유도 미사일에 프리팹화가 안된 플리이어 게임오브젝트를 넣을려고 했는대 들어가지 않습니다.어떻게 해야 하나요? 아직 기초가 부족한지라 왜안들어 가는지 알수가 없습니다...프리팹화된거만 들어가는건가요?
@wergia
@wergia 2 жыл бұрын
프로젝트 뷰의 프리팹 에셋에 씬에 있는 오브젝트를 할당하려고 하신건가요?
@oopp21
@oopp21 2 жыл бұрын
@@wergia 넵맞습니다
@oopp21
@oopp21 2 жыл бұрын
@@wergia find함수 사용해야 하나요?
@wergia
@wergia 2 жыл бұрын
프로젝트 뷰의 프리팹 에셋에는 씬에 있는 오브젝트를 드래그해서 넣을 수 없습니다. 프리팹이 인스턴스화되어서 씬에 배치된 이후에야 씬에 있는 오브젝트를 프리팹의 프로퍼티에 할당할 수 있게 됩니다. 할당 방법은 유도 미사일의 작동 방법에 따라서 다르겠지만 발사 직후에 바로 대상을 찾을 거라면 Start 함수에서 Find함수나 FindObjectOfType 함수를 사용하면 됩니다.
@oopp21
@oopp21 2 жыл бұрын
@@wergia [RequireComponent(typeof(Rigidbody2D))] public class Mi : MonoBehaviour { public Transform target; private Rigidbody2D rb; public float speed = 5f; public float rotateSpeed = 200f; private void Start() { rb = GetComponent(); target = GameObject.FindObjectOfType (); } private void FixedUpdate() { Vector2 direction = (Vector2)target.position - rb.position; direction.Normalize(); float rotateAmount = Vector3.Cross(direction, transform.up).z; rb.angularVelocity = -rotateAmount * rotateSpeed; rb.velocity = transform.up * speed; } } 이런식 으로 사용하는거 맞나요? // 이렇게 했더니 자기자신의 위치를 가지고 와서 이상한곳 으로 감니다. 제가 다르게 쓴걸까요?
@보리-g4j
@보리-g4j 4 жыл бұрын
프리팹안의 스크립트의 변수를 다른클래스에서 어떻게 사용하나요? ex 프리팹안에 고체,액체,기체 라는 셋중하나의 상태변수가 있는데 닿았을때 고체라면 고체라고나오고 액체라면 액체라고 나올려면 그 프리팹의 변수를 받아와야 가능한데 어떻게받아오나요?
@wergia
@wergia 4 жыл бұрын
음 프리팸에 부착된 클래스의 이름이 OtherClass라고 가정했을 때, OtherClass obj = Instantiate(prefabObject).GetComponent(); 처럼 Instantiate하면서 GetComponent를 하면 프리팹을 게임 오브젝트로 생성하면서 생성된 게임 오브젝트에 부착된 OtherClass를 가져올 수 있게 됩니다. 그리고 만약 OtherClass에 있는 state 라는 변수가 고체, 액체, 기체 등의 상태를 나타내는 변수라면 생성된 obj를 대상으로 Debug.Log(obj.state);를 하면 그 상태를 알 수 있겠죠?
@보리-g4j
@보리-g4j 4 жыл бұрын
감사합니다 getcomponent otherclass로 otherclass에있는state를 받아올수있군요
@wergia
@wergia 4 жыл бұрын
네 그렇게 가져오시면 됩니다!
@베르텔랑
@베르텔랑 3 жыл бұрын
질문 있습니다. 예를 들어 ← 방향키를 입력했을 때 A 오브젝트를 제거하고, → 방향키를 입력했을 때 B 오브젝트를 제거하는 등의 입력 값에 따라 다른 오브젝트를 제거하는 방법은 스크립트를 어떤 식으로 해야 하나요?
@wergia
@wergia 3 жыл бұрын
if(Input.GetKeyDown(KeyCode.RightArrow)) { Destroy(파괴할 게임 오브젝트); } if (Input.GetKeyDown(KeyCode.LeftArrow)) { Instantiate(생성할 프리팹); } 이런 식으로 작성하시면 될 것 같아요!
@베르텔랑
@베르텔랑 3 жыл бұрын
@@wergia 넵 감사합니다! 해결했습니다. ㅎㅎ
@베르텔랑
@베르텔랑 3 жыл бұрын
@@wergia 한 가지만 더 여쭙겠습니다.. 만약 리스트를 통해 프리팹들을 생성한 후에는 특정한 조건에 다다랐을 때 프리팹들을 다같이 제거하려면 어떻게 해야하는가요. Destroy()또는 .RemoveRange()로 어떻게 해야 프리팹들을 제거할 수 있는지 감이 잡히지 않아 질문합니다.
@wergia
@wergia 3 жыл бұрын
@@베르텔랑 프리팹의 인스턴스를 제거할 때는 여러가지 방법이 있습니다. 먼저 프리팹에 달려있는 컴포넌트에서 스스로 제거할 때는 Destroy(gameObject); 로 제거하면 되고 생성한 프리팹의 인스턴스를 다른 배열에 담아서 저장중이라면 for(int i = 0; i < PrefabArray.Length; i++) { Destroy(PrefabArray[i].gameObject); } 이런 식으로 제거하면 될 것 같습니다.
@베르텔랑
@베르텔랑 3 жыл бұрын
@@wergia 아하! 알겠습니다. 정말 감사합니다. 덕분에 많이 배우고 있습니다!!
@mmmosd
@mmmosd 3 жыл бұрын
여기에 물어볼건 아닌것 같은데 ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection. 라는 버그는 무엇인가요?? 사소한걸로 질문드려서 죄송합니다..
@wergia
@wergia 3 жыл бұрын
ArgumentOutOfRange는 인자가 허용범위를 벗어났다는 뜻으로 간단하게 말해서 배열이나 리스트, 혹은 딕셔너리에 인덱스를 넣을 때 마이너스 값을 넣거나 그 컨테이너 안에 들어있는 갯수보다 큰 수를 넣었을 때 발생합니다.
@문병일-f5j
@문병일-f5j 3 жыл бұрын
프리팹을 인스턴스화 시킨다는게 무슨말인가요?? 스크립트를 암만봐도 뭔지이해가잘.. 프리팹이란 오브젝트를 만들지도 않았는데 왜저렇게 되는건지 이해가 안되요..
@wergia
@wergia 3 жыл бұрын
프리팹은 에셋의 형태로 저장됩니다. 그리고 프로젝트 뷰에서 볼 수 있죠. 이 상태는 인스턴스화되지 않은 상태로 게임 내에서는 보이지 않습니다. 이것을 스크립트에서 가져와서 Instantiate 함수에 넣어주면 게임 내에서 사용할 수 있는 게임오브젝트로 소환되죠. 이걸 프리팹을 인스턴스화한다고 말합니다!
@문병일-f5j
@문병일-f5j 3 жыл бұрын
그리고 자꾸 인스턴스화시키고싶다는 대상이 Null이라는데 유니티 버젼이 달라서 똑같은 코드라도 오류가 발생할수있나요?
@wergia
@wergia 3 жыл бұрын
대상이 Null이라고 하는 것은 아마 PrefabObject 프로퍼티에 프리팹을 할당하지 않아서 발생한 문제일 것 같아요. 변수에서 가져와서 사용하려고 하는데 변수에 아무 내용이 없다는 뜻입니다!
@문병일-f5j
@문병일-f5j 3 жыл бұрын
최초생성 1회만 되고 스페이스바를 눌러도 생성이 안되네요 뭐가 문제일까요?
@wergia
@wergia 3 жыл бұрын
스페이스를 눌렀을 때 생성이 안된다면 콘솔 창에서 스페이스를 누를 때 마다 뜨는 에러 로그 같은게 있나요?
@문병일-f5j
@문병일-f5j 3 жыл бұрын
@@wergia ArgumentException: The Object you want to instantiate is null. UnityEngine.Object.CheckNullArgument (System.Object arg, System.String message) (at :0) UnityEngine.Object.Instantiate[T] (T original) (at :0) BlackBox.CreateNewBlackBox () (at Assets/BlackBox.cs:20) Boxspawner.Update () (at Assets/Boxspawner.cs:19) 이렇게 뜨는데... 제 밑에 댓글의 내용이 여기서 나온것입니다 오브젝트 프리팹에 확실히 리소스에 있는 녀석을 넣었는데 말이죠.
@wergia
@wergia 3 жыл бұрын
@@문병일-f5j ArgumentException 이라는 것은 뭔가 불러올 때 넣어줄 인수가 잘못되었다는 뜻입니다. Instantiate 함수에 넣어줄 프리팹 오브젝트가 null이라 문제가 생긴 것 같네요. Resources 폴더에서 프리팹 에셋을 불러와서 인스턴스화하는 과정이라면 Resources 폴더 경로에 문제가 있는지, 아니면 에셋 파일 이름과 불러오는 이름이 일치하는지 확인해봐야할 것 같습니다.
@1447
@1447 3 жыл бұрын
생성된 프리펩을 없애버릴 수 있나요
@wergia
@wergia 3 жыл бұрын
프리팹 파일을 없애는 것을 원하시는 건가요? 아니면 게임 내에 인스턴스화 시킨 프리팹의 게임오브젝트를 없애기를 원하시는 건가요?
@1447
@1447 3 жыл бұрын
@@wergia 게임 내에서요
@wergia
@wergia 3 жыл бұрын
@@1447 인스턴스화 시킨 프리팹 게임오브젝트를 없애는 방법은 Destroy(gameObject); 를 해주시면 됩니다.
@1447
@1447 3 жыл бұрын
@@wergia 제가 게임 내에서 캐릭터를 변경하게 만드려하는데 캐릭터 이름들을 1c, 2c, 3c 라고 할게요 A를 누르면 1c가 생기고 2c, 3c가 없어지고 S를 누르면 2c가 생기고 1c, 3c가 없어지고 D를 누르면 3c가 생기고 1c, 2c가 없어지게할 수 있게요 조금 번거로우시겠지만 부탁드립니다.
@wergia
@wergia 3 жыл бұрын
@@1447 그런 방식으로 사용하실거면 굳이 없앨 필요까지는 없어요. 1, 2, 3 캐릭터를 모두 만들어둔 다음에 캐릭터를 교체할 때 A키를 누르면 활성화 되어 있는 캐릭터를 끄고 1 캐릭터를 활성화시키고 S키를 누르면 다른 캐릭터를 끄고 2 캐릭터를 활성화 시키는 식으로 쓰는게 좋아보이네요.
@김김-d4x
@김김-d4x 2 жыл бұрын
스크립트로 프리팹 추가하는 방법 1에서요. var newBox = Instantiate(Resources.Load("Cube")); return newBox; (Resources 폴더에 프리팹 이름은 Cube입니다) 이라고 하고 BoxSpawner 에서 if(Input.GetKeyDown(KeyCode.Space)){ BlackBox.CreateNewBlackBox(); } 이렇게 가져오려고 했는데 자꾸 안 가져와져요 왜 이러는 건가요? 오류 메시지가 다음처럼 떠요 ㅜ The Object you want to instantiate is null. UnityEngine.Object.Instantiate[T] (T original) (at :0) BlackBox.CreateNewBlackBox () (at Assets/BlackBox.cs:22) BoxSpawner.Update () (at Assets/BoxSpawner.cs:21)
@wergia
@wergia 2 жыл бұрын
Cube 오브젝트에 BlackBox 컴포넌트가 붙어있나요?
콜라이더 기본 | 유니티
10:40
베르의 게임 개발 유튜브
Рет қаралды 7 М.
씬 불러오기 | 유니티
7:20
베르의 게임 개발 유튜브
Рет қаралды 11 М.
哈哈大家为了进去也是想尽办法!#火影忍者 #佐助 #家庭
00:33
로딩 화면 구현하기(로딩 씬 방식) | 유니티
10:12
베르의 게임 개발 유튜브
Рет қаралды 27 М.
오브젝트 풀링 구현하기 | 유니티
14:50
베르의 게임 개발 유튜브
Рет қаралды 15 М.
1인 미니 게임 개발 후기 [Mini game development review]
11:53
후뢰시곰 [Flashbear Games]
Рет қаралды 1,8 М.
5 years of Game development
10:37
윤농 Yunnong
Рет қаралды 240 М.
Unity Prefabs - The Complete Animated Guide  | Game Dev Classroom
10:43
Lost Relic Games
Рет қаралды 40 М.
Dear Game Developers, Stop Messing This Up!
22:19
Jonas Tyroller
Рет қаралды 716 М.
씬이 바뀌어도 오브젝트가 파괴되지 않게 해주는 DontDestroyOnLoad | 유니티
6:22
UI 비법서 - 이미지의 모든 것 | 유니티
14:53
베르의 게임 개발 유튜브
Рет қаралды 19 М.
[Unity/MiddleClass] Scriptable Object
9:02
베르의 게임 개발 유튜브
Рет қаралды 19 М.