Тёмный

2D 플랫포머 - 스테이지를 넘나드는 게임 완성하기 [유니티 기초 강좌 BE2] 

Goldmetal
Подписаться 65 тыс.
Просмотров 100 тыс.
50% 1

Опубликовано:

 

8 окт 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 1,7 тыс.   
@Unknown_Korean
@Unknown_Korean Год назад
여기에서 중요 포인트는 1. 골드 Item 만들 때 : IsTrigger : 체크 필요. 2. OnDie(); 함수 호출 때 : 유니티에서 GameManager에 Player 연결해주는 것(드래그앤 드롭) 3. 35:00 쯤에서 UI 코딩 할 때 using UnityEngine.UI; 이것 부터 선언해 줘야함 4. Text Mesh Pro 사용하는 사람은 using TMPro; public TextMeshProUGUI UIPoint; public TextMeshProUGUI UIStage; 로 사용 하면 됨 5. 40:10분 쯤 SceneManager.LoadScene(0); 를 할 땐 using UnityEngine.SceneManagement; 선언문 필요 6. Audio 출력 할 때 마지막에 audioSource.Play();를 넣어줘야함 (Swich 문 할때) 골드 메탈님 덕분에 많은 것을 배웠습니다. 감사합니다!!
@user-ul3yj7fi7h
@user-ul3yj7fi7h Год назад
압도적 감사
@min._k
@min._k 9 месяцев назад
감사합니다
@현재혁-r3f
@현재혁-r3f 7 месяцев назад
감사합니다. 진짜 어제 하루종일 왜 안되는지 찾아 다니다가 TextMeshPro 객체까지는 시도 해봤었는데... 이 댓글 못 봤으면 4번에 TextMeshProUGUI 시도하는데 하루가 더 걸렸겠네요. 진짜 감사합니다
@Dannykim722
@Dannykim722 4 месяца назад
오~ 영상에 AudioSource.Play() 추가 부분 스킵하셔서 '읭? 소리가 왜 안나오징?' 하고 5분간 벙쪄있었는데.. ㄳㄳ~
@sining365
@sining365 5 лет назад
35:00초 우측에 보시면 Stages 항목에도 스테이지를 드래그해서 추가하셔야 합니다. 영상에서는 생략된 것 같아서 맨 땅에 헤딩하면서 찾았습니다ㅠㅠ
@워킹조각맨
@워킹조각맨 4 года назад
감사합니다 ㅎㅎ
@eddiemine6519
@eddiemine6519 3 года назад
감사합니다!
@hyee_yaming
@hyee_yaming 2 года назад
감사합니다!! ㅎㅎ 덕분에 해결했어요 ㅎㅎ
@뚠뚠한고냥이
@뚠뚠한고냥이 Год назад
ㅠㅠ 저는 어떻게 stage 값 넣지 고민하다가 리스트에... 아 맛닦... 유니티는 끌어다 놓으면 되지....라는 개꿀 생각에...해결 했네요... (코드로 작성하고 있었음..............ㄷㄷ;;;;...........................) 그렇게 하고나서 님..댓글을...봤는데...............ㄷㄷ... ㅠㅠ
@김태영-s2w
@김태영-s2w 10 месяцев назад
감사합니다.
@아임그루트-g7n
@아임그루트-g7n 4 года назад
형정말 고마워ㅠㅠ 처음부터 쭉 따라해서 게임 하나 완성할 수 있게 친절하게 설명하는 채널은 형이 원탑이야!!
@HolyM0
@HolyM0 7 месяцев назад
5일 전만 해도 유니티 노베에 씨샵 노베였는데 지금은 제가 직접 스크립트도 쓰고 그럽니다 강의 정말 잘 들었어요!!!
@제희규
@제희규 4 года назад
26:18초 혹시 케릭터가 죽고나서 뒤집힌 채로 떨어지지 않는 부분에 문제가 있으신분들은 맨 위에 public class에 예를들어 CapsuleCollider2D capsule_pl; 이름을 지어주시고 void Awake항목에 capsule_pl = GetComponent(); 이렇게 적으신다음에 public void OnDie()함수에서 capsule_pl.enabled = false;를 적는다면 케릭터 문제를 벗어날 수 있습니다
@김소울-h4f
@김소울-h4f 3 года назад
정말 감사합니다
@백에스더-t2z
@백에스더-t2z 2 года назад
감사합니다!!
@연정-w4e
@연정-w4e Год назад
와 진짜 감사합니다 복받으시고 오래오래사세요
@샤샤샤-e9c
@샤샤샤-e9c Год назад
사랑합니다
@김태영-s2w
@김태영-s2w 10 месяцев назад
텡스 탱스 Thanks
@gamedom7
@gamedom7 Год назад
마지막 영상인 만큼 여러 난관에 봉착했었지만 댓글 답변과 구글링을 이용해 가까스로 완성했습니다. 정말 감사합니다
@태이-q1y
@태이-q1y 4 года назад
강의 정말감사하고 도움 정말 많이 되었습니다 항상 열심히 듣고 있습니다. 항상 건강하시고 이 채널 흥하길 바랍니다
@tree_004
@tree_004 2 года назад
작년에도 여기까지 따라왔다가 걷잡을 수 없어진 오류 때문에 맨탈이 터져서 게임 개발 공부를 접었었는데, 1년이 지난 지금은 무사히 따라할 수 있었습니다! 이대로 탑다운 뷰까지 따라가겠습니다! 감사합니다!
@ReeperKuruRuke
@ReeperKuruRuke Год назад
몇가지 수정이 필요하거나 있으면 좋을 것 같은것들 (이것이 단순히 제가 수업을 제대로 따라가지 못해 발생한것들이라면, 죄송합니다 ^^;7) 1.피격 무적시간중에 낭떠러지로 떨어지면, 시작 위치로 이동이 안됨 2.피격 무적시간중에 적을 밟을 수 있으면 좋겠음 (충돌 검사가 아예 없다보니...) 3.가시를 위에서 밟을경우 피격 처리가 제대로 안됨 (가시를 몬스터와 같은 태그와 두다보니 게임이 "몬스터를 밟은것"이라 생각해서 Null Reference만 뜨는데, 태그를 별도로 지정하면 해결될 듯) 4.구덩이나 벽 등 조금 더 특수한 지형에서의 몬스터 AI 구현 (벽을 만난 몬스터는 즉시 Turn을 호출하거나, 양옆으로 벽이 있으면 nextMove를 0으로 고정하거나...) 5.플레이어 사망 후에 조작이 불가능하게 막을 것 6.슈퍼점프 등 점프력이 일정하지 않은 점 해결 (피격당하거나 몬스터를 밟기 직전 velocity를 0으로 - 근데 어떤 게임에서는 이런것들을 일부러 남기는 경우도 있음) 7.큰 맵에는 체크포인트를 둬서, 낭떠러지에 떨어지면 시작지점이 아닌 체크포인트에서 리스폰되게 물론 이런저런 수정할 점이나 추가할 점이 있다고 강의의 질이 떨어진다고 비난하는것은 아닙니다! 이런것들은 일종의 과제라고 생각하겠습니다, 좋은 강의 감사합니다!
@Jack-to7ur
@Jack-to7ur 9 месяцев назад
골드메탈님 강의 영상들 덕분에 유니티2d게임만들기에 대한 이해가 많이 올라갔고 하나 성공적으로 만들어봤습니다. 정말 감사합니다.
@무뇽-v2t
@무뇽-v2t 2 года назад
와 우여곡절 끝에 완성했습니다! 자잘한 버그들 수정해가면서 완성도를 높일 수 있는 방법을 연구해봐야겠네요 ㅋㅋㅋ 골드메탈 님 및 댓글로 문제해결방법을 알려주신 분들 정말 감사합니다!!
@Gyokujin
@Gyokujin 4 года назад
좋은 강좌 감사합니다. 정말 많이 힘들게 헤매었지만 결국 완성하였습니다 ㅎㅎ. 많은 공부 되었습니다!
@참구리네
@참구리네 2 года назад
감사합니다 골드메탈님 덕분에 유니티 배우기가 정말 수월해요. 끝가지 따라서 다 만들었는데 뭔가모를 성취감이 느껴지네요. 응용까지 할 수 있게 계속 반복 숙달해봐야겠네요
@goldmetal
@goldmetal 2 года назад
도움이 되셨다니 다행입니다.
@그럼날아봐
@그럼날아봐 5 лет назад
오~ 드디어 플랫포머 강좌 완료군요!! 수고많으셨습니다! 좋은 강의 올려주셔서 감사합니다!
@김태언-j8q
@김태언-j8q 4 года назад
35:02 에서 public Text 부분과 public Image[] 부분이 빨간줄로 계속 그어지면서 없는걸로 뜨는데 따로 뭐 설정이 필요한가요?/// 수정 아 동영상 슬로우로 계속 정지하면서보니 위에 using UnityEngine.UI; 을 선언해야되는군요... 만약 막히시는분 있으면 참고하세요
@damo07
@damo07 4 года назад
이렇게 해도 저는...ㅠㅠ 아예 유니티 인스펙터에도 뜨지가 않네요...Image는 오류나고..모호하다면서
@강대민-d7w
@강대민-d7w 4 года назад
@@damo07 알트+엔터 누르니까 using UnityEngine.UIElements; 라는걸 사용하라 하는군요 public UnityEngine.UI.Image[] UIhealth; 그리고 이렇게 바꿔봤어요
@damo07
@damo07 4 года назад
@@강대민-d7w 메탈님 다른 영상에 댓글 보면 저는 이미 그걸 알고 있었습니다 ㅎㅎ
@merope7910
@merope7910 4 года назад
오..감사합니다
@TheCFG_
@TheCFG_ 4 года назад
님 덕분에 에러 해결했습니다 감사함다 m(O_O)b
@skehewmq
@skehewmq 7 месяцев назад
완성하니 뿌듯하네요 좋은 강의 감사합니다!
@star5482
@star5482 2 года назад
골드메탈 형님 사랑합니다.. 이 영상으로 거의 5시간동안 따라하면서 안되는 부분 분석하고 스스로 디버깅도 해봤습니다. 하다보면 언젠간 실력이 늘어나지 않을까 기대해봅니다!
@goldmetal
@goldmetal 2 года назад
도움이 되셨다니 다행입니다.
@뚠뚠한고냥이
@뚠뚠한고냥이 Год назад
@@goldmetal 형님 현존하는 유니티 강좌중에 탑클래스에요. 감사합니당 ~
@HOHO-yj8uv
@HOHO-yj8uv 2 года назад
플랫포머 만들기 완주했습니다. 좋은 강의 감사합니다. 😁
@ex_n7494
@ex_n7494 3 года назад
너무 재미있어서 잠도 줄여가면서 따라 만들었네요ㅎㅎ 혼자 뽈뽈거리며 움직이는 몬스터를 봤을 때의 감격과, 분명 잘 따라한 것 같았는데, 몇시간동안 찾아봐도 안풀리는 문제에 의한 혼란과 스트레스.. 그리고 그것이 단순한 실수 때문이라는 것을 알았을 때 드는 허망함과, 그래도 포기하지 않고 해결해냈다는 뿌듯함이란... 덕분에 참 다양한 경험을 하고있네요ㅋㅋ 정말 감사드립니다!
@김도엽-g7h
@김도엽-g7h 3 года назад
정말 감사합니다 골드메탈님!! 게임 개발에 관심을 가지게 되어서 유니티로 2D 플랫포머 게임만들기에 도전중인데 첫 강의부터 끝까지 정말 행복하게 봤습니다... 드릴 수 있는건 없구 정말 감사했다는 말씀 드리고 싶네요!! 앞으로도 모든 강의 다 보겠습니다 ㅎ_ㅎ 정말 명강의에요!
@goldmetal
@goldmetal 3 года назад
도움이 되셨다니 다행입니다. 😊
@GoodLife5312
@GoodLife5312 4 года назад
몬스터 죽으면서 떨어질때 계속 도시는분들 y축 반전될때 if문으로 nextmove = 0으로 만드세요 그럼 안돌겁니당
@버근가-q2r
@버근가-q2r Год назад
이런 방법이... 에니메이터에 죽는 에니메이션 추가하고 매개변수 isAlive만들어서 if문에 붙이는 번거로운 작업보다 이게 훨 깔끔하네요
@wlcudy
@wlcudy Год назад
감사합니다!
@블라인드
@블라인드 9 месяцев назад
적 cs에서 if (rayHit.collider == null) Turn(); 부분을 if (rayHit.collider == null&&!spriteRenderer.flipY) Turn();
@박수진-d5g
@박수진-d5g 4 года назад
이거 보고 처음으로 유니티로 게임 만들어봤는데 진짜 너무 신기하고 덕분에 많은 것 배웠습니다 정말정말 감사합니다ㅠㅠㅠㅠㅠ 다음 영상들도 계속 보면서 쭉 게임 만들어봐야겠어요 넘넘 좋은 영상이에요ㅜㅜㅜ 최고입니다 골드메탈님 ㅠㅠㅠㅠ!!!
@제희규
@제희규 4 года назад
만약 UI 크기를 일정하게 만들고 싶다면 UI Scale Mode를 Scal With Screen size로 바꿔주시면 일정하게 유지됩니다! 골드메탈님 도배 죄송합니다ㅠㅠ
@오유진-z3m
@오유진-z3m 3 года назад
멋지게 잘 완성했습니다! 강좌 듣고 따라하는 내내 너무 재밌었어요 ㅎㅎ 다음 RPG강좌도 열심히 잘 듣겠습니다! 감사합니다 :)
@saglev1841
@saglev1841 Год назад
수정할 것 1. 비탈길 미끄러짐 -> 해결 완료. isKinematic 이용시 버그가 많아 Freeze Position 이용 2. 피격에 의해 죽을 시 DIE사운드 미출력 -> 해결 완료. 해당 영상 댓글에 있는 코루틴 이용 3. 가시, 적이 겹쳐 있을 시 체력이 여러 번 감소 -> 해결 완료. bool값 이용 4. 무적 시간 동안 적 공격 불가능 -> 해결 완료. 플레이어 안에 빈 객체 생성 후, isTrigger collider을 발밑에 두고 OnAttack로직을 OnTriggerEnter로 이동 5. 내리막길 공중으로 뜸 -> 해결 완료. raycast 및 gravityScale 이용
@Poro-cute
@Poro-cute 8 месяцев назад
Freeze Position 어떻게 하는건가요...점프해서 비탈길가면 미끄러져요.....
@1o-2o-3o
@1o-2o-3o 8 месяцев назад
골드메탈님 저만 겪은 현상인지는 모르겠는데 몬스터 밟았을 때 Invoke("DeActive", 5f);가 실행 안되고 그냥 지나가는 현상이 있었습니다. 그래서 enemy가 비활성화가 안되는 문제가 있었고 1시간 정도 지나 해결했는데 몬스터가 떠오르면서 레이에 닿는것이 없어져 turn이 실행되고 거기서 CancelInvoke();에 의해 모든 invoke가 실행안되는게 원인 같습니다. 그래서 CancelInvoke("Think");로 해줬더니 바로 해결되었습니다.
@gamedev.1166
@gamedev.1166 5 лет назад
항상 감사합니다 ㅎㅎ 플랫포머 만들 예정이었는데 잘봤어용 ㅋ
@꿀죽창
@꿀죽창 4 года назад
플래포머 정주행 완료! 알찬정보 항상감사드립니다 번창하세요
@goldmetal
@goldmetal 4 года назад
감사합니다!
@곽석봉-u5g
@곽석봉-u5g 3 года назад
혹시나 같은 오류로 고생하실 분들을 위해 남깁니다. 몬스터와 충돌했을 때는 문제가 없지만 가시와 위에서 충돌했을때 게임 화면이 튕기며 씬 화면으로 전환되며 Nullreferance 오류가 나는 분들은 몬스터와 가시가 둘 다 태그가 enermy로 묶여있지만 가시에는 위에서 떨어졌을 때 처리할만한 스크립트가 들어가지 않아 발생하는 오류로 보입니다. 가시와 몬스터의 태그를 분리시켜주면 해결됩니다.
@khhw119
@khhw119 3 года назад
덕분에 잘 처리했습니다 감사합니다!
@카카오아
@카카오아 Год назад
가시 tag를 Spikes로 바꿨거든요, 그랬더니 가시를 밟을때 타격이 없어졌어요 ㅠ
@cjy8972
@cjy8972 2 месяца назад
33:50 Stage가 어떻게 넘어가는지를 이미 가르쳐주신 개념이라 생략하셨습니다. GameManager Script의 변수인 Stages배열에 Inspector 창에서 직접 오브젝트(Stage 1, 2, 3)를 넣어주셔야 됩니다. 사실 제가 많이 해맸습니다 ㅋㅋㅋㅋ
@건밴
@건밴 5 лет назад
골드 메탈님이 하신 대로 각자 행동에다 PlaySound("...");넣은 다음 음악파일도 넣었는데 소리가 안 나는데 알려주실 수 있나요?
@goldmetal
@goldmetal 5 лет назад
그 함수 맨 끝에는 ausioSource.Play() 함수가 있습니다. 적어두셨는지 확인이 필요하겠네요.
@AppleWind
@AppleWind Год назад
자잘한 실수나 오류 고치는데 몇시간이나 들어서 현타도 좀 왔지만 드디어 완성했네여 ㅠㅠ 항상 감사합니다.
@goldmetal
@goldmetal Год назад
프로그래밍 하다보면 그런 경우가 많이 발생합니다. 스스로 해결하신 것도 엄청난 결과니까 계쏙 이런 일을 만나시면 나중에는 빠르게 디버길하실 수 있을겁니다.
@AppleWind
@AppleWind Год назад
@@goldmetal 항상 감사합니다
@경강-e7e
@경강-e7e 3 года назад
40:38 처럼 retry 가 나와야 하는데 안나오고 계속 오류가 이런식으로 뜹니다 UnassignedReferenceException: The variable UIRestartBtn of GameManager has not been assigned. You probably need to assign the UIRestartBtn variable of the GameManager script in the inspector. 어떻게 해야하나요?
@goldmetal
@goldmetal 3 года назад
게임 매니저의 UIRestartBtn 변수 public으로 하셨나요? 아니라면 public 키워드 추가해주시고 인스펙터 창에 나타나면 그 칸에다가 Retry 버튼을 드래그해서 넣어주세요
@경강-e7e
@경강-e7e 3 года назад
@@goldmetal 해결 했습니다! 시험기간이라서 확인은 못하고 끝나고 다시해보니 덕분에 해결 됬네요 감사합니다!
@양미소-x2f
@양미소-x2f Год назад
41:07 이 부분에서 갑자기 코드가 변하는데 ViewBtn();이 어디서 나온건가요? 저대로 코드를 쓰니까 Assets\Scripts\GameManager.cs(46,13): error CS0103: The name 'ViewBtn' does not exist in the current context 이런 오류가 뜨고 스테이지가 다 끝나도 Clear 버튼이 안 뜹니다
@goldmetal
@goldmetal Год назад
41:21 여기서 85번째 줄부터 새롭게 ViewBtn 함수 작성했고 그걸 63번재 줄에서 호출하고 있습니다. 혹시 모르니 이와 관련된 코드 아래에 작성해드릴께요. public void HealthDown() { if(health > 1) { health--; UIhealth[health].color = new Color(1, 0, 0, 0.4f); } else { //All Health UI Off UIhealth[0].color = new Color(1, 0, 0, 0.4f); //Player Die Effect player.OnDie(); //Retry Button UI Invoke("ViewBtn", 3); //3초 뒤에 재시작 버튼 보여주기 } } void ViewBtn() { UIRestartBtn.SetActive(true); }
@jawon760476
@jawon760476 4 года назад
가시를 밟는 행동을 하면 NullReferenceException: Object reference not set to an instance of an object Move.OnAttack (UnityEngine.Transform enemy) (at Assets/Script/Move.cs:141) Move.OnCollisionEnter2D (UnityEngine.Collision2D collision) (at Assets/Script/Move.cs:94) 이렇게 오류가 나는데 이건 어떻게 해결하나요?
@goldmetal
@goldmetal 4 года назад
enemy 태그를 같이 사용하려다 가시에 enemyLogic 스크립트가 없어서 발생하는 문제입니다. 가시를 spike 같은 태그를 따로 구분해서 충돌 처리해주시면 해결됩니다.
@카투스-o4w
@카투스-o4w 8 месяцев назад
골든메탈님! 몬스터 사망 모션 할 때 뒤집어진 상태로 떨어지는데 이 때 위에 벽이 있으면 레이 케스트가 연속으로 발동해 좌우반전이 계속 되는 현상이 생기네요. 저는 그냥 처음에 int death = 0;하고 레이케스트 발동 조건을 if문if( death == 0);으로 감싸서 실행 시킨다음 죽는 함수 맨처음에 death = 1;를 발동시켜 레이케스트를 발동하지 못하게 만들었습니다. 결국에 해결은 했는데 괜히 int 하나 더 만든 느낌이라 불편합니다. 뭔가 좀 더 좋은 수가 있었을까요?? 항상 골든메탈님은 간편하거나 코드 몇줄이나 쭐일수 있는 방법을 사용하시던데 좋은 수가 궁금합니다.
@1o-2o-3o
@1o-2o-3o 8 месяцев назад
같은 케이스인지는 모르겠지만 저도 좌우반전이 빠르게 일어나는 현상을 겪었습니다. 적 이동 중에 밟았을 때 이런 현상이 나타나더군요. 저같은 경우 원인은 아마도 rayHit에 null이 아니었을 때 실행되는 조건문이 FixedUpdate에서 반복 실행되니 turn()함수가 그대로 반복되는 거였습니다. 밟았을 때 nextMove가 0이 되게 만들어서 해결했습니다.
@kms0218
@kms0218 4 года назад
40:04 에서 Restart를 만들었는데 Assets\Scripts\GameManager.cs(103,9): error CS0103: The name 'SceneManager' does not exist in the current context 이런식으로 뜨네요 ㅠㅠ
@goldmetal
@goldmetal 4 года назад
SceneManager를 사용하기 위해선 먼저 맨 위 쪽에 using UnityEngine.SceneManagement; 네임 스페이스를 불러와야 합니다.
@kms0218
@kms0218 4 года назад
@@goldmetal 감사합니다!
@이성택-n3q
@이성택-n3q 3 года назад
@@goldmetal 저도 이거때문에 고생했네요ㅠㅠㅠ감사합니다
@seomilky
@seomilky 3 года назад
골드메탈님! 좋은강의 정말 잘 들었습니다ㅎ 이 게임을 완성도 높게 만드려고 이것저것 찾아보면서 게임을 채우고있어요 하던 중 오류? 아닌오류를 발견했는데 높이있는 플랫폼에 점프를하면 가끔 isjuming 상태가 해제되지 않아서 애니메이션도멈추고 또 다시 점프를 못하는상황이와요 또 내리막길에서 한번 점프를하면 착지후부터 평지까지도 같은 상태가 발생되구요 뭐때문에 그런걸까요ㅠㅠ..?? 혼자 고민하고 이것저것 만져보다 못알아내서 댓글남겨용
@goldmetal
@goldmetal 3 года назад
RayCast는 선으로 쏘는데 플레이어 닿는 면적은 면이기 때문입니다. 플레이어 이동방향으로 Ray를 치우쳐서 쏘면 좀 더 정확한 착지가 됩니다. RayCast 함수 첫번째 매개변수에 플레이어 이동 방향을 더해주시면 좋습니다. + new Vector3(h, 0, 0)
@muhadojun
@muhadojun 2 года назад
와우 ~ "유니티 강좌 기초 채널 Basic" 정주행 해서 ~ 드뎌 첫 게임 완성되었네요 ~ 설명을 너무 잘 해주셔서 감사합니다. ~ ^^;; 저도 이렇게 게임 개발이 시작되려나 봅니다. ~ ㅎㅎ 이와중에 질문이 ~ 윈도우 빌드하면 전체화면만 되는데 해상도를 작게나 바꿀수 있는 기능은 어디에서 찾을 수 있나요 ??
@goldmetal
@goldmetal 2 года назад
2018까지는 게임 실행하면 Config 창이라고 해서 기본으로 있던 기능이었습니다만, 사용 빈도가 많이 줄어서 2019버전부터 삭제되었습니다. 창모드는 Player Setting에서 설정 가능합니다. 해상도는 코드로 구현해주셔야 해요. docs.unity3d.com/kr/2019.4/Manual/class-PlayerSettingsStandalone.html
@muhadojun
@muhadojun 2 года назад
@@goldmetal 좋은 정보 감사드립니다. ~ ^^ 코드로 해 보겠습니다. ~ 항상 친절한 답변에 정말 감사드립니다. ~ !
@jay_sss9374
@jay_sss9374 11 месяцев назад
안녕하세요 좋은 강의 감사드립니다:) 하나의 궁금증이 생겨서 질문남깁니다!! 플레이어의 OnAttack함수에 Transform을 넘겨주는 이유가 궁금합니다...! 제가 생각했을 때 조금 더 의미적으로, "충돌한 게임 오브젝트를 넘겨준다"라고 생각하여 collision.gameObject를 넘겨주어야하는것이 아닌가?라는 생각이 들었습니다 결국 EnemyMove라는 컴포넌트는 게임오브젝트에 부착이 되는것이지, 오브젝트의 트랜스폼에 부착되는것이 의미적으로는 아니라는 생각이 들어서요...! transform에서 EnemyMove라는 컴포넌트를 찾아도 잘 작동하는 이유가 모든 게임오브젝트는 트랜스폼을 가지기에 가져올 수 있는것이 맞을까요????
@goldmetal
@goldmetal 11 месяцев назад
네 맞습니다. 유니티에서는 게임오브젝트와 트랜스폼은 1:1 관계기 때문에 위치 정보만 가져오려면 오히려 transform을 넘겨받는게 코드 절약과 속도면에서도 좋습니다.
@jay_sss9374
@jay_sss9374 11 месяцев назад
의미론적인것도 좋지만 절약할 수 있다면 채택해서 스크립트를 짜는거군요:))😊
@수호-f4v
@수호-f4v Год назад
안녕하세요 혹시 실례가 안된다면 학교 과제에 응용해서 내도 될까요? 물론 소스랑 사용되는 에셋은 출처를 명확히 밝히고 할건데 괜찮으시간요?
@goldmetal
@goldmetal Год назад
물론 사용하셔도 됩니다! 좋은 결과 얻으시길 바랍니다🤗
@도라에몽-b7b
@도라에몽-b7b 4 года назад
올려주시는 영상 보면서 유니티 공부하고 있습니다. 감사합니다!! 그런데 몬스터가 움직일때 공격을 하면 빙글빙글 돌면서 죽더라구요 if문을 넣으면 된다고 답변해주신걸보고 혼자 시도 해봤는데 잘 되지 않았습니다. 혹시 괜찮으시다면 구체적으로 어떤 문장을 넣어야하는지 알려주실수 있을까요?
@goldmetal
@goldmetal 4 года назад
죽으면 isDie = true, 이 변수로 rayHit if문에다가 조건 추가하시면 됩니다.
@jyosun0305
@jyosun0305 3 года назад
이번 영상도 클리어했습니다! 좋은 영상 올려주셔서 감사합니다~!
@정재영-q9i
@정재영-q9i 3 года назад
안녕하세요. 영상 감사합니다. 질문 있어서 댓글 남깁니다. 혹시 한 스테이지에 finish 오브젝트를 2개 이상 만들어서 각 finish가 연결되는 스테이지를 다르게 하고 싶은데 현재 방법으로는 무조건 다음 스테이지로만 이동되어서 어떻게 하는 게 좋을까요?
@goldmetal
@goldmetal 3 года назад
12:52 태그 외에도 if(collision.gameObject.name == "Finish 1") 추가로 이름까지 비교해서 다른 스테이지로 넘기면 될 것 같네요.
@배철곽-m9y
@배철곽-m9y 3 месяца назад
20:17 에서 collision.gameObject.tag =="Player" 라고 쓰셨는데 if문민 실행이 안돼서 tag를 name로 바꿔서 했다가 됐어요. tag랑 name의 차이는 뭔가요??
@goldmetal
@goldmetal 3 месяца назад
name은 하이어라키, 인스펙터 맨 위에 보이는 오브젝트 이름이구요 tag는 인스펙터 위쪽의 Tag 데이터를 말하는 것입니다. 몬스터에도 여러 종류의 몬스커가 있듯이 몬스터를 하나의 카테고리로 잡고 Tag로 지정하되 서로 name 이름은 다르게 할 수 있겠지요.
@formeham634
@formeham634 4 года назад
게임개발에 막 발 들인 참인데 정말 알기 쉽고 재밌게 가르쳐주셔서 2D 마지막 챕터까지 잘 따라왔네요~ 감사합니다! ㅎㅎ
@헤헤-w5l
@헤헤-w5l Год назад
정말로 잘 배워갑니다. 동영상 편집도 깔끔하고 이런 자료가 무료라는게 정말 믿기지 않네요... 돈받고 파셨어도 저는 구매했을 겁니다. 감사합니다.
@단도
@단도 3 года назад
예전영상이라 질문드리기 좀 조심스럽지만.. public int stageIndex; public int health; public PlayerMove player; public GameObject[] Stages; public void NextStage() { //스테이지 변환 if(stageIndex < Stages.Length-1){ Stages[stageIndex].SetActive(false); stageIndex++; Stages[stageIndex].SetActive(true); PlayerReposition(); } else{ //클리어 Debug.Log("클"); } totalEnemy += stageEnemy; stageEnemy=0; } 영상에 나온데로 짠거 같은데 골인점에 닿았을때 스테이지가 넘어가질 않고 바로 else 구문으로 넘어가네요... 혹시 왜 그런지 여쭐 수 있을까요?
@goldmetal
@goldmetal 3 года назад
게임매니저의 인스펙터 창에서 Stages 배열변수 사이즈가 몇인지 확인해보세요. 스테이지를 여러개 만드셨으면 Stages 변수에 넣어두셔야 합니다.
@단도
@단도 3 года назад
@@goldmetal 감사합니다! 덕분에 해결되었어요!
@kenwooshim
@kenwooshim Месяц назад
캐릭터로 동전에 접근할때 벽처럼 투과되지 않고, OnTriggerEnter2D함수가 아예 호출되지 않는 문제가 발생했었는데 동전 오브젝트에 IsTrigger 항목에 체크를 하니 해결되었네요. 제가 아무래도 중간에 놓친 것 같네요.
@1313-e3o
@1313-e3o 5 месяцев назад
골드메탈님! 영상을 참고하며 독자적으로 게임을 만들어보고 있는데요, 마땅히 질문할 곳이 없어서 그나마 여기 올려봅니다ㅠㅠ 골드메탈님처럼 finish 깃발에 닿으면 다음 스테이지로 넘어가게 했는데요.. 깃발에 닿으면 가끔 onTriggerEnter2D가 두 번 실행됩니다. 디버그해보니 충돌이 두 번 된걸로 뜨더라구요. 오브젝트가 두 개 겹쳐있는것도 아니고 콜라이더가 여러개인것도 아닌데 문제가 뭘까요?ㅠㅠ
@goldmetal
@goldmetal 5 месяцев назад
물리적인 움직임에 의해 그럴 수 있습니다. 정확한 계씬을 위해서 깃발에도 Rigidbody2D 달아주시고 대신 움직이지 않으니까 Type을 Static으로 설정해주세요. 그래도 두 번 실행된다면 bool isTouch 같은 변수 추가해서 최초 닿을 때 isTouch = true; 해두고 위에는 if (isTouch) return; 놓아서 두번 모두 실행되지 않게 막으실 수 있습니다.
@1313-e3o
@1313-e3o 5 месяцев назад
@@goldmetal 네 정말 감사합니다!!
@bbyong-su
@bbyong-su Год назад
끝까지 잘 봤습니다. 감사합니다~
@뚝딱맨-e7m
@뚝딱맨-e7m 3 года назад
안녕하세요 골드메탈님 질문이 있어서 댓글을 남깁니다. 혹시 플레이어의 health와 게임매니저의 충돌에서의 health를 둘 다 -- 하는 이유가 있는지요? 제가 플레이어 부분을 지워 봤는데 실행 시 게임매니저 health 감소가 안 되더라고요 플레이어 부분의 gamemanger.health 감소와 게임매니저의 health 감소의 의미가 뭔지 궁금합니다.
@goldmetal
@goldmetal 3 года назад
게임 매니저가 낭떠러지 로직을 처리한다는 느낌으로 분리해서 그렇습니다. 사실 게임매니저에 태그만 새로 추가해두고 로직을 플레이어에서 처리하시면 더 깔끔할겁니다.
@BBBB0601
@BBBB0601 2 года назад
피격판정은 되는데 피격 에니메이션이랑 불투명해지는게 적용이 되지 않습니다. 근데 또 죽는모션은 되고요. 피격시 Index was outside the bounds of the array.라고 뜨는데 혹시 짐작가시는게 있을까요? +위에 문제들은 해결이 됐는데 가시 판정을 따로 만들어 놓으니 피격후 잠깐동안 무적이되는 코드가 안먹히는 건지 불투명해져도 계속 피격당합니다. 그냥 기존의 적에게 닿았을때 판정이 적혀있는 코드 밑에 else if(collision.gameObject.tag == "Spike") //가시판정 { OnDamaged(collision.transform.position); } 이라 해놓았는데 무적이 적용이 안되요. ++알고보니까 PlayerDamaged랑 새로만든 Spike 태그끼리 상호작용이 안되게 해놓으면 되는 거였네요. 늘 좋은 강의 감사합니다.
@goldmetal
@goldmetal 2 года назад
문제 잘 해결하셔서 다행입니다.
@유이건
@유이건 10 месяцев назад
골드메탈님 질문 있습니다! 1. 몬스터를 밞을때 SetActvie(false) 보다 Destroy를 쓰는 것이 더 메모리 관리에 효율적이지 않나요? SetActive는 비활성화만 시키는 것이니 그대로 남아있어서 계속 메모리를 잡아먹는다고 알고 있어서 여쭤봅니다! 2. void OnAttack(Transform enemy) { //Point //Enemy Die EnemyMove enemyMove = enemy.GetComponent(); enemyMove.OnDamaged(); } 이 부분이 도저히 생각해도 잘 이해가 안갑니다.. ㅠㅠ 저 앞에 (Transform enemy)가 왜 붙는지 모르겠고 아래쪽에는 굳이 enemyMove라는 변수를 추가했는지 모르겠고 컴포넌트를 가져올거면 앞쪽에 Awake 함수에 넣어야하지 않나 싶어서 질문드립니다!
@goldmetal
@goldmetal 10 месяцев назад
1. 한두번 정도만 사용하는 게임오브젝트는 Destory를 써도 무방합니다. 단 한 장면에 여러 번 등장하는 오브젝트는 다시 재사용을 위해 파괴하지 않고 비활성화를 해두고 다시 활성화하여 사용하는 경우가 많기 때문에 그 연습이라고 보시면 되겠습니다. (Destroy를 많이 사용하면 파편화된 메모리가 쌓이게 되어 GC 가비지컬렉션이 실행됩니다.) 2. 플레이어 -> 몬스터에게 공격을 하므로 밟힘을 당한 몬스터에게 데미지 함수를 호출해주어야 합니다. 하지만 스크립트는 플레이어기 때문에 몬스터까지 접근하기 위해서 Transform enemy 매개변수를 받는 것입니다. 만약 이 스크립트의 Awake에서 GetComponent()를 한다면 그 값은 Null (공허)가 될 것입니다. 플레이어가 Enemy 스크립트를 컴포넌트로 갖고 있ㅈ ㅣ않기 때문이죠. 몬스터가 가진 Enemy 스크립트 컴포넌트로 접근하려고 하기 위해서 몬스터의 Transform에다가 .GetComponent();를 하는 것이니 참고 바랍니다.
@유이건
@유이건 10 месяцев назад
@@goldmetal 답변 감사합니다!! 어렵지만 너무 재미나네요ㅎㅎ
@czteamlove
@czteamlove 4 года назад
골드메탈님 덕분에 다 만들었어요!! 너무 뿌듯합니다ㅎㅎ!!! 정말정말 감사드려요!! 다음에 랜덤에 대해서 다뤄주실수있나용?!
@goldmetal
@goldmetal 4 года назад
최근 진행 중인 슈팅게임에서 랜덤에 대해 다루었습니다. (B29, B32) 아래 링크는 랜덤으로 적 비행기를 소환하는 부분입니다. ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-lKFka1regy8.html
@czteamlove
@czteamlove 4 года назад
@@goldmetal 방학때는 슈팅게임만들어볼거예용!! 골드메탈님 감사합니당>
@scottmichael2023
@scottmichael2023 5 лет назад
완벽한 강의 였습니다! 혹시 기회가 되신다면 2d 아이소메트릭 그래픽을 쓴 턴제 전투방식 RPG(파랜드 택틱스같은?) 강의도 올려주시면 좋겠습니다
@alkali2990
@alkali2990 4 года назад
골드메탈님 강좌로 유니티 공부중인데 정말 이해가 잘 됩니다. 강좌 만들어주셔서 정말 감사합니다!ㅠㅠ 그리고 한가지 질문이 있는데요, GamaManager를 만들고 PlayerMove에 있는 Game Manager 칸에 끌어놓으려고 해도 들어가질 않습니다ㅠㅠ 왜 그런 걸까요?? ㅠㅠ 이것때문에 진행을 못 하고 있습니다ㅠㅠ 알려주시면 감사하겠습니다! 강좌 정말 잘 보고 있어요!!
@goldmetal
@goldmetal 4 года назад
대략 두 가지 경우가 있습니다. 1. 끌어다 놓을 오브젝트에 타입에 맞는 컴포넌트가 없는 경우. 2. PlayerMove를 가진 플레이어가 Scene창에 올라온게 아닌 Assets 안의 프리펩인 경우.
@flyingsquid1042
@flyingsquid1042 4 года назад
골드메탈님, 항상 유익하고 즐거운 강의 감사합니다! 다만 강의를 따라 하던 도중, 약 33:00분에서 하고 있는 stageIndex 배열 부분에서 문제가 있어서 "The referenced script (Unknown) on this Behaviour is missing" 이라는 메세지가 출력되는데 이 부분은 어떻게 하면 좋을까요?
@goldmetal
@goldmetal 4 года назад
스크립트 파일 이름과 클래스 이름이 서로 같아야 합니다. 대소문자까지 정확히 같은지 확인해보세요.
@flyingsquid1042
@flyingsquid1042 4 года назад
@@goldmetal 감사합니다!! 그런데 이제는 (stageIndex < Stages.Length - 1) 요 구간에서 계속 else 값만 작용하는데 이부분은 어떻게 해결해야하는지 알려주실수 있으신다요??
@goldmetal
@goldmetal 4 года назад
@@flyingsquid1042 Stages 변수에 만들어놓으신 스테이지 오브젝트들을 넣으셧는지 확인이 필요하겠네요. 스테이지가 하나만 있다면 Stages.length-1 은 0이 되므로 else로만 가게 됩니다.
@flyingsquid1042
@flyingsquid1042 4 года назад
이제 정상적으로 잘 되네요!! 감사합니다!!
@hobbysakuga
@hobbysakuga 4 года назад
몹을 밟았는데 아무 변화 없는 문제. 몹이 죽고나서 한 없이 떨어지는 문제. 에너지 달아서 죽으면 멈추는 문제. UI까지 하고 Retry버튼 안나오면서 멈추는 문제. 가시 밟으면 오류나면서 멈추는 문제. 마지막 스테이지 클리어시 Retry버튼 안뜨면서 멈추는 오류문제. 이게 지금까지 따라하면서 나온 오류들인데 시간은 좀 걸렸지만 댓글이랑 구글검색해가면서 어찌어찌 다 해결했네요. 아직 이해하면서 따라하는 것은 아니지만 이해되고 이렇게 저렇게 혼자서 코드짜면서 해볼 날이 올거라고 생각하면서 따라하고 있어요. 그래도 다행인 것이 어릴 때는 정말 이렇게 해라 저렇게 해라 해도 무슨 뜻인지 전혀 감도 안와서 그냥 막막하고 어렵게만 느껴졌는데 골드메탈 선생님의 영상의 내용이 좋아서 그런지 지금은 막막한 느낌은 전혀 없고 할 수 있겠다는 생각이 많이 드네요. 맘이 앞서서 슈팅게임부분을 먼저 따라하다가 뭔가 빼먹는 기분이 들어서 기초B강의 처음부터 따라하면서 정주행하고 있어요.ㅎㅎㅎ 글이 길었네요. 그래서 드리고 싶은 말은 겁나서 코드 한 마디 못 쓰던 저같은 사람을 이렇게까지 자신감이 생길 수 있도록 좋은 내용으로 교육자료 올려주시는 것에 너무 감사하다는 것입니다. 하루빨리 게임을 하나 만들어서 골드메탈선생님께도 보여드리고 싶네요.
@goldmetal
@goldmetal 4 года назад
스스로 디버깅 할 수 있는 것 자체가 큰 능력입니다. 모쪼록 여기까지 잘 따라와주셔서 감사합니다. 마무리도 잘 해내실거에요 😊😊
@ssssssss8806
@ssssssss8806 4 года назад
골드메탈 님 강의잘보고있습니다. 한가지 않돼는게있어서 질문 드립니다. Stages에 사이즈 3칸만들고 스테이지 드레그해서 넣었는데 스테이지1에서 2넘어가면 넘어가자마자 캐릭터가 자동 낙사하는데 이거 어찌해야하나요?ㅜㅜ 스키립트에 플레이어 리포지션이 잘못된건지 아님 스테이지 오류인지 잘모르겠습니다ㅜㅜ
@goldmetal
@goldmetal 4 года назад
리포지션 위치가 2스테이지 플랫폼에 너무 딱 걸쳐있지 말고 조금 위로 여유를 주면 어떨까 싶네요.
@ssssssss8806
@ssssssss8806 4 года назад
@@goldmetal 친절한 답변 감사합니다.^^ 알려주신대로 해보겠습니다^^
@안종현-u2c
@안종현-u2c 3 года назад
골드메탈님 덕에 2d플랫폼 공부 너무 복잡하지 않게 잘 배우고있습니다. 게임개발쪽 학과 학생이라 골드메탈님 자료 보며 공부중인데 깃허브 사용법 공부도 병행중이라 하나씩 업데이트하면서 깃허브에 올려도 괜찮을까요? C#공부랑 유니티 전부 깃허브에 매일매일 기록중이라서요 그리고 어플빌드도 공부중이라 결과물들 빌드해서 테스트하고 다녀도 괜찮을까요?
@goldmetal
@goldmetal 3 года назад
당연히 괜찮습니다. 좋은 공부하시길 바랍니다.
@안종현-u2c
@안종현-u2c 3 года назад
@@goldmetal 답변감사합니다. 모바일로 빌드해보려고 UI버튼을 구현해서 좌 우 입력값을 따로 분해서 받게 한 다음 이벤트 트리거로 연결해서 구현은 되었는데 애니메이션이 작동을 안하네요 점프 키도 만들고 싶은데 감이 안옵니다ㅠㅠ
@goldmetal
@goldmetal 3 года назад
@@안종현-u2c 제 블로그에 해당 내용을 다룬 포스트가 있습니다. blog.naver.com/gold_metal/220894565141
@안종현-u2c
@안종현-u2c 3 года назад
@@goldmetal 마침 참고하면서 만들고 있긴 합니다. 계속 코드 뜯어보고 설정해봐야겠네요 감사합니다!
@user-djwlajagsu57
@user-djwlajagsu57 3 года назад
영상 잘보고있어요 킹드메탈님 제가 실수로 Assets 에 Tiles 를 지웠는데, 타일맵으로 그린 것들이 전부 색깔이 분홍색? 으로 변해버렸는데 다시 되돌릴수 있나요???
@goldmetal
@goldmetal 3 года назад
동일한 스프라이트를 가지고동일하게 타일 생성하면 돌아올 수 있습니다.
@박성찬-c1w
@박성찬-c1w 2 года назад
08:19초 OnDamaged 함수 내 Invoke("DeActive", 5)가 작동하지 않습니다. DeActive 함수 호출 자체가 아예 안되네요. 그런데 capsuleCollider.enabled = false 부분을 주석 처리 하니 또 Invoke가 정상적으로 작동합니다. 콜라이더를 끄는 것과 Invoke와 무슨 상관관계가 있나요? 영상을 보니 골메님도 DeActive함수가 호출이 안되는 것 같습니다.
@goldmetal
@goldmetal 2 года назад
Invoke가 작동이 안되는 경우도 있더군요 이럴때는 코루틴을 사용하시면 됩니다. 코루틴 사용 방법은 아래 링크로 드리겠습니다. m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=pxkey&logNo=221296053953
@곱창모둠
@곱창모둠 Год назад
강의 영상 잘 보고 있습니다. 질문이 있어서 드릴려고 합니다. 31:30초에서 VelocityZero()함수를 만드는 건 이해가 되는데요. GameManager.cs 안에 PlayerReposition 함수 안에다가 player.rigid.velocity=~; 이렇게 하는 건 오류가 뜨는데 정확한 이유를 알 수 있을까요? PlayerMove가 클래스니까 안에서 선언해준 멤버 변수 rigid도 사용할 수 있는 게 아닌가요? 오류를 보니까 보호 수준 때문에 액세스할 수 없다고 하는데 public과 private의 차이 때문에 그런 건가요?
@goldmetal
@goldmetal Год назад
네 마지막에 말씀하신 내용때문에 그렇습니다. 외부 스크립트가 변수를 접근하려면 공개를 해야하는데 그게 public입니다.
@Unknown_Korean
@Unknown_Korean Год назад
@@goldmetal 역시 골드메탈님 기초적인 것이든 뭐든 전부 일일히 신경써주시고 한결 같네요. 유니티 뿐 아니라 심성도 배워갑니다.
@Ray_On_7174
@Ray_On_7174 3 года назад
24:47에 있는 capsuleCollider에서 자꾸 Assets\Script\PlayerMove.cs(147,9): error CS0103: The name 'capsuleCollider' does not exist in the current context 이 오류가 뜨네요. 이런 경우에는 어떻게 해야 하나요?
@goldmetal
@goldmetal 3 года назад
맨 위에 collider변수를 capsuleCollider로 이름 바꾸어주세요.
@준식엄-z7k
@준식엄-z7k 4 года назад
골드메탈님 지금까지 열심히 공부하지만 모르는게 있어서 처음 댓글 달아봅니다! 다음 스테이지로 넘어가는 로직을 만들 때 public GameObject[ ] stages; 라고 하셨는데 [ ]의 의미는 뭔가요? 그리고 스테이지가 다음으로 넘어갈 때 if(stageIndex < Stages.Length-1)이라는 조건을 걸어 주셨는데 이 부분도 이해가 잘 안되네요... Length가 문자열 개수를 알려주는 것 아니였나요? 근데 Stages.Length-1는 왜 쓰이는지 모르겠어요 ㅠㅠ
@goldmetal
@goldmetal 4 года назад
[] 배열이라는 의미입니다. stages는 GameObject가 여러개 담긴 배열 타입이며 if(stageIndex < Stages.Length-1) -> stageIndex가 Stages 배열크기보다 작을 떄 라는 뜻이 됩니다.
@aziazi166
@aziazi166 8 дней назад
스테이지를 옮기기 위해서 플레이어를 제외한 모든 물체들을 stage에 집어넣었더니, 아이템 먹기, 장애물 충돌(몬스터, 스파이크) 부분에서 계속 Null 오류가 뜨네요 어떻게 해야할까요?
@goldmetal
@goldmetal 6 дней назад
Tilemap은 부모 오브젝트 Grid를 가져야 합니다. 이 구조에서 벗어났는지 확인해보세요
@귄-s8f
@귄-s8f 2 года назад
영상 너무너무 잘 봤습니다!! 근데 혹시 39:58에 있는 OnClick()이벤트 함수에 들어가는 ScenceManager는 어디서 나타난걸 까요 ㅠㅠ
@goldmetal
@goldmetal 2 года назад
SceneManager는 기본으로 들어가있는 클래스입니다. 다만 이걸 사용하시려면 먼저 맨 위족에 using UnityEngine.SceneManagement; 네임스페이스부터 쓰셔야해요
@juinnya
@juinnya 3 года назад
안녕하세요 골드메탈님 항상 영상 잘보고 따라가고있습니다! 다름이아니라 다른 소리들은 잘 재생이 되는데, DIE 사운드만 잘 나지않습니다. 그래서 몇번 테스트해본 결과, 번지점프해서 나오는 사운드는 항상 잘 나는데 가시에 부딪히거나 몬스터에 부딪힐경우 이 (DAMAGED)소리들때문에 소리가 묻히거나 덮어씌워져서 잘 나지않는 듯합니다. 이럴경우 DIE소리를 조금있다가라도 나게 하고 싶으면 어떻게 처리해야 좋을지요..?
@goldmetal
@goldmetal 3 года назад
Invoke 나 코루틴을 사용해야 하는데 코루틴 쪽이 좀 더 안정성이 있습니다. 해당 내용은 쿼터뷰 3D에서도 다루지만 일단 링크로 공유해드립니다. prosto.tistory.com/68
@hammin96
@hammin96 3 года назад
@@goldmetal 사운드 겹치는 버그 메모
@user-djwlajagsu57
@user-djwlajagsu57 3 года назад
저도 가시나 몬스터에 부딪혀서 죽으면 death 사운드가 안나오고 damaged 사운드만나와서 잠시 고민했는데 그냥 damaged 사운드가 나오는 조건을 체력이 2 이상일때만 나오도록 if 조건문 걸어주면 되요 그리고 sound 함수가 damaged 함수보다 위에 있어야됩니다 if (hp>=2) sound("damaged"); damaged(~~); 이런식으로요 반대로 damaged 함수를 위에 적으면 체력이 2일때 데미지사운드가 안나올거에요 아마두
@user-freestyle
@user-freestyle Месяц назад
골드메탈님 몬스터 밟기를 구현하는 데 죽질 않고 몬스터 위에 올라타버립니다. 공중에 떴다는 판정인지 캐릭터가 버둥거립니다. 이것을 해결하려고 collider를 box로도 설정해보고, capsule 크기도 다시 설정해봐도 달라지는 게 없네요. 파일이나 개체의 이름 설정을 제대로 하지 못해서 그런 건 아닌 것 같습니다.
@goldmetal
@goldmetal Месяц назад
플레이어 , 혹은 몬스터를 선택하시고 인스펙터에서 Tag가 각각 잘 설정되어 있는지 확인해보세요.
@TV-dr8hv
@TV-dr8hv 4 года назад
29:54 에 어떻게 stageindex들과 씬아래에 있는 stage 1,2,3이 연동되는건가요? 스크립트에는 아무리봐도stage는 안보이는데ㅠㅠ 아시는분 댓글 부탁드립니다.
@goldmetal
@goldmetal 4 года назад
Stages배열에 stage1,2,3 오브젝트를 담아둔 것입니다. 1차원 배열은 public으로 두면 인스펙터 창에서도 할당이 가능하니 참고하세요.
@김진-l4h
@김진-l4h 4 года назад
좋은 강의들 감사합니다 지금까지 기초채널 처음부터 2d플랫포머 완성하기 강의 까지 재밌었고 너무 감사합니다. 지금까지 하면서 이해 안되는 것이 있는데 알려주세요 ㅠㅠ 감사합니다 . 1. if (stageIndex < Stages.Length -1) 이 코드를 사용 한이유가 무엇이고 , Stages.Length는 무엇을 의미하는지 궁금합니다 Stages.Length는 어디에 위치하는지 궁금합니다. 2. SceneManager.LoadScene(0); 어떤것이 0번째 인가요? Scene 자체가 1개 밖에없어서 0 인건가요? 3. Default Contact Offset : 충돌 여백 로 알고 있는데 체크할 때 와 체크 하지 않을 때의 차이점이 궁금합니다. 4. Input.GetButtonDown("Jump")&& !anim.GetBool("isJump")) 무슨 뜻 5. if (rigid.velocity.x > maxSpeed) //Max Speed rigid.velocity = new Vector2(maxSpeed, rigid.velocity.y);//velocity : 리지드바디의 현재 속도 else if (rigid.velocity.x < maxSpeed * (-1)) rigid.velocity = new Vector2(maxSpeed * (-1), rigid.velocity.y);//velocity : 리지드바디의 현재 속도 rigid.velocity.x와 rigid.velocity.y의 값을 알고 싶습니다. 어디서 확인 할 수 있나요? 6. rigid.position은 무슨 뜻인가요? 8.Physics2D은 어떤 상황일 때 사용하나요? 9. //Atack if (rigid.velocity.y < 0 && transform.position.y > collision.transform.position.y) { OnAttack(collision.transform); } if조건식만 해석좀 해주세요 10. nextMove = Random.Range(-1, 2); //Range(): 최소(-1)~최대(2) 범위의 랜덤 수 생성 If (nextMove != 0 ) // 움직이지 않고 서 있을 때 spriteRenderer.flipX = nextMove == 1; //true = 1 =spriteRender flip x축 체크 여기서 flipX가 nextMove가 같을 때 1(true)이 되면 어떻게 된다는 건가요? 1이 true인건 알고 있는 데 이해가 안되네요 ㅠㅠ 11. UIpoint.text = (totalPoint + stagePoint).ToString(); ToString()이 무엇인가요?
@goldmetal
@goldmetal 4 года назад
1. 다음 스테이지가 있으면 넘어가기 위한 조건입니다. Stages는 배열 변수로 선언하였고 Length는 배열 길이를 뜻합니다. 2. File > Build Setting에 가면 Scene Index가 숫자로 표기되어 있습니다. 3. 체크가 아니고 수치만 조절합니다. 수치가 낮을수록 콜라이더 끼리 닿아있는 거리가 좁아집니다 (더 미세해짐) 4. 점프버튼 누른 상태 + 현재 점프 애니메이션 상태가 아닐 때 5. 리지드바디의 속도값입니다. 인스펙터 창에선 표시되지 않으며 Debug.Log()로 확인해야 합니다. 6. 리지드바디의 위치를 뜻합니다. 8. 2D 물리효과의 함수를 사용할 때 필요합니다. 9. 내려오고 있는 속도 + 플레이어가 충돌한 몬스터보다 위에 있을 때 10. =는 대입연산입니다. 비교연산은 == 이며 mextMove와 1을 비교하고 그 결과 bool값을 flipX에 넣는 겁니다. 11. int 혹은 float 형태의 값을 문자열 String 형태로 바꿔주는 함수입니다. - 전반적으로 질문들의 형태가 유니티 기초를 건너뛴 모습니다. 가급적 B2~ BE1 강좌를 보시면서 유니티 기초를 이해하시는 것을 추천드립니다.
@김진-l4h
@김진-l4h 4 года назад
@@goldmetal 빠른 답변 감사합니다.
@jongminkim6042
@jongminkim6042 Год назад
골드메탈님 안녕하세요 예전 영상이라 답글을 달아주실지 모르겠지만 댓글 남깁니다! ui로 이미지를 추가 해서 배경으로 하고 스테이지 변경시 배경도 같이 변경되게끔 하고 싶은데 어떤 방법이 있을까요??
@goldmetal
@goldmetal Год назад
배경 스프라이트 오브젝트 또한 Stage 오브젝트의 자식으로 넣어주시면 됩니다. 배경 스프라이크 경우 맨 뒤에 그려져야 하느 Order inLayer를 낮춰주시면 원하는 그림이 나올거에요
@namespace_
@namespace_ 2 года назад
이번편은 너무 스킵하는부분이 많아서 에러처리하는데 혼란스러웠네요 영상길어도상관없이 풀버젼으로 올려주시면 감사하겠습니다
@goldmetal
@goldmetal 2 года назад
이 강좌는 채널 초기 강좌 영상이라 많이 미흡했습니다. 때문에 2D 플랫포머의 경우 올해 한번 리메이크할 예정입니다. 감사합니다.
@namespace_
@namespace_ 2 года назад
@@goldmetal 넵 감사합니다 선생님
@양미소-x2f
@양미소-x2f Год назад
안녕하세요 하나 질문이 있는데 캐릭터가 스테이지3 피니쉬 깃발까지 가면 NullReferenceException: Object reference not set to an instance of an object GameManager.NextStage () (at Assets/Scripts/GameManager.cs:45) PlayerMove.OnTriggerEnter2D (UnityEngine.Collider2D collision) (at Assets/Scripts/PlayerMove.cs:109) 이런 오류가 뜨는데 대체 뭐가 문제일까요ㅠㅠ
@goldmetal
@goldmetal Год назад
GameManager의 45번째 줄에서 사용한 변수가 비어있다는 이야기입니다. 강좌 내용대로라면 Stages에 담은 3개 스테이지 이후가 없으므로 3스테이지의 깃발을 터치하면 아예 게임을 끝내거나 4단계 스테이지를 직접 제작하셔서 Stages에 추가하는 방법으로 해결하실 수 있습니다.
@이운영-v1f
@이운영-v1f 2 года назад
안녕하세요 playerReposition가 작동을 안 하는지 캐릭터가 떨어져도 제자리로 안돌아가고 별짓을 다해도 안되서 질문 드립니다. 그리고 UIPoint.text = (totalPoint + stagePoint).ToString(); 점수가 안올라가서 인스펙터에 다시 넣어보고 지웠다 해보고 했는데도 안됩니다;; 오류도 안떠서 모가 잘못된건지 모르겠네요
@goldmetal
@goldmetal 2 года назад
게임매니저 오브젝트에 콜라이더가 있고 그게 IsTrigger 체크되어 있는지 확인해주세요. 게임매니저의 OnTriggerEnter2D가 실행되어야 합니다. 한번 확인해보세요. 플레이어 오브젝트의 태그도 Player인지 같이 보시면 좋겠네요.
@ybji2242
@ybji2242 5 лет назад
정말 멋지심...좋은강의 넘나 감사드리는 것!
@진수현-n2f
@진수현-n2f Год назад
void OnAttack(Transform enemy) { EnemyMove enemyMove = enemy.GetComponent(); enemyMove.OnDamaged(); } 이부분이 이해가 가질 않습니다. 평소랑 GetComponent 를 다르게 쓰는 것 같아서 왜 이렇게 쓰는지 알려주실 수 있을까요? 왜 그냥 GetComponent를 사용하지 않았는지. Transform이 왜 필요한지 궁금합니다. 제가 알기로 GetComponent앞에 뭔가 붙었을 때는 다른 오브젝트에서 컴포넌트 가져오는 경우인 걸로 알고 있습니다. EnemyMove도 컴포넌트 인가요? C#script 컴포넌트인가요? 그게 맞다면 왜 그 스크립트를 collision.Transform에서 추출하나요? 질문이 좀 두서없어서 죄송합니다. 혼자 여러번 고민해 보았지만 답이 나오지 않아 답답한 마음에 여쭈어 봅니다.
@goldmetal
@goldmetal Год назад
우리가 만든 C# 스크립트를 게임 오브젝트에 넣으면 그게 하나의 컴포넌트가 되는 것입니다. 인스펙터 상에서 보이는 컴포넌트들은 모두 GetComponent로 가지고 올 수 있는 것이죠. collosion.transform 을 가져온 이유는 transform이 위치,회전,크기 값을 가지고 있으면서도 GetComponent를 사용할 수 있는 핵심 컴포넌트기 때문입니다. 꼭 이걸 따라하실 필요는 없지만 보통은 이런 식으로 구현한다고만 참고하시면 좋겠습니다.
@진수현-n2f
@진수현-n2f Год назад
@골드메탈 collision.transform은 어디에 붙어있나요? enemy.GetComponent(); 여기서 enemy라는 transform이 Enemy 오브젝트에 붙어있어야 EnemyMove스크립트를 가져오지 않나요? Collision이 Enemy 오브젝트인건가요?
@빱빱-k3l
@빱빱-k3l 2 года назад
골드메탈님 좋은강의 잘 봤습니다! 공부에 많은 도움이 되었어요!!! 그런데 아이템이 없어지고 같은 위치로 재생성하려면 어떻게 해야하나요??
@goldmetal
@goldmetal 2 года назад
Destroy 대신 스프라이크렌더러와 콜라이더만 enable = false해서 비활성화만하고 Invoke 나 코루틴으로 몇 초 뒤 다시 이 두 컴포넌트를 활성화 해주시면 됩니다.
@빱빱-k3l
@빱빱-k3l 2 года назад
답변해주셔서 정말 감사합니다!!!ㅠㅜㅜ 골드메탈님이 유튜브 안하셨음 저는 영영 유니티 손도 못대봤을거에요ㅋㅋ
@hsjeon584
@hsjeon584 2 года назад
정말 큰 도움이 되었습니다..!! 혹시 깃허브에 출처 밝히고 올려도 될까요?? 출처는 리드미에 영상강좌 링크랑 스튜디오 링크 올릴생각인데 괜찮을까요?? 정말 하나하나 친절하게 설명해주셔서 잘 배우고 갑니다! 감사합니다~~
@goldmetal
@goldmetal 2 года назад
물론 가능합니다.
@hsjeon584
@hsjeon584 2 года назад
@@goldmetal 감사드립니다..! 항상 강의들 따라해도 오류가 뜨고 잘 안되고 그랬는데 골드메탈님 강의는 잘 구현이 되네요ㅜㅜ 끝까지 정주행하겠습니다! 좋은 하루되세요~!
@FindValueTheta
@FindValueTheta 7 месяцев назад
스테이지를 많이 만드는 만큼 게임 오브젝트 량이 많아 질텐데 이것이 쌓이고 쌓이면 게임 성능에 무리를 줄까요? setactive 꺼줌으로서 상관없는건가요?
@goldmetal
@goldmetal 7 месяцев назад
넵 첫 장면에 입장할 때만 로딩시간이 조금 있을뿐 이후부턴 걱정하시지 않아도 됩니다. 심지어 플랫포머 2D는 옹량이 큰 것도 아니라서 왠만하면 문제될 여지는 없습니다.
@FindValueTheta
@FindValueTheta 7 месяцев назад
@@goldmetal 답변 감사합니다
@goEunByul
@goEunByul 4 года назад
안녕하세요 골드메탈님~ 기초재생목록을 들으며 여차저차 여기까지 왔네요! 질문드리기에 앞서 좋은 콘텐츠를 만들어주셔서 감사하다고 인사드리고 싶습니다!! 감사합니다 !! •'-'•)و✧ ----- 엇 쓰다보니 왠지 알 거 같아서 다시해보겠습니당! 그래도 감사인사 남기고 싶었는데 이번 기회에 남기네요~!! 앞으로도 재밌게 배워가볼게요~!!
@yuriru
@yuriru 4 года назад
33:33 에 PlayerMove.cs(155,15): error CS1061: 'Rigidbody2D' does not contain a definition for 'Velocity' and no accessible extension method 'Velocity' accepting a first argument of type 'Rigidbody2D' could be found (are you missing a using directive or an assembly reference?) 라고 뜨는데요
@goldmetal
@goldmetal 4 года назад
앞 v는 소문자로 하셔야 합니다
@DungeonsSlimes
@DungeonsSlimes 2 года назад
최고의 강의
@Sweetpotato94
@Sweetpotato94 2 года назад
이때까지 정주행 하여서 처음으로 유니티 게임을 만들어보네요... 감사합니다. 그리고 혹시 제가 만든게임 조금 변형 하고 배포해도 괜찮은가요??
@goldmetal
@goldmetal 2 года назад
그럼요! 가능합니다. 잘 되시길 바랄께요. 😄
@Tara-sh1ww
@Tara-sh1ww 3 года назад
자체 해결했습니다.. 게임매니저를 스테이지마다 하나씩 넣어놨었네요 (원글 : 1스테이지에서는 정상적으로 출력되던 점수 텍스트가 2스테이지부터는 올라가지않습니다! Debug.Log(stagePoint);를 해보니 2스테이지에 돌입하면 stagePoint가 0으로 고정되고 아이템을 습득해도 아무런 반응이 없는데 혹 짐작가는 바가 있으신가요?)
@_________1234
@_________1234 Месяц назад
경사로에서 적을 보면서 내려오니 그냥 죽어버리더군요 if (collision.gameObject.tag == "Enemy") { RaycastHit2D rayHitenemy = Physics2D.Raycast(rigid.position + new Vector2(0, 0.4f), Vector3.down, 1f, LayerMask.GetMask("Enemy")); if (rigid.velocity.y < 0 && rayHitenemy.collider != null && rayHitenemy.collider.name == "Enemy") { OnAttack(collision.transform); } } 내용을 추가하니까 Raycast에서 감지되었을때에만 적이 죽어서 좀더 현실감있어졌어요 재미있네요 골드메탈님 덕분에 잘배우고있어요
@blayer5029
@blayer5029 5 лет назад
좋은 강좌덕분에 기초부터 재미있게 공부하는중입니다. 한가지 아쉬운점은 저같은 초보는 중간중간 잘려서 넘어가거나 수정되는 부분들이 어디가 고쳐졌는지, 어떤걸 해야되는지 잘 몰라서 계속 헤매게 되는 점이 조금 아쉬움으로 남습니다. 앞으로도 좋은 강좌 부탁드립니다.
@goldmetal
@goldmetal 5 лет назад
앞 강좌를 진행했다는 전제하에 편집하다보니 비슷한 내용의 영상을 자르다보니 그런 것 같네요. 의견 감사드립니다.
@박성찬-c1w
@박성찬-c1w 3 года назад
강의 잘 봤습니다. 이후 강의로 탑다운 건너뛰고 종스크롤, 쿼터뷰 게임을 봐도 어려움이 없을까요?
@goldmetal
@goldmetal 3 года назад
네 이후로는 원하시는 강좌 보셔도 좋습니다.
@에펜베르크
@에펜베르크 Год назад
골드메탈님 질문이 있습니다! 스테이지가 넘어갔을때 피가 다시 원상 복구 되게 Next Stage 안에 health=3;은 넣었지만 UI는 돌아오지 않아서요.. 혹시 UI는 돌아오게 하려면 어떻게 해야 하나요?
@goldmetal
@goldmetal Год назад
for (int index=0; index < UIhealth.Length; index++) { UIhealth[index].color = Color.white; } 이 로직을 실행해주세요.
@cosjfwhaaksemfwk
@cosjfwhaaksemfwk 4 месяца назад
정말정말정말 감사합니다ㅠㅠㅠㅠㅠㅠㅠㅠㅠ!!!!!
@donghyunkim1992
@donghyunkim1992 4 года назад
골드메탈님 영상 잘보고있습니다. 3D때는 괜찮았던거같은데 2D로 넘어오면서 해상도에 큰 문제가 생긴거 같습니다. 씬뷰에선 고해상도로 꺠짐없이 문제없이 잘 보이는데, 게임뷰에선 UI도 깨져보이고 캐릭터도 해상도가 낮게보입니다. 이건 유니티 자체의 문제인가요? 현재 Free Aspect로 해둔 상태입니다...
@goldmetal
@goldmetal 4 года назад
케임뷰에서 Zoom이 x1이 아닌지 확인해보세요. 가끔 저도 모르게 줌이 당겨져 있는 경우가 있더군요.
@donghyunkim1992
@donghyunkim1992 4 года назад
@@goldmetal 덕분에 문제 해결했습니다! 감사합니다ㅎㅎ
@TheCFG_
@TheCFG_ 4 года назад
38:37 근데 저 UIRestartBtn은 옵젝 이름인가요 아님 변수 선언한건가요 아님 다른건가요
@goldmetal
@goldmetal 4 года назад
단순히 변수 이름일 뿐입니다. 변수 이름은 어떤것인지 파악할 수 있도록 의미있게 지어주면 좋습니다.
@TheCFG_
@TheCFG_ 4 года назад
@@goldmetal 어디에다가 선언하신 거죠?
@TheCFG_
@TheCFG_ 4 года назад
아 Public GameObject군요
@김하람-z5c
@김하람-z5c 2 года назад
항상 좋은 영상 감사합니다 질문이 있는데 25:00 부근에 GameManager의 인스펙터에서 Player 오브젝트를 끌어놓았는데 게임실행 버튼을 누르면 원래 상태 (None)으로 초기화 됩니다. Player에다가 GameManager을 끌어놓는건 이상없는데 왜 이런지 아실까요 ㅜ
@김하람-z5c
@김하람-z5c 2 года назад
해결했습니다. 제가 GameManager 스크립트 Awake에다가 GetComponent를 써서 그랬던 것 같네요
@mingijuck29
@mingijuck29 Месяц назад
4:05초에서 void OnAttack(Transform enemy) 이 코드에 Top-level statements must precede namespace and type declarations이라는 에러가 자꾸 뜨는데 이럴때는 어떻게 해야 할까요? ㅜㅜ
@goldmetal
@goldmetal Месяц назад
플레이모드 들어가지 않고 나타난 오류인가요? 문법상 오류일 수 있으니 중괄호나 소괄호, 다른 문자가 빠졌는지 확인해보시는 것이 좋겠습니다
@esch100
@esch100 4 года назад
안녕하세요 항상 유익한 강의 감사합니다!!! 질문이 있는데요... 강의 따라서 다 해서 아무문제 없었는데요. 제 캐릭터로 새로운 프로젝트에다가 스크립트들을 복사해서 똑같이 썼어요! 근데 플레이어가 움직일때 조금 한방향으로 가다가 갑자기 자동으로 멈춰요. 다른방향으로 키보드로 한번했다가 다시 원래 방향을 눌러야만 다시 움직여요 하지만 다시 조금 움직인 후에 다시 멈춰요...:(
@goldmetal
@goldmetal 4 года назад
플레이어 콜라이더를 캡슐 콜라이더2D로 바꾸어주세요.
@esch100
@esch100 4 года назад
@@goldmetal 답변 감사합니다!!
@fseta746
@fseta746 Год назад
안녕하세요 골드매탈님 볼트 관련된 영상을 보고서 궁금한게 있어서 물어보는데요 이 영상에서 타일맵으로 동전을 배열해서 먹는 것이 나오는데 볼트를 이용해서 플레이어가 동전 닿게하면 플레이어가 닿은 동전만 사라지는 것이 아니라 타일맵에 있던 모든 동전이 다 사라져요 ㅠㅠ 제가 봤을 때는 마지막에 게임오브젝트 destroy-self 부분에서 잘못된 것 같은데 어떻게하면 타일맵에서 닿은 동전만 사라질까요??
@goldmetal
@goldmetal Год назад
타일맵은 하나의 오브젝트기 때문에 그럴 수 밖에 없습니다. 동전 배치하실 때는 타일팔레트 아래 Default Brush를 GameObject Brush로 바꿔서 프리펩으로 배치하시길 바랍니다
@kamdkam9124
@kamdkam9124 2 года назад
26:13초 죽게되면 else부분에 들어갔을때 OnDie를 불러오는 과정중에 멈추는거 같습니다. Debug부분에 죽었다는 부분을 먼저 올리고 이후 OnDie를 실행시 죽었다는 문구가 발생하지만 원래대로 돌려두면 죽었다는 문구가 발생하지가 않습니다. NullReferenceException: Object reference not set to an instance of an object GameManager.HealthDown () (at Assets/scripts/GameManager.cs:30) GameManager.OnTriggerEnter2D (UnityEngine.Collider2D collision) (at Assets/scripts/GameManager.cs:40) 바닥에 떨어지게 되면 저렇게 나오는데 머가 문제인가요. EnemyMove에서 OnDamage()에 있는 4줄을 때왔을때 PlayerMove에 CapsuleCollider2D capsuleCollider;와 capsuleCollider = GetComponent(); 이 두문장이 없다고 에러가 발생해서 이걸 추가해도 마지막 목슴이 0개되면 자꾸 저 에러가 발생하네요 OnDie()는 이렇게 작성이 되어있습니다. public void OnDie(){ spriteRenderer.color = new Color(1, 1, 1, 0.4f); spriteRenderer.flipY = true; capsuleCollider.enabled = false; rigid.AddForce(Vector2.up * 5, ForceMode2D.Impulse); }
@goldmetal
@goldmetal 2 года назад
spriteRenderer 변수 혹은 capsuleCollider변수, rigid 변수 셋 중에 하나가 GetComponent()로 초기화가 안된 느낌이네요. 위쪽 Awake에서 확인해주세요.
@BBlueCCong
@BBlueCCong Год назад
안녕하세요 골드메탈님 영상 잘 보고 있습니다. 제가 35:35 에서 게임 매니저의 UI point랑 UI stage에 오브젝트를 넣으려고 하는데 안 들어갑니다ㅠㅠ UI Health는 들어가는데 왜 저 둘은 안 들어갈까요?ㅠㅠ
@goldmetal
@goldmetal Год назад
아마 최신 버전에서 기본이된 TMP Text로 텍스트를 만드신 모양입니다. 이 강좌에서 다룬 Text는 UI > Legacy > Text에 있으니까 이걸로 다시 오브젝트 만드시고 변수에 넣어보세요
@BBlueCCong
@BBlueCCong Год назад
@@goldmetal 감사합니다ㅠㅠㅠ
@이지현-e1n7l
@이지현-e1n7l 4 года назад
그래픽 강좌부터 유니티 기초강좌 처음부터 지금까지 정말 잘 보고 있습니다! 그런데 제가 이번 강좌에서 몬스터를 밟아 죽이는 부분을 작성하고, 점프를 해서 몬스터의 머리를 밟는것이 아닌 몬스터랑 몸통박치기를 하면 플레이어가 피해를 안받고 오히려 몬스터가 죽는 경우가 있습니다. 분명 소스코드는 똑같이 작성했는데 어디가 잘못된건지 감이 안오네요ㅠㅠ
@goldmetal
@goldmetal 4 года назад
플레이어의 위치가 몬스터보다 위에 있을 때라는 조건이 있는지 확인해보세요. 있어도 이렇다면 르 조건 값을 조금 높여보시는 것도 좋습니다
Далее
نترس تو برق نبود😅😅
00:17
Просмотров 1,2 млн
마인크래프트 평지 100일 생존기
35:21
Просмотров 6 млн