3D 쿼터뷰 액션게임 - 원거리공격 구현 [유니티 기초 강좌 B44]

  Рет қаралды 39,281

Goldmetal

Goldmetal

Күн бұрын

Пікірлер: 415
@초코맛누룽지
@초코맛누룽지 4 жыл бұрын
와 이번 강좌 어렵네요 닷지할때 마우스 커서 누르면 닷지하는 도중에 고개 돌려서 그것만 조건에 추가하면 좋을 것 같네요
@argolant
@argolant 3 ай бұрын
골메님 안녕하세요! 좋은 강의영상 감사합니다~ 재장전 할 때 ammo의 개수 변화를 계산하는게 살짝 헷갈리네요 ㅎㅎ..
@강민규-y7m
@강민규-y7m 7 ай бұрын
총알을 밟았을 때 플레이어가 바라보는 방향이 알아서 바뀌는 문제가 있습니다 어떻게 해결하나요?
@goldmetal
@goldmetal 7 ай бұрын
물리 충돌에 의해 회전력이 발생해서 그런겁니다. 일단 이 영상에서 다룬것처럼 플레이어 탄피 레이어를 따로 만들어서 프이펩에 적용하고 Edit > Project Settings > Physics > Collision Matrix에서 플레이어 레이어와 플레이어 판티 레이어 교차하는 체크를 해제해서 서로 충돌하지 않도록 해주세요. 플레이어가 알아서 회전하는 문제는 다음 B45에서 다룹니다
@강민규-y7m
@강민규-y7m 7 ай бұрын
@@goldmetal 해결했습니다 감사합니다!
@nhnh442
@nhnh442 2 ай бұрын
탄피가 땅에 떨어진 후 쌓이지 않고 받은 힘을 유지한 체 미끄러지듯이 계속 움직이다가 3초뒤 사라지는데 무슨 문제일까요??
@goldmetal
@goldmetal 2 ай бұрын
캡슐 형태라면 그럴 수 있습니다. 중간에 스스로 서게끔하려면 Physics Material을 하나 만들고 Friction을 높여서 탄피 프리펩의 콜라이더에 Material에다가 넣어주시면 마찰력이 더 커지게 하면 됩니다.
@user-ma11
@user-ma11 Ай бұрын
선생님 이거 재장전 할때 조금만 쏘고 장전해도 MaxAmmo로 설정된 값이 고정으로 장전이 되어서 문제인데 차라리 리로드 조건에 무조건 현재 탄창에 총알이 0일때만 장전 가능하도록 넣어야할까요? 아님 그냥 이게 의도된건가요? 한 탄창을 30발로 정해두고 다 못쓰고 장전하면 버리게
@goldmetal
@goldmetal Ай бұрын
네! 강좌의 로직이 마음에 드시지 않으면 원하시는대로 편하게 바꾸셔도 좋습니다. 이러한 게임 기획을 토대로 코드 변경하는 것도 좋은 공부가 됩니다.
@MurlocGuy-om2wg
@MurlocGuy-om2wg Жыл бұрын
만약에 장전하고 남은 탄약을 반환하고싶으면 ReloadOut 함수를 void ReloadOut() { // 남은 탄약 반환 장전 매커니즘 int reAmmo = ammo < equipWeapon.maxMag ? ammo : equipWeapon.maxMag; // 소지 탄약이 장전할 탄약보다 적은 경우 int tempMag; // 남은 탄약 tempMag = equipWeapon.curMag; // 남은 탄약 저장 equipWeapon.curMag = reAmmo; ammo += tempMag; ammo -= reAmmo; isReload = false; } 이렇게 하시면 됩니다 장전중에 점프나 닷지 공격이 가능하니 조건에 !isReady도 추가해주시면 좋아요 (이동은 isReady인고 점프 닷지 공격은 !isReady입니다)
@김태영-s2w
@김태영-s2w 9 ай бұрын
골든메탈님 이게 뭔가요? Asset 'Player': Transition 'AnyState -> Reload' in state 'AnyState' doesn't have an Exit Time or any condition, transition will be ignored UnityEngine.GUIUtility:ProcessEvent (int,intptr,bool&)
@goldmetal
@goldmetal 9 ай бұрын
애니메이터에서 Reload로 가는 화살표 선택하시고 Condition을 지정해주셔야 합니다. Condition도 없고 Exit Time도 해제되어있으면 나타나는 문제니까 참고 바랍니다.
@김태영-s2w
@김태영-s2w 9 ай бұрын
@@goldmetal 아하~ 감사합니다.감사드립니다.
@NB-up8fs
@NB-up8fs 3 жыл бұрын
골드메탈님께서는 유료강좌 운영이나 후원 안 받으시나요? 이런 강의를 공짜로 본다는 것도 참 애매하네요.
@goldmetal
@goldmetal 3 жыл бұрын
아직 유료강좌는 생각하고 있지 않습니다. 봐주시는 것만해도 감사해요. 😃
@Drago-megamecha
@Drago-megamecha 10 ай бұрын
안녕하세요 골드메탈님! 매번 강의 잘 보고 있습니다. 이번에 이 강의를 보며 공부하다가 문제가 생겨 여쭤보게 되었슴니다 플레이어가 무기를 쥐고 있지 않으면 방향키를 눌러도 움직이지 않고 무기를 쥐고 있을때만 움직이는데 이거 왜이럴까요 ㅠ
@Drago-megamecha
@Drago-megamecha 10 ай бұрын
아 bool isFireReady = true를 안해줘서 초기화 되지 않아서 란걸 깨달았습니다!!!! 이제 되요 ㅎㅎ
@hojidev
@hojidev 3 жыл бұрын
여기선 구현되지 않았지만 30발 중 5발만 쏘고 재장전 하면 플레이어 탄창에서 -30이 되는 것을 알 수 있습니다. 이걸 탄창에서 5발만 장전되고 -5가 되면서 25발이 남았던 탄약이 +5가 되면서 30발이 되게 할 수 있습니다. 본 코드는 int reAmmo = ammo < equipWeapon.maxAmmo ? ammo : equipWeapon.maxAmmo; equipWeapon.curAmmo = reAmmo; ammo -= reAmmo; 이지만 // 이 경우 플레이어 탄창 100발, 장정된 총알 15발(최대 장전수 30발)이라 할 때 재장전시 플레이어 탄창은 -30인 70발이 된다. 그래서 이를 보완하면 int reAmmo = ammo < equipWeapon.maxAmmo ? ammo : equipWeapon.maxAmmo - equipWeapon.curAmmo; equipWeapon.curAmmo += reAmmo; ammo -= reAmmo; 를 하면 플레이어의 탄창은 100발이 남았다 하고 장전된 총알은 20발이라 하면 (최대 장전수 30발) 재장전시 플레이어 탄창에는 90발 남고 30발이 장전되는 것을 알 수 있습니다. 다만 이 경우도 예외가 발생하는데 그 경우는 장전된 총알은 20발, 플레이어에게 남아있는 총알이 15발 인 경우 상식적으로 생각하면 10발이 재장전돼 30발이 풀충전되고 5발이 남을 거 같지만 ammo < equipWeapon.maxAmmo 라는 수식이 true값이 돼 ammo가 equipWeapon.curAmmo 값에 더해지면서 장전된 탄알이 35발이 되고 남은 탄창도 0이 되버리며 이는 에러를 불러올 수 있다. 그래서 이를 더 완벽히 보완하면 int reAmmo = ammo + equipWeapon.curAmmo < equipWeapon.maxAmmo ? ammo : equipWeapon.maxAmmo - equipWeapon.curAmmo; equipWeapon.curAmmo += reAmmo; ammo -= reAmmo; 가 된다. 아까 같은 경우를 예시로 보면 장전된 총알은 20발, 남은 총알은 15발이면 20 + 15 == 35 > 30, 그러므로 최대 탄창 - 현재 탄창인 30 - 20 = 10총알은 10발 더 장전되며 현재 탄창에서 -10이 되므로 15 -10 = 5발이 남는다. 그리고 다른 예시로는 20발이 장전돼있고 남은 총알이 5발이면 20 + 5 < 30 이므로 ammo인 5가 그대로 장전돼 20 + 5 = 25발이 장전되어있고 남은 총알인 5가 장전돼 없어지게 된다. (+ 골드메탈님 대댓글 중 이를 해결하기 위해 int reAmmo = ammo < equipWeapon.maxAmmo ? ammo : equipWeapon.maxAmmo; reAmmo -= equipWeapon.curAmmo; // 이부분을 추가 equipWeapon.curAmmo += reAmmo; //또한 이부분에서 =를 +=로 바꾼다. ammo -= reAmmo; 라고 하셨는데 이또한 위에서 말한 현재 15발 남고 20발이 장전되어 있을 시 재장전을 할 경우 reAmmo는 20(ammo) < 30(equipWeapon.maxAmmo) 이므로 ammo값이 reAmmo에 들어가면 reAmmo == 20 20 (reAmmo) -= 15(equipWeapon.curAmmo) 이면 reAmmo 는 20 - 15 = 5 equipWeapon.curAmmo는 20(장전하기 전 값) + 5(reAmmo) 인 25발이 되어버립니다. 또한 플레이어의 탄창에는 15 - 5인 10발이 남게 되어 버립니다. 이 글은 좀더 알고리즘 적으로 완벽한 코딩을 하고 싶은 사람에게 쓴 글입니다. 원 코드도 절대 나쁜 코드가 아니고 절대 골드메탈님 까려고 그런게 아닙니다 ㅠㅠ 그냥 이런게 더 많은 경우를 대비할 수 있다라는 식으로 올렸습니다. 항상 좋은 영상과 멋진 퀄리티의 게임을 제작할 수 있게 해주셔서 감사합니다! 새벽에 코딩하다 올립니다.
@si2819
@si2819 2 жыл бұрын
총알 장전이 안되져서 인스펙터에서 장전을 하면 값이 올라가나 확인하고 디버그 까지 찍어가며 장전이 되지나 확인하면서 왜 안되지 찾고 있었는데 이런 방법이 있었군요 정말 감사합니다.
@purin0319
@purin0319 Жыл бұрын
헐레벌떡 추가했네요 정말 대단하세요!!! 감사합니다 ㅎㅎ
@ironjoe9447
@ironjoe9447 Жыл бұрын
감사합니다. 제 주말을 지켜주셨습니다. 제가 영상에 있는 코드로 하면 플레이어 소지 ammo가 900~990씩 줄어드는데 이유를 알수 있을까요? RedloadOut 부분만 선생님 코드로 바꾸면 또 장전한 만큼 줄어듭니다. int reAmmo = ammo < equipWeapon.maxAmmo ? ammo : equipWeapon.maxAmmo; equipWeapon.curAmmo += reAmmo; ammo -= reAmmo; isReload = false; 계속 재장전이 안되어서 소지탄수를 1만으로 설정하고 재장전해보니 900~990사이로 빠지면서 재장전이 되었습니다.
@hojidev
@hojidev Жыл бұрын
@@ironjoe9447 전체적으로 어떻게 설정되어 있는지는 몰라서 확실하게 답은 못드리겠지만 위 코드만을 봤을 때 둘째 코드 equipWeapon.curAmmo += reAmmo; 에서 += 가 아닌 = 만 해야 합니다.
@떠오르는태양-h7q
@떠오르는태양-h7q Жыл бұрын
프로그래밍 공부하다보면 저 많은 수식과 계산을 1프레임에 죄다 해버리는게 컴퓨터의 계산속도에 경의감을 느끼네요 ㅎㅎ
@B6jePV61
@B6jePV61 24 күн бұрын
컴퓨터가 1프레임에 저렇게 많은 연산을 하고 있는 지 상상하면 경이로움 ㅋㅋㅋ
@블베
@블베 7 ай бұрын
ScreenToRay 함수가 FollowCamera. 을 해도 나오지 않습니다 계속 질문해서 죄송합니다ㅜㅠ
@블베
@블베 7 ай бұрын
해결되었습니다 Ray ray = UnityEngine.Camera.main.ScreenPointToRay(Input.mousePosition); 이렇게 하니 해결되었네요
@푸른매실-k2k
@푸른매실-k2k Жыл бұрын
배우면서 약간의 버그나 궁금한 부분이 거의 댓글에 달려있어서 참 편합니다 ㅎㅎ
@saraJc-hb4zk
@saraJc-hb4zk 8 ай бұрын
골드메탈님 총알을 자세히 보니 총알이 나가다 중간에 바닥에 착 하고 붙어버립니다. 왜 이런건가요 ㅠㅠ
@saraJc-hb4zk
@saraJc-hb4zk 8 ай бұрын
답글내려보다 해결했습니다.! 리지드바에 그래비티해재했더니 정상적으로 작동하네요.! 감사합니다.
@뚠뚠한고냥이
@뚠뚠한고냥이 Жыл бұрын
Weapon 스크립트에서 Type.Range 조건문까지 진입하는데, StartCoroutine("Shot"); 부분이 아예 동작을 안합니다.. (Debug.Log 찍어봐도 아예 진입도 안함) Swing은 잘 동작하는데 Shot만 안하네요... 검색도 해보고 강의도 다시 보는데.. 이유를 모르겠습니다 .. ㅠ ++ 콘솔창에 에러 안뜹니당.
@goldmetal
@goldmetal Жыл бұрын
대소문자 정확한지 확인해보세요. StartCoroutine(Shot()); 이렇게 호출해보시는 것도 좋은 방법입니다.
@KuroNyan_XXX
@KuroNyan_XXX Жыл бұрын
골드메탈님 영상 잘 보고있습니다! 유니티는 역시 기능들을 많이 많이 알아두면 더욱 다채롭게 게임을 만들수 있어서 좋네요ㅎㅎ
@동네개님-m1q
@동네개님-m1q 5 ай бұрын
이번 강의가 정말 좋았습니다 그리고 의문점이 있는데 장전이 되기는 하는데 r과 좌클릭을 동시에 눌러야 장전이 됩니다 이거는 무슨 문제인가요?
@goldmetal
@goldmetal 5 ай бұрын
장전 함수에서 if 문 조건을 한번 확인해보셔야겠습니다. 혹시 isFire가 반대로 되어있는지 확인해보세요
@user-yo9pq5ei8g
@user-yo9pq5ei8g 10 ай бұрын
골드메탈님 마우스 회전 챕터에서 클릭을 하면 클릭한 방향을 쳐다보기만 하고 마우스를 계속 따라가지 않네요ㅠㅠ 뭐가 문제일까요
@goldmetal
@goldmetal 10 ай бұрын
앗 이 강좌는 원거리 사격을 위해 방향만 마우스를 따라가는겁니다. 이동은 키보드로 되는거니 이상 없음을 알려드립니다.
@DungeonsSlimes
@DungeonsSlimes 2 жыл бұрын
"최고의 강의"
@delightpal
@delightpal Жыл бұрын
영상 초반에 총에서 탄피 떨어지는 거 보고 "캬~ 즥이네~" 바로 감탄 나옵니다. 역시 낭만을 아시는 분입니다. ㅋ 선추!!!!!!!!!!!
@안현상-l7c
@안현상-l7c 4 жыл бұрын
골드메탈님 영상 오랜만 이네요~~ 오늘도 좋은 강의 감사합니다.
@sdfasdfsdfds
@sdfasdfsdfds 7 ай бұрын
혹시 이동하면서 무기(근접,원거리)를 사용하고 싶은데 애니메이션 두 개를 연동해서 하는 방법이 있을까요??
@goldmetal
@goldmetal 7 ай бұрын
애니메이터의 레이어를 사용하면됩니다. 단, 휴머노이드 리그 형태만 가능한데 제 에셋 애니메이션은 그게 아니라서 적용하기 어렵습니다. 아래 링크를 참고해주세요. meistertj.tistory.com/13
@sdfasdfsdfds
@sdfasdfsdfds 7 ай бұрын
@@goldmetal답변 감사합니다 난이도가 있네요 ㅎㅎ
@timesparadox
@timesparadox 2 ай бұрын
24:35
@You-ks4iz
@You-ks4iz 4 жыл бұрын
영상 매우 잘보고있습니다 번외로 궁금한게 있는데요 올려주시는 캐릭터 애니메이션 등 모델링도 다 직접하신건가요??
@goldmetal
@goldmetal 4 жыл бұрын
네, 모두 라이브로 진행되었으며 라이브 채널로 가시면 두 영상 모두 보실 수 있습니다. kzbin.info/www/bejne/hZSwXnuanbOnj5Y&ab_channel=%EA%B3%A8%EB%93%9C%EB%A9%94%ED%83%88
@쫑이-e4k
@쫑이-e4k 3 ай бұрын
bulletRigid.velocity = bulletPos.forward * 50; 여기서 bulletPos.forward는 로컬포지션에서 (0,0,1)로 알고있는데 왜 설명에는 Returns a normalized vector representing the blue axis of the transform in world space.라고 나와있는거죠..?
@goldmetal
@goldmetal 2 ай бұрын
트랜스폼 기준으로의 Z축 화살표 방향이 forward이고 최종 반환값은 월드 스페이스 기준으로 벡터가 나와요. 그래서 월드 기준에서 총구의 방향을 알고 싶을 때 이런 기법으로 많이 활용합니다.
@danielchoi7108
@danielchoi7108 4 жыл бұрын
항상 감사합니다 골드메탈님 또 열심히 배우겠습니다
@VintagesoUltree
@VintagesoUltree Жыл бұрын
41:40 Wall을 찍었을 때 위를 향해 바라보는 건 이해가는데 Floor을 찍었을 때 아래를 향해 바라보지 않는 이유가 궁금합니다!
@goldmetal
@goldmetal Жыл бұрын
플레이에 매쉬의 기준이 바닥과 동일한 높이라서 그렇습니다.
@VintagesoUltree
@VintagesoUltree Жыл бұрын
@@goldmetal 아 그렇군요 감사합니다!
@purin0319
@purin0319 Жыл бұрын
망치 공격에 에러가 나서 이번 강의 걱정했는데 에러없이 깔끔하게 클리어했네요!!! 좋은 강의 감사드립니다!!!!
@scy5263
@scy5263 2 жыл бұрын
총을 쏠 때 마다 캐릭터가 회전을 하게 됩니다. 아마 rigidbody 관련 문제일 거 같은데 이것의 원인으로 의심되는 점을 알 수 있을까요??
@goldmetal
@goldmetal 2 жыл бұрын
총알이 생성되자마자 플레이어와 충돌해서 밀어내기 때문입니다. 플레이어 총알 프리펩은 따로 PlayerBullet 같이 레이어를 지정해주시고 플레이어의 레이어는 Player로 지정되어 있다는 전제 하에, Edit > Physics > Collision Matrix 옵션에 PlayerBullet - Player 겹치는 체크를 해제하시면 충돌하지 않습니다.
@gim-ori
@gim-ori Жыл бұрын
계속 따라해보고 있긴한데 좌표 계산 부분만 나오면 어질어질 @,.@
@dev_jeongdaeri
@dev_jeongdaeri 4 жыл бұрын
감사합니다 ㅎㅎ 제가 처음 게임개발할때 골드메탈님을 알았더라면 .. ㅠㅠ
@돌멩이-i8k
@돌멩이-i8k 10 ай бұрын
bullet 스크립트를 추가했는데 스크립트에 damage가 뜨지 않는 것은 어떻게 해결해야하나요? ㅎ
@goldmetal
@goldmetal 10 ай бұрын
변수 선언 부분에 public 키워드도 적으셨는지 확인해주세요.그리고 스크립트에 에러가 있으면 족용이 되지 않으니 에러메세지도 남아있는지 확인해주세요
@kamisato3363
@kamisato3363 3 жыл бұрын
코드들이 엄청 깔끔하고 잘 정리되있네용.. 저도 보고 많이배우겠슴다
@kkmpaper
@kkmpaper 3 жыл бұрын
총알이 날라가다가 갑자기 뚝 떨어진다음에 가는건 왜구런가요?
@goldmetal
@goldmetal 3 жыл бұрын
총알 리지드바디의 Gravity Scale을 0으로 주세요
@kkmpaper
@kkmpaper 3 жыл бұрын
@@goldmetal Gravity Scale를 어디서 찾아야하나요? inspector창에 있는 Rigidbody는 Mass, Drag, Angular Drag, Use Gravity, Is Kinematic, Interpolate, Collision Detection, Constraint(Freeze Position), Infor(Speed,Velocity,Angular Velocity, Inertia Tensor,...)뿐입니다.ㅜㅜ
@goldmetal
@goldmetal 3 жыл бұрын
@@kkmpaper Use Gravity 체크해제하시면 됩니다
@user-dgjsjwvw18
@user-dgjsjwvw18 Жыл бұрын
23:10 에서 해머를 안먹었지만 1번키를 누르면 해머가 스왑되고 2,3번은 먹어도 스왑이 되지 않습니다. 인스펙터에서도 비활성화 되있습니다
@goldmetal
@goldmetal Жыл бұрын
hasWeapons 의 첫번째 데이터가 처음부터 체크(true)되어있는지 인스펙터 확인해보세요.
@user-dgjsjwvw18
@user-dgjsjwvw18 Жыл бұрын
@@goldmetal 체크되어있지 않습니다
@goldmetal
@goldmetal Жыл бұрын
@@user-dgjsjwvw18 일단 해머가 안나오도록 hasWeapon[0] 조건이 있는지 확인해보셔야겠습니다.
@PAINDE
@PAINDE Жыл бұрын
@@goldmetal 저도 이런버그 생겼는데 코드 보니 if (sDown1 && (!hasWeapons[0] || equipWeaponIndex == 0)) return; if (sDown2 && (!hasWeapons[1] || equipWeaponIndex == 1)) return; if (sDown3 && (!hasWeapons[2] || equipWeaponIndex == 2)) return; 이 코드에서 hasWeapons 부분이 모두 0으로 쓰였습니다
@user-dgjsjwvw18
@user-dgjsjwvw18 Жыл бұрын
@@goldmetal 해결했습니다 총들에 벨류가 설정이 안되어 있었습니다. 그런데 그 에러를 해결하고 난후 총을먹고 클릭을 해도 총알이 쏴지지 않습니다 어디가 문제일까요...
@칠성-y3w
@칠성-y3w 4 ай бұрын
골드메탈님 강좌 잘 보고 있습니다. 질문이 하나 있는데 마우스 방향대로 회전하게 하는건 잘 됩니다만 캐릭터 pivot이 발에 있어서 그런지 Look at 시키면 발이 마우스 방향을 바라보기에 총이 든 손은 실제 마우스 보다 살짝 위를 쏘게 되는데 이를 수정할 방법은 없을까요?
@goldmetal
@goldmetal 4 ай бұрын
마우스 클릭 위치 벡터를 바로 LookAt으로 주지 마시고 벡터를 임시로 지역변수에 미리 담아두고 Y축만 플레이어의 Y축 높이로 덮어씌우고 그 변수를 LookAt으로 주시면 일직선으로 나가게 됩니다
@칠성-y3w
@칠성-y3w 4 ай бұрын
@@goldmetal으음 설명이 조금 부정확했네요 마우스보다 화면상 위치에서 조금 위로 쏜다는 뜻이었습니다 화면상 좌표에서 마우스보다 조금 위를 그러니까 고개가 왼쪽으로 조금 더 돌아간다고 할까요 그런 느낌입니다
@goldmetal
@goldmetal 4 ай бұрын
@@칠성-y3w 플레이어 중앙과 총알 나가는 총구 위치의 X,Z 축 차이 때문에 그런 느낌이 드실 수 있을 것 같네요. 이 두 지점의 거리를 미리 변수에 담아두고 마우스 클릭 위치에다가 이 거리를 더해서 LookAt으로 써보면 어떨까하네요
@칠성-y3w
@칠성-y3w 4 ай бұрын
​@@goldmetal완벽하겐 아니지만 어느정도 해결 된 것 같습니다! 감사합니다!
@greatyisoon-sin3402
@greatyisoon-sin3402 2 жыл бұрын
maxAmmo 변수가 웨폰CS 하고 Play.CS 양쪽에 다있어서 헷갈리네요
@goldmetal
@goldmetal 2 жыл бұрын
플레이어 maxAmmo 대신에 무기에만 maxAmmo를 두셔도 됩니다. 다만 이렇게하면 총알 아이템 먹을 때 equipWeapon.maxAmmo를 참조해야 한다는 점, 참고해주세요.
@장재범-e9c
@장재범-e9c 2 жыл бұрын
질문 드리기 전에 강의 정말 잘 듣고있습니다 감사합니다 제가 총을 쏘면 캐릭터가 회전하는 버그가 생겼습니다. 테스트 해보니까 탄피 trigger를 없애면 그 상황이 사라집니다. 탄피가 떨어지면서 캐릭터랑 부딫혀서 캐릭터가 도는 것 같습니다 그렇다고 탄피 trigger를 끄면 탄피가 땅에 쌓이지가 않습니다. 영상에서는 잘 실행되는데 어떻게 수정하면 되나요??
@장재범-e9c
@장재범-e9c 2 жыл бұрын
헤딩하다가 그냥 freeze rotation가 생각나서 해결은 됐는데 선생님도 이렇게 해결하신건가요??
@goldmetal
@goldmetal 2 жыл бұрын
탄피 오브젝트의 레이어를 새로 추가하고 플레이어의 레이어도 따로 설정된 상태에서 Edit > Project Setting > Physics > Collision Matrix에서 서로 충돌하지 않도록 체크 해제하면 됩니다.
@조현준-f2d4f
@조현준-f2d4f 2 жыл бұрын
총을 쏘면 플레이어가 자꾸 넘어집니다.. 해결방법이 있을까요?
@goldmetal
@goldmetal 2 жыл бұрын
플레이어 리지드바디의 Freeze Rotation X 와 Z 체크해주세요. 그리고 총알이 생성될 때 플레이어를 건들이는 것 같으니 총알과 탄피 생성 위치를 총과 살짝 떨어지게 거리를 조절해주시는 것이 좋겠습니다.
@유진한-b7j
@유진한-b7j 4 жыл бұрын
최고입니다!!!
@종우-j9l
@종우-j9l 3 жыл бұрын
총알이 바닥으로 떨어지면서 발사되어 바닥에 튕겨서 나갑니다.
@종우-j9l
@종우-j9l 3 жыл бұрын
총알 Freeze Position Y키니까 해결했습니다.
@djkis4604
@djkis4604 Жыл бұрын
재장전을 할 때 멈춰있는 상태에선 재장전이 안되고 쏘다가 도중에 r버튼을 눌렀을 때만 재장전이 되는데 어떤 부분에서 문제가 있는 걸까요..?
@goldmetal
@goldmetal Жыл бұрын
재장전 if문 조건에서 isFire 관련 조건이 반대로 되어있나봅니다. 앞에 ! 를 붙여주세요
@Krispy_Donuts
@Krispy_Donuts 3 жыл бұрын
무기를 꺼낼때마다 일정시간동안 공격키가 안먹히는데 이걸 해결할 방법이 없을까요
@goldmetal
@goldmetal 3 жыл бұрын
공격 함수에서 isSwap 조건을 빼면 됩니다.
@박재현-c4f7u
@박재현-c4f7u 2 жыл бұрын
총을 발사하면 애니메이션만 작동하고 총알은 나가지 않아요. 오류 난건 없는데 무엇이 문제인지 모르겠습니다.
@goldmetal
@goldmetal 2 жыл бұрын
인스펙터에서 총알 프리펩 넣으셨는지, 혹은 총알 프리펩의 위치가 0 0 0 인지 확인해보세요
@迷途-u3d
@迷途-u3d Жыл бұрын
금 금속 나는 문제가있다.Assets \ scripts \ weapon.cs (56,51): error cs0104:' Random' is an ambiguous reference between 'UnityEngine.Random' and 'System.Random' 이 문제를 어떻게 해결해야 합니까
@goldmetal
@goldmetal Жыл бұрын
At the top of the script, using System; there will be Clearing it solved it. Please note that Random is provided by both the Unity engine and the system.
@1447
@1447 3 жыл бұрын
에니메이터에 Entry랑 Any State랑 뭐가 다른가요
@goldmetal
@goldmetal 3 жыл бұрын
Entry는 첫 시작 부분으로 Default(기본)으로 잡힌 상태만 자동연결됩니다. AnyState는 어떠한 상태에서도 Transition이 되는 상태입니다.
@wochaomen
@wochaomen 2 жыл бұрын
근접 공격할때만 움직이게 하고 싶은데 어떻게 해야할까요?
@goldmetal
@goldmetal 2 жыл бұрын
fire 함수에서 28:35의 reload 처럼 가지고 있는 무기가 melee 이면 isFireReady 끄지말고 바로 공격되게 하면 Move를 방해하지 않아서 이동 공격이 될겁니다.
@초코맛누룽지
@초코맛누룽지 4 жыл бұрын
와 메탈님 2만명 찍으셨네 ㅊㅊ
@goldmetal
@goldmetal 4 жыл бұрын
감사합니다 😊
@유빈-j9v
@유빈-j9v Жыл бұрын
총알이 로컬기준이아니고 월드기준으로 나가네요 ㅜㅜ 로컬로 설정되있는데요...
@goldmetal
@goldmetal Жыл бұрын
총알 발사하려는 위치 오브젝트 Bullet Pos가 플레이어의 자식 오브젝트로 있는지 확인해보세요.
@유빈-j9v
@유빈-j9v Жыл бұрын
@@goldmetal 앗 네 근데 forward가 월드기준 z방형아닌가요??
@goldmetal
@goldmetal Жыл бұрын
@@유빈-j9v 신기하게도 transform.forward는 그 오브젝트의 Z축 앞방향입니다. (Scene 창에서 오브젝트 선택해서 기즈모로 확인가능) 그래서 FPS 혹은 TPS에서 transform.forward를 많이 사용합니다.
@김대영-u2l
@김대영-u2l Жыл бұрын
플레이어 Ammo에 30발을 세팅해놓고 서브머신건을 쏜 후 5발 정도 쏘은 다음에 다시 장전을 했는데 플레이어가 갖고있는 30발을 다 장전했는데 이건 어떻게 해결해야하나요..?
@goldmetal
@goldmetal Жыл бұрын
32:49 계산식 참고하셔서 잘 작성하셨는지 비교해보시는 것이 좋겠어요.
@Husk-u3l
@Husk-u3l 4 жыл бұрын
항상 잘 보고 있습니다! 질문이 하나 있는데 혹시 게임을 만들면서 맵이 여러개라면 씬을 여러개 만드는게 더 효율적인가요?
@goldmetal
@goldmetal 4 жыл бұрын
퍼즐이나 간단한 플랫포머, 작은 타일맵류라면 하나의 Scene에 두는 편이고 이런 3D는 따로 두는 편입니다.
@조커카드-k1u
@조커카드-k1u Жыл бұрын
골드 메탈님 현재 재장전 파트부분인데 재장전이 안됩니다.. update부분도 확인했고 input부분도 확인해봤고 Debug.Log까지 썼는데 문제가없는데 어디가 문제인걸까요..
@goldmetal
@goldmetal Жыл бұрын
애니메이션이 안되는거라면 Window > Animation > Animator로 애니메이터 창여시고 플레이 버튼 누른 다음에 플레이어 선택해서 장전키를 눌러보세요. 애니메이터의 파라메터 Parameter가 변화가 있는지 확인해보셔야 합니다. 상태이동을 맡은 Transition 화살표에도 Condition이 설정되어있는지 같이 확인해보세요.
@조커카드-k1u
@조커카드-k1u Жыл бұрын
@@goldmetal 애니매이션부분도확인 해봤는데 다 정상으로 되있습니다.. 애니매이션뿐만아니라 재장전 기능부분도 작동이 안됩니다..
@김민석-f3g6b
@김민석-f3g6b Жыл бұрын
제가 무기가 없을 때 펀치 코드도 넣고 싶어서 이렇게 했는데 총 발사가 한발 쏘고 안되네요 어디서 코드를 잘못 적은 걸까요? Weapon 스크립트는 메탈님이 알려주신 것과 동일합니다! void Attack() { fireDelay += Time.deltaTime; if (fDown && isFireReady && !isDodge && !isSwap && !isReload && !isShop && !isDead) { if (equipWeapon == null) { if(!isPunch) { anim.SetTrigger("doPunch"); isPunch = true; Invoke("isPunchOut", 0.58f); } else { return; } } else { fireDelay += Time.deltaTime; isFireReady = equipWeapon.rate < fireDelay; equipWeapon.Use(); anim.SetTrigger(equipWeapon.type == Weapon.Type.Melee ? "doSwing" : "doShot"); fireDelay = 0; switch (equipWeapon.type) { case (Weapon.Type.Melee): if (equipWeapon != null) meleeSound.Play(); break; case (Weapon.Type.Range): if (equipWeapon != null) gunSound.Play(); break; } } } }
@김민석-f3g6b
@김민석-f3g6b Жыл бұрын
음 그냥 기본 코드에서 글러브라는 무기를 만들어서 항상 글러브라는 무기를 끼고있게 만들어야겠네요
@김수-k2s
@김수-k2s Жыл бұрын
메탈님 오늘영상도 열심히 따라했지만 또 오류가 발생했네요... 33:30 이 부분에서 if (isSwap || isReload || !isFireReady) 코드를 이렇게 작성을 하면 캐릭터가 움직이지를 않고, if (isSwap) 그냥 이렇게 지워버리면 캐릭터가 움직이기는 합니다만 총을쏘고 혼자서 계속 도는데 이거는 어떻게 고칠수있을까요?
@김수-k2s
@김수-k2s Жыл бұрын
코드 안쓴게 있었네요 고쳤습니다!
@skdhrl12
@skdhrl12 Жыл бұрын
안녕하세요.. 이거로 24시간 동안 고민해봤는데요. 아무리 봐도 정답을 알수가 없어서요. 제가 Max Ammo 30 Cur Ammo 30 하고 게임을 실행 해도 총알이 무제한으로 나가네요 뭐가 문제일까요?
@goldmetal
@goldmetal Жыл бұрын
게임 플레이하고 해당스크립트가 들어있는 오브젝트 선택한 뒤 실시간으로 사격해봐서 CurAmmo가 어떻게 변하는지 확인이 필요하겠습니다.
@배진우-w2f
@배진우-w2f 2 жыл бұрын
단발 권총인데 한 발 쏘고 다음 발을 쏠 때 몇 초 후 나가게 하고 싶은데 어떡해하면 될까요???
@goldmetal
@goldmetal 2 жыл бұрын
오른손에 쥐어준 권총의 Rate를 더 늘리면 됩니다.
@최승원-t3u
@최승원-t3u Жыл бұрын
골드메탈님! 영상 정말 잘 보고 있습니다 :) Reload 하는 도중에 캐릭터가 점프를 하거나 fdown을 하면 reload 애니메이션이 멈추고 행동을 해버려서 재장전이 되지 않습니다. 이동은 하지 않습니다! 이러한 오류는 어떻게 해결하면 좋을까요??
@goldmetal
@goldmetal Жыл бұрын
점프의 실행 조건 if에 isReload 까지 추가해서 장전 중에는 점프를 못하게 하는 방법이 있습니다.
@냐곰-m7i
@냐곰-m7i 3 жыл бұрын
총알을 먹고 r키를 눌러도 재장전이 안됍니다 모션도 안하고 코딩은 영상이랑 다를게 없는데 뭐가 문제일까요? 매니저에도 r키 추가했는데...
@goldmetal
@goldmetal 3 жыл бұрын
Reload() 함수에 Debug.Log("장전"); 추가해서 실행해보세요. 콘솔에도 안뜬다면 Update()에 호출하지 않았거나 키가 설정한 것과 다르거나 여러 문제점을 확안해보셔야 합니다.
@이강토-y5k
@이강토-y5k Жыл бұрын
골드메탈님 완벽하게 다 따라했는데 이상하게 총 종류만 쏘면 캐릭터가 오른쪽으로 회전을 하더라구요 혹시 어떻게 고쳐야 할까여?
@이강토-y5k
@이강토-y5k Жыл бұрын
다음 강좌에서 싹다 고쳤습니다.!
@goldmetal
@goldmetal Жыл бұрын
스스로 고치셔서 정말 다행입니다!
@설윤사랑해
@설윤사랑해 3 жыл бұрын
골드메탈님 저는 총구로 배출된 총알은 없어지는데 탄피(bullet case)가 없어지지않는데 어떻게해야하나요?
@goldmetal
@goldmetal 3 жыл бұрын
Bullet에서 바닥에 닿았을 때 Destroy 호출하는 로직이 있는지 살펴보시고 바닥 오브젝트의 태그도 if문 조건과 똑같은지 확인해보세요
@설윤사랑해
@설윤사랑해 3 жыл бұрын
@@goldmetal 아하 버렛 스크립트를 캐이스에 안넣었었네요
@KetchupPotato
@KetchupPotato Жыл бұрын
안녕하세여 골드메탈님 제가 총을 쏘면 쭉 가다가 천천히 아래로 떨어져 총알이 밑으로 쭉 떨어지는 현상이 일어나고 있습니다 이럴 때는 어떻게 해야 하나요? 코드를 잘못 짠것 같은데 어디부터 문제인지 잘 모르겠습니다 수류탄 구현까지 만들다가 여기 부분이 문제 인것 같아서 이곳에 적어봅니다.
@KetchupPotato
@KetchupPotato Жыл бұрын
이번에도 댓글이 있어서 해결했네여 ㅋㅋㅋㅋ리지드바디 중력적용을 풀었어요ㅋㅋㅋ 감사합니다 골드매탈님 덕분에 많이 배워갑니다!
@williamstark9994
@williamstark9994 2 жыл бұрын
똑같이 따라하면서 해보는데,, 아무리 다시해보고 다시해봐도... 하이어라키 창에 총알도 안생기고 총알이 안날라가요 ㅠㅠㅠ
@goldmetal
@goldmetal 2 жыл бұрын
콘솔창에 에러메세지가 나오는지부터 확인이 필요하겠네요.
@williamstark9994
@williamstark9994 2 жыл бұрын
@@goldmetal 무엇이 문제였는지 못찾아서 아쉽긴하지만 처음부터 다시 따라해보다보니 이번엔 잘 나와요.. 감사합니다
@플레이아로테
@플레이아로테 3 жыл бұрын
정말 유용하게 배워 갑니다! 드디어, 총에서 총알이 발사 됩니다 감사합니다!! :)👍👍👍
@ReeperKuruRuke
@ReeperKuruRuke Жыл бұрын
총알생성위치 및 탄피생성위치랑 플레이어의 위치가 지나치게 가까울 땐 플레이어가 조금씩 이동하기도 하는데 이럴 땐 ProjectSettings에 들어가서 레이어를 지정하고 플레이어와의 충돌검사를 끄는 편이 좋겠죠?
@goldmetal
@goldmetal Жыл бұрын
맞습니다.플레이어가 생성하는 오브젝트는 플레이어와 충돌하지 않도록 제외시켜주는 것이 좋습니다.
@sangDu-park
@sangDu-park 3 жыл бұрын
재장전 시간이 짧으니까 재장전 모션이 나오면서 이상하게 걸어가요(아마 재장전이랑 걸어가는 모션이 겹치는듯) 재장전 시간은 짧게 하고싶은데 어떤 방법 없나요?
@goldmetal
@goldmetal 3 жыл бұрын
애니메이터에서 장전상태 선택하시고 인스펙터에서 속도 높여주시면 빠르게 장전모습이 됩니다.
@NB-up8fs
@NB-up8fs 3 жыл бұрын
감사히 잘 보고 있습니다.
@지메짱
@지메짱 3 жыл бұрын
오류는 안뜨는데 핸드건은 탄피가 이상한 곳에 서 배출돼고 장전을 하면 발사가 안돼요 그리고 머신건은 탄피가 잘 배출돼는데 탄피가 안사라지고 계속남아있고 머신건도 장전을 해도 총알이 안나가요..ㅠㅠ
@goldmetal
@goldmetal 3 жыл бұрын
탄피가 생성되자마자 총과 충돌해서 그렇습니다. 생성 위치는 조금 더 멀리 떨어뜨려주세요. 탄피가 사라지지 않는 문제는 탄피 스크립트에서 On Collision 쪽 Debug.Log(); 를 두어 로그로 충돌이벤트가 실행되는지 확인해보세요
@3412-p2y
@3412-p2y Жыл бұрын
25:50 부분에서 Swing 과 다르게 Shot 은 StopCoroutine을 사용하지 않으신게 WaitForSeconds와 yield return null의 차이 때문인건가요?? 잘 몰라서 질문드려요
@goldmetal
@goldmetal Жыл бұрын
Swing은 위두루는 시간이 있으므로 딜레이를 넣은 것이고 총알 발사는 그럴 필요 없어서 한프레임만 쉬게 한 것입니다.
@kamisato3363
@kamisato3363 3 жыл бұрын
잘 공부하고 갑니다
@oFlo_
@oFlo_ 3 жыл бұрын
생성된 탄피를 밟거나 맞으면 플레이어가 조금씩 도는데 어떻게 고칠수 있을까요
@goldmetal
@goldmetal 3 жыл бұрын
레이어를 설정해서 플레이어와 충돌하지 않게 하면 됩니다. PlayerBullet 레이어 추가 후 총알과 탄피 프리펩의 레이어로 설정하고 Edit > Project Settings > Physics > Collision Matrix 에서 Player와 PlayerBullet 겹치는 체크는 해제하시면 됩니다.
@oFlo_
@oFlo_ 3 жыл бұрын
@@goldmetal 감사합니다 큰 도움이 되었습니다
@u_-iv2yv
@u_-iv2yv 2 жыл бұрын
재장전 후 총알이 안나가네요. player Inspector에서 Ammo가 50이나 있는데, 재장전 모션만 하고 Ammo도 그대로고, 총알도 안나갑니다. Debug.Log로 isReload를 찍어봤을 때, 장전 시 true, 장전 완료 후 false 잘 됩니다. Shot()에서도 총알 발사, 탄피 배출 모두 찍었을 때 잘 되는데, 재장전만 하면 출력이 안됩니다. 어디선가 실수를 한거 같은데 찾기 어렵네요ㅠ.ㅠ 아 그리고 isSwap은 해결했습니다. 감사합니다.
@u_-iv2yv
@u_-iv2yv 2 жыл бұрын
해결했습니다! 총 Inspector창에서 MaxAmmo 값이 0이라서 그랬네요. 임의값을 넣으니 해결 됐습니다!!
@톰-l2o
@톰-l2o 4 жыл бұрын
따라하다가 Random.Range가 안되서 using Random = UnityEngine.Random; 이거 위에다가 추가해서 해결은 했는데 이유는 모르겟네요 ㄷㄷ
@goldmetal
@goldmetal 4 жыл бұрын
Random클래스를 가진 다른 네임스페이스가 using되서 그렇습니다. using쪽 확인해보세요
@CuteLanto
@CuteLanto 3 жыл бұрын
10:44 흠... 이쯤에서 Type이 오류가 나네요 Assets\c#\player.cs(124,56): error CS1061: 'GameObject[]' does not contain a definition for 'type' and no accessible extension method 'type' accepting a first argument of type 'GameObject[]' could be found (are you missing a using directive or an assembly reference?) 이렇게요..ㅠㅠ
@goldmetal
@goldmetal 3 жыл бұрын
서로 타입이 맞지 않는다고 하네요. player 스크립트 124번째 줄 확인하시고 잘 모르시겠다면 여기에 코드 붙여봐주세요.
@CuteLanto
@CuteLanto 3 жыл бұрын
@@goldmetal 아 ㅋㅋㅋ 변수이름이랑 똑같아서 그랬었네욬ㅋㅋㅋ 해결 됐습니다 감사합니당 :)
@user-uw9lf4xw4l
@user-uw9lf4xw4l 2 жыл бұрын
저도 여기서 막혔어요ㅜㅠ 해결 방법 알려주세요ㅜㅠ
@NB-up8fs
@NB-up8fs 3 жыл бұрын
감사합니다.
@valolrant.
@valolrant. Жыл бұрын
코드를 쓰고나서 이런 오류가 떠요(Assets\2Scripts\Player1.cs(5,14): error CS0101: The namespace '' already contains a definition for 'Player' Assets\Scripts\Player.cs(5,14): error CS0101: The namespace '' already contains a definition for 'Player' Assets\2Scripts\Player1.cs(49,10): error CS0111: Type 'Player' already defines a member called 'Awake' with the same parameter types Assets\Scripts\Player.cs(49,10): error CS0111: Type 'Player' already defines a member called 'Awake' with the same parameter types Assets\2Scripts\Player1.cs(55,10): error CS0111: Type 'Player' already defines a member called 'Update' with the same parameter types Assets\Scripts\Player.cs(55,10): error CS0111: Type 'Player' already defines a member called 'Update' with the same parameter types Assets\2Scripts\Player1.cs(67,10): error CS0111: Type 'Player' already defines a member called 'GetInput' with the same parameter types Assets\Scripts\Player.cs(67,10): error CS0111: Type 'Player' already defines a member called 'GetInput' with the same parameter types Assets\2Scripts\Player1.cs(80,10): error CS0111: Type 'Player' already defines a member called 'Move' with the same parameter types Assets\Scripts\Player.cs(80,10): error CS0111: Type 'Player' already defines a member called 'Move' with the same parameter types Assets\2Scripts\Player1.cs(96,10): error CS0111: Type 'Player' already defines a member called 'Turn' with the same parameter types Assets\Scripts\Player.cs(96,10): error CS0111: Type 'Player' already defines a member called 'Turn' with the same parameter types Assets\2Scripts\Player1.cs(101,10): error CS0111: Type 'Player' already defines a member called 'Jump' with the same parameter types Assets\Scripts\Player.cs(101,10): error CS0111: Type 'Player' already defines a member called 'Jump' with the same parameter types Assets\2Scripts\Player1.cs(111,10): error CS0111: Type 'Player' already defines a member called 'Attack' with the same parameter types Assets\Scripts\Player.cs(111,10): error CS0111: Type 'Player' already defines a member called 'Attack' with the same parameter types Assets\2Scripts\Player1.cs(125,10): error CS0111: Type 'Player' already defines a member called 'Dodge' with the same parameter types Assets\Scripts\Player.cs(125,10): error CS0111: Type 'Player' already defines a member called 'Dodge' with the same parameter types Assets\2Scripts\Player1.cs(137,10): error CS0111: Type 'Player' already defines a member called 'DodgeOut' with the same parameter types Assets\Scripts\Player.cs(137,10): error CS0111: Type 'Player' already defines a member called 'DodgeOut' with the same parameter types Assets\2Scripts\Player1.cs(143,10): error CS0111: Type 'Player' already defines a member called 'Swap' with the same parameter types Assets\Scripts\Player.cs(143,10): error CS0111: Type 'Player' already defines a member called 'Swap' with the same parameter types Assets\2Scripts\Player1.cs(173,10): error CS0111: Type 'Player' already defines a member called 'SwapOut' with the same parameter types Assets\Scripts\Player.cs(173,10): error CS0111: Type 'Player' already defines a member called 'SwapOut' with the same parameter types Assets\2Scripts\Player1.cs(178,10): error CS0111: Type 'Player' already defines a member called 'Interation' with the same parameter types Assets\Scripts\Player.cs(178,10): error CS0111: Type 'Player' already defines a member called 'Interation' with the same parameter types Assets\2Scripts\Player1.cs(191,10): error CS0111: Type 'Player' already defines a member called 'OnCollisionEnter' with the same parameter types Assets\Scripts\Player.cs(191,10): error CS0111: Type 'Player' already defines a member called 'OnCollisionEnter' with the same parameter types Assets\2Scripts\Player1.cs(199,10): error CS0111: Type 'Player' already defines a member called 'OnTriggerEnter' with the same parameter types Assets\Scripts\Player.cs(199,10): error CS0111: Type 'Player' already defines a member called 'OnTriggerEnter' with the same parameter types Assets\2Scripts\Player1.cs(230,10): error CS0111: Type 'Player' already defines a member called 'OnTriggerStay' with the same parameter types Assets\Scripts\Player.cs(230,10): error CS0111: Type 'Player' already defines a member called 'OnTriggerStay' with the same parameter types Assets\2Scripts\Player1.cs(238,10): error CS0111: Type 'Player' already defines a member called 'OnTriggerExit' with the same parameter types Assets\Scripts\Player.cs(238,10): error CS0111: Type 'Player' already defines a member called 'OnTriggerExit' with the same parameter types )
@goldmetal
@goldmetal Жыл бұрын
Player 이름의 스크립트 파일이 2개 이상 있나봅니다. 파일 찾아보시고 같이게 있으면 잘 정리해주세요. 둘 중 하나는 삭제해야 합니다.
@valolrant.
@valolrant. Жыл бұрын
Player 이름의 스크립트를 지워도 오류코드가 계속 나옵니다. Assets\Scripts\Player.cs(5,14): error CS0101: The namespace '' already contains a definition for 'Player' Assets\Scripts\Player.cs(49,10): error CS0111: Type 'Player' already defines a member called 'Awake' with the same parameter types Assets\Scripts\Player.cs(55,10): error CS0111: Type 'Player' already defines a member called 'Update' with the same parameter types Assets\Scripts\Player.cs(67,10): error CS0111: Type 'Player' already defines a member called 'GetInput' with the same parameter types Assets\Scripts\Player.cs(80,10): error CS0111: Type 'Player' already defines a member called 'Move' with the same parameter types Assets\Scripts\Player.cs(96,10): error CS0111: Type 'Player' already defines a member called 'Turn' with the same parameter types Assets\Scripts\Player.cs(101,10): error CS0111: Type 'Player' already defines a member called 'Jump' with the same parameter types Assets\Scripts\Player.cs(111,10): error CS0111: Type 'Player' already defines a member called 'Attack' with the same parameter types Assets\Scripts\Player.cs(125,10): error CS0111: Type 'Player' already defines a member called 'Dodge' with the same parameter types Assets\Scripts\Player.cs(137,10): error CS0111: Type 'Player' already defines a member called 'DodgeOut' with the same parameter types Assets\Scripts\Player.cs(143,10): error CS0111: Type 'Player' already defines a member called 'Swap' with the same parameter types Assets\Scripts\Player.cs(173,10): error CS0111: Type 'Player' already defines a member called 'SwapOut' with the same parameter types Assets\Scripts\Player.cs(178,10): error CS0111: Type 'Player' already defines a member called 'Interation' with the same parameter types Assets\Scripts\Player.cs(191,10): error CS0111: Type 'Player' already defines a member called 'OnCollisionEnter' with the same parameter types Assets\Scripts\Player.cs(199,10): error CS0111: Type 'Player' already defines a member called 'OnTriggerEnter' with the same parameter types Assets\Scripts\Player.cs(230,10): error CS0111: Type 'Player' already defines a member called 'OnTriggerStay' with the same parameter types Assets\Scripts\Player.cs(238,10): error CS0111: Type 'Player' already defines a member called 'OnTriggerExit' with the same parameter types
@goldmetal
@goldmetal Жыл бұрын
@@valolrant. 지금 작성하신 Player 스크립트의 코드 전체를 여기에 붙여주시면 확인해드리겠습니다.
@valolrant.
@valolrant. Жыл бұрын
@@goldmetal using System.Collections; using System.Collections.Generic; using UnityEngine; public class Player : MonoBehaviour { public float speed; public GameObject[] weapons; public bool[] hasWeapons; public GameObject[] grenades; public int hasGrenade; public int ammo; public int coin; public int health; public int maxAmmo; public int maxCoin; public int maxHealth; public int maxhasGrenade; float hAxis; float vAxis; bool wDown; bool jDown; bool fDown; bool iDown; bool sDown1; bool sDown2; bool sDown3; bool isJump; bool isDodge; bool isSwap; bool isFireReady = true; Vector3 moveVec; Vector3 dodgeVec; Rigidbody rigid; Animator anim; GameObject nearObject; Weapon equipWeapon; int equipWeaponIndex = -1; float fireDelay; void Awake() { rigid = GetComponent(); anim = GetComponentInChildren(); } void Update() { GetInput(); Move(); Turn(); Jump(); Attack(); Dodge(); Swap(); Interation(); } void GetInput() { hAxis = Input.GetAxisRaw("Horizontal"); vAxis = Input.GetAxisRaw("Vertical"); wDown = Input.GetButton("Walk"); jDown = Input.GetButtonDown("Jump"); fDown = Input.GetButtonDown("Fire1"); iDown = Input.GetButtonDown("Interation"); sDown1 = Input.GetButtonDown("sDown1"); sDown2 = Input.GetButtonDown("sDown2"); sDown3 = Input.GetButtonDown("sDown3"); } void Move() { moveVec = new Vector3(hAxis, 0, vAxis).normalized; if(isDodge) moveVec = dodgeVec; if(isSwap || !isFireReady) moveVec = Vector3.zero; transform.position += moveVec * speed * (wDown ? 0.3f : 1f) * Time.deltaTime; anim.SetBool("is Run", moveVec != Vector3.zero); anim.SetBool("is Walk", wDown); } void Turn() { transform.LookAt(transform.position + moveVec); } void Jump() { if (jDown && moveVec == Vector3.zero && !isJump && !isDodge){ rigid.AddForce(Vector3.up * 15, ForceMode.Impulse); anim.SetBool("isJump", true); anim.SetTrigger("doJump"); isJump = true; } } void Attack() { if (equipWeapon == null) return; fireDelay += Time.deltaTime; isFireReady = equipWeapon.rate < fireDelay; if(fDown && isFireReady && !isDodge && !isSwap) { equipWeapon.Use(); anim.SetTrigger("doSwing"); fireDelay = 0; } } void Dodge() { if (jDown && moveVec != Vector3.zero && !isJump && !isDodge){ dodgeVec = moveVec; speed *= 2; anim.SetTrigger("doDodg"); isDodge = true; Invoke("DodgeOut", 0.5f); } } void DodgeOut() { speed *=0.5f; isDodge = false; } void Swap() { if (sDown1 && (!hasWeapons[0] || equipWeaponIndex == 0)) return; if (sDown2 && (!hasWeapons[1] || equipWeaponIndex == 1)) return; if (sDown3 && (!hasWeapons[2] || equipWeaponIndex == 2)) return; int weaponIndex = -1; if(sDown1) weaponIndex = 0; if(sDown2) weaponIndex = 1; if(sDown3) weaponIndex = 2; if ((sDown1 || sDown2 || sDown3) && !isJump && !isDodge && !isDodge && !isSwap) { if(equipWeapon != null) equipWeapon.gameObject.SetActive(false); equipWeaponIndex = weaponIndex; equipWeapon = weapons[weaponIndex].GetComponent(); equipWeapon.gameObject.SetActive(true); anim.SetTrigger("doSwap"); isSwap = true; Invoke("SwapOut", 0.4f); } } void SwapOut() { isSwap = false; } void Interation() { if(iDown && nearObject != null && !isJump && !isDodge){ if(nearObject.tag == "Weapon") { item item = nearObject.GetComponent(); int weaponIndex = item.value; hasWeapons[weaponIndex] = true; Destroy(nearObject); } } } void OnCollisionEnter(Collision collision) { if(collision.gameObject.tag == "Floor") { anim.SetBool("isJump", false); isJump = false; } } void OnTriggerEnter(Collider other) { if(other.tag == "Item") { item item = other.GetComponent(); switch (item.type) { case item.Type.Ammo: ammo += item.value; if(ammo > maxAmmo) ammo = maxAmmo; break; case item.Type.Coin: coin += item.value; if(coin > maxCoin) coin = maxCoin; break; case item.Type.Heart: health += item.value; if(health > maxHealth) health = maxHealth; break; case item.Type.Grenade: grenades[hasGrenade].SetActive(true); hasGrenade += item.value; if(hasGrenade > maxhasGrenade) hasGrenade = maxhasGrenade; break; } Destroy(other.gameObject); } } void OnTriggerStay(Collider other) { if(other.tag == "Weapon") nearObject = other.gameObject; Debug.Log(nearObject.name); } void OnTriggerExit(Collider other) { if (other.tag == "Weapon") nearObject = null; } }
@정주은-r9r
@정주은-r9r 3 жыл бұрын
자꾸 질문해서 죄송합니다.... 근거리 공격 시 뜨던 문제는 가까이 있는 오브젝트 이름 뜨게하는 디버그 로그를 주석처리 하고나니까 해결됐는데요... 이번에는 왜 총알이 안나올까요ㅠㅠㅠㅠ
@goldmetal
@goldmetal 3 жыл бұрын
에러메세지가 있는지부터 확인이 필요하겠네요. 콘솔창 확인해보세요.
@재그-c8e
@재그-c8e 2 жыл бұрын
키보드 컨트롤 버튼으로 공격하게 되면 캐릭터가 일정한 방향을 고정한 상태로 총을 쏴요 ㅜㅜ 뭐가 문제일까요??
@goldmetal
@goldmetal 2 жыл бұрын
이 강좌는 마우스 위치로 방향을 결정하기 때문에 키보드로 공격하실려면 다른 방법으로 구현하셔야 합니다.
@재그-c8e
@재그-c8e 2 жыл бұрын
@@goldmetal 감사합니다! 문제점 알고 해결했습니당 ㅎㅎ
@qtaro5302
@qtaro5302 3 жыл бұрын
세세한 디테일만 빼면 정말 시중에 나와있는 슈팅게임과 다를게 없는 퀄리티네요. 많은 도움이 됐습니다!
@_Celebrity
@_Celebrity 2 жыл бұрын
재장전 메서드 다시짜봤습니다 이렇게하면 1발을 장전할때도 무기의 maxAmmo만큼 ammo가 빠지지않고 ammo가 -로 가는일도 없네요 void ReloadOut() { // reAmmo = 장착무기의 최대 탄창 - 장착 무기의 현재 탄창 int reAmmo = equipWeapon.maxAmmo - equipWeapon.curAmmo; // reAmmo가 ammo 보다 작다면 if (reAmmo < ammo) { // 전체 탄창 - reAmmo // 장착무기의 현재 탄창 + reAmmo ammo -= reAmmo; equipWeapon.curAmmo += reAmmo; } // reAmmo가 ammo 보다 크다면 else if (reAmmo > ammo) { // 장착무기의 현재 탄창 + 전체 탄창 // 전체 탄창 - 전체 탄창 equipWeapon.curAmmo += ammo; ammo -= ammo; } isReload = false; }
@nyung-An
@nyung-An 4 жыл бұрын
22:19 골드메탈님 ㅜㅜ 스크립트 다 따라했는데 넣는 것도 다 하고 변수도 다 했는데 총알과 케이스가 인스턴트화가 안돼요 ㅜㅜ 하리라키 창에 생성이 안돼요
@nyung-An
@nyung-An 4 жыл бұрын
ㅋㅋ큐ㅠ미치겠다 IEnumerator 를 IEnumeration으로 썼었어요,,,망할,,
@徐杨-e2o
@徐杨-e2o 2 жыл бұрын
왜 내가 이 인물을 만들었는지 움직일 수가 없어
@goldmetal
@goldmetal 2 жыл бұрын
void Upate() 함수, Horizontal, Vertical 대소문자 정확한지 확인해주세요
@미스따유
@미스따유 3 жыл бұрын
혹시 재장전을 걸으면서 시행하도록 하려면 어떻게해야하나요? Animation Layer 이랑 Avatar Mask 하나 새로만들어서 실행했는데 재장전하면서 걷는소리는 나두 다리가 안움직이네요 ㅜㅜ.. 분명 새로운 아바타마스크 Humanoid부분에서 다리파트를 빨간색으로 채크해뒀는데말이죠 ㅜㅜ..
@goldmetal
@goldmetal 3 жыл бұрын
재장전 유무를 저장하는 isReload를 움직임 함수의 if조건에서 빼면 됩니다.
@pomegranate_b
@pomegranate_b 2 жыл бұрын
흠 전 마우스 회전에서 캐릭터의 Rotation x 가 반드시 90을 보고 있는 상태에서 z 가 마우스를 봐야하는데 방법이 없을까요?
@goldmetal
@goldmetal 2 жыл бұрын
그래서 이 강좌의 캐릭터 프리펩도 모델링오브젝트는 Rotation X가 90이고 그걸 감싸는 부모 오브젝트로 구성되어 있습니다. 이미 축을 회전시킨 오브젝트를 부모 오브젝트로 한번 감싸고 Z축 회전 스크립트를 부모 오브젝트에 두면 쉽게 하실 수 있습니다.
@pomegranate_b
@pomegranate_b 2 жыл бұрын
@@goldmetal 감사합니다 앞부분 안보고 이 내용만 찾고 다니니까 못봤네요
@kms0218
@kms0218 4 жыл бұрын
혹시 볼트 강좌는 언제 나오나요? 항상 알찬 강좌 감사합니다 ㅎㅎ
@goldmetal
@goldmetal 4 жыл бұрын
9월부터 시작 예정입니다.
@김성훈-p5l
@김성훈-p5l 4 жыл бұрын
Assets\S\Weapon.cs(57,34): error CS0029: Cannot implicitly convert type 'UnityEngine.Transform' to 'UnityEngine.GameObject' 이와 같은 오류가 나옵니다 어떻게 해결하죠??
@goldmetal
@goldmetal 4 жыл бұрын
57번 줄에 GameObject 변수에 Transform타입의 값을 넣으려해서 발생한 오류입니다. 타입을 맞추어주세요.
@YT-xs4cp
@YT-xs4cp 4 жыл бұрын
골드메탈님 혹시 총에서 공격범위(meleeArea)를 정하지않았다고 오류가 뜨는데 뭐가 문제인지 알 수 있을까요??
@goldmetal
@goldmetal 4 жыл бұрын
총 계열 Range 타입 무기는 meleeArea 변수를 사용하지 않도록 해야 합니다. 이 강좌에서는 if문으로 나누어 피하였으니 잘 확인하시고 코드를 다듬어주시면 되겠습니다.
@클립-c1d
@클립-c1d 2 жыл бұрын
영상 40분 즈음에 if (fDown) { Ray ray = followCamera.ScreenPointToRay(Input.mousePosition); RaycastHit rayHit; if (Physics.Raycast(ray, out rayHit, 100)) { Vector3 nextVec = rayHit.point - transform.position; transform.LookAt(transform.position + nextVec); } } } 라는 식을 쓰셨는데 Vector3 nextVec = rayHit.point - transform.position; transform.LookAt(transform.position + nextVec); 이 부분에서 rayHit.point에서 transform.position을 뺀 값에서 밑에서 다시 transform.position을 더하는 이유를 모르겠습니다. Vector3 nextVec = rayHit.point; transform.LookAt(nextVec); 이렇게 정리해도 결국 같은값이 반환되는거 아닌가요??
@goldmetal
@goldmetal 2 жыл бұрын
그렇네요 단순히 rayHit.point만 써도 되겠습니다. 강좌 촬영 중에 이것저것 복잡하게 생각하다가 이렇게 된 것 같습니다. 의견 감사합니다.
@papasim1456
@papasim1456 4 жыл бұрын
항상 영상 잘보고있습니다 그런데 재장전을 구현하는중에 ammo를 적으면 계속 에러가 나고 인식을 못합니다 왜 그런지 알려주실수 있으신가요??
@goldmetal
@goldmetal 4 жыл бұрын
이 덧글이 늦게 모니터링되서 이제서야 답변 드립니다. 전역변수로 ammo가 선언되어 있는지 확인해보세요.
@salking0224
@salking0224 4 жыл бұрын
머야 플레이어 왜 또 안움직여 (골메님 소환!)
@salking0224
@salking0224 4 жыл бұрын
답글좀;;
@AwSoMeFactOry
@AwSoMeFactOry 3 жыл бұрын
@@salking0224 Void Move 에서 !isFireReady를 빼보세요
@유진한-b7j
@유진한-b7j 4 жыл бұрын
굿
@lhx._23
@lhx._23 2 жыл бұрын
재장전 구현을 하고나니까 총알이 나가질 않습니다. 어떡하죠
@goldmetal
@goldmetal 2 жыл бұрын
재장전 Reload()끝나는 시점에 isReload가 false로 안풀린 모양입니다. ReloadOut이 Invoke로 호출되지 않고 있다면 코루틴 추천드릴께요. 사용방법은 아래 링크로 공유해드립니다. m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=pxkey&logNo=221296053953
@u_-iv2yv
@u_-iv2yv 2 жыл бұрын
@@goldmetal isReload 찍어봤을때 true, false 잘 되는데요. 저도 재장전 하면 Shot 모션만 있고 총알은 안나가네요;; 코루틴으로 사용하고 있습니다.
@goldmetal
@goldmetal 2 жыл бұрын
@@u_-iv2yv 혹시 총알이 플레이어 콜라이더에 부딧혀서 바로 사라지는지 확인이 필요하겠네요. 일단 총알 오브젝트의 레이어를 PlayerBullet으로 바꾸고 Edit > Project Setting > Physics > Collision Matrix에서 플레이어 레이어와 충돌하지 앟도록 체크해제해주세요
@Jerry이수현
@Jerry이수현 3 жыл бұрын
골드메탈님 안녕하세요 영상 잘 보고 배우고 있습니다. 리로드를 만들고 나니까 갑자기 캐릭터가 안움직이네요... 콘솔창에 에러도 안떠요 플레이 버튼을 누르면 플레이어 포지션 값이 821675e처럼 막 튑니다
@goldmetal
@goldmetal 3 жыл бұрын
리로드 함수가 실행되지 않게 Update()에서 //Reload(); 주석 처리하고 한번 실행해보세요. 이상현상을 발생시키는 범인부터 잡으셔야 합니다.
@YangChoongYi
@YangChoongYi 2 жыл бұрын
지금 근접공격이나 원거리공격이나 한방맞 맞으면 몇초지나서 몬스터들이 죽어버립니다. 감이 안잡혀서 그러는데 이거 어떻게 해야하나요?
@goldmetal
@goldmetal 2 жыл бұрын
왠지 Update에서 지속적으로 데미지를 입는 것 같습니다. 몬스터의 데미지 입는 함수가 Update에서 호출되고 있는지 한번 확인해보세요.
@YangChoongYi
@YangChoongYi 2 жыл бұрын
@@goldmetal update말고 coroutine으로 처리하고 있는데요, 뭐가 문제일까요? private void OnTriggerEnter(Collider other) { if(other.tag == "Melee") { Weapon weapon = other.GetComponent(); curHealth -= weapon.damage; Vector3 reactVec = transform.position - other.transform.position; StartCoroutine(OnDamage(reactVec)); //Debug.Log("충돌"); } else if (other.tag == "Bullet") { Bullet bullet = other.GetComponent(); curHealth -= bullet.damage; Vector3 reactVec = transform.position - other.transform.position; Destroy(other.gameObject); StartCoroutine(OnDamage(reactVec)); } } IEnumerator OnDamage(Vector3 reactVec) { foreach (SkinnedMeshRenderer skinnedMesh in skinmeshs) skinnedMesh.material.color = Color.red; mat.color = Color.red; yield return new WaitForSeconds(0.1f); if(curHealth > 0) { foreach (SkinnedMeshRenderer skinnedMesh in skinmeshs) skinnedMesh.material.color = Color.white; } else { foreach (SkinnedMeshRenderer skinnedMesh in skinmeshs) skinnedMesh.material.color = Color.grey; gameObject.layer = 9; isDead = true; isChase = false; nav.enabled = false; anim.SetTrigger("doDie"); reactVec = reactVec.normalized; reactVec += Vector3.up; rigid.AddForce(reactVec * 5, ForceMode.Impulse); Destroy(gameObject, 4); if (enemyType != Type.Boss) Destroy(gameObject, 4); }
@goldmetal
@goldmetal 2 жыл бұрын
@@YangChoongYi 몇 초 뒤에 죽는건 Destroy에 4초 걸려있어서 그렇고 curHealth -= weapon.damage; 여기를 확인해봐야겠습니다. 총알이 너무 강한건지 Debug.Log(curHealth); Debug.Log(weapon.damage); 를 확인해보세요.
@czteamlove
@czteamlove 3 жыл бұрын
골메님 ㅠㅠ 장전을 하기는하는데 방향기+r키+클릭을 해야 재장전을 합니다... 어디가 문제인걸까요 ㅠㅠ? 그리고 총을쏘면 가끔 플레이어가 천천히 돌아갑니다 ㅠㅠ...
@czteamlove
@czteamlove 3 жыл бұрын
장전은 해결했습니다! !를 붙였더라구요. 근데도 총을쏘면 플레이어가 돌아가는 현상이 있네요 ㅠ player의 리지드바디에서 Freeze Rotation x,y,z 모두 체크하면 될까요??
@goldmetal
@goldmetal 3 жыл бұрын
탄피나 총알이 플레이어가 부딧혀서 그렇습니다. 생성되는 지점을 좀 더 멀리 두시거나 아예 충돌하지 않게 레이어를 따로 지정해주세요.
@꿀빵-m1i
@꿀빵-m1i Жыл бұрын
안녕하세요! 영상 보며 잘 공부하고 있어요 22:50초까지 따라오고 실행해보니 총알이 발사되면 잠시 날다가 바닥으로 떨어진뒤 벽까지 날아가네요 같은 증상있으신 분이있는지 댓글을 봤는데 없더라구요, 혹시 이런 부분은 어딜 보면될까요??
@goldmetal
@goldmetal Жыл бұрын
총알의 리지드바디에 Gravity 체크 해제하시면 떨어지지 않습니다.
@꿀빵-m1i
@꿀빵-m1i Жыл бұрын
감사합니다. 열심히 공부할께요^^
@Nheung-bs9cy
@Nheung-bs9cy Жыл бұрын
안녕하세요 골드메탈님, 영상 잘 보고 있습니다. 원거리 공격은 될까 해서 똑같이 진행해보았는데 총알이 발사도 안되고 발사하는 모션조차 없네요ㅠㅠ 영상처음부터 다시 다보고 똑같이 했는지 확인 했는데도 왜이럴까요,,? ㅜㅠ
@Nheung-bs9cy
@Nheung-bs9cy Жыл бұрын
public class Weapon : MonoBehaviour { public enum Type { Melee, Range }; public Type type; public int damage; public float rate; public int maxAmmo; public int curAmmo; public BoxCollider meleeArea; public TrailRenderer trailEffect; public Transform bulletPos; public GameObject bullet; public Transform bulletCasePos; public GameObject bulletCase; public void Use() { if(type == Type.Melee) { StopCoroutine("Swing"); StartCoroutine("Swing"); } else if (type == Type.Range) { StartCoroutine("Shot"); } } IEnumerator Swing() { //1 yield return new WaitForSeconds(0.1f); meleeArea.enabled = true; trailEffect.enabled = true; yield return new WaitForSeconds(0.3f); //0.3초 대기 meleeArea.enabled = false; //3 yield return new WaitForSeconds(0.3f); trailEffect.enabled = false;//0.3초 대기 } IEnumerator Shot() { //1. 총알발사 GameObject instantBullet = Instantiate(bullet, bulletPos.position, bulletPos.rotation); Rigidbody bulletRigid = instantBullet.GetComponent(); bulletRigid.velocity = bulletPos.forward * 50; yield return null; //2. 탄피배출 GameObject instantCase = Instantiate(bulletCase, bulletCasePos.position, bulletCasePos.rotation); Rigidbody caseRigid = instantCase.GetComponent(); Vector3 caseVec = bulletCasePos.forward * Random.Range(-3, -2) + Vector3.up * Random.Range(2, 3); caseRigid.AddForce(caseVec, ForceMode.Impulse); caseRigid.AddTorque(Vector3.up * 10, ForceMode.Impulse);
@Nheung-bs9cy
@Nheung-bs9cy Жыл бұрын
콘솔창 에러는 안뜹니다.
@goldmetal
@goldmetal Жыл бұрын
총알이 발사되지마자 플레이어와 닿아서 사라지는 것 일수도 있습니다. 플레이어와 플레이어 총알이 서로 충돌나지 않도록 레이어 지정해주세요. 플레이어 player, 플레이어 총알 PlayerBullet 이후 Edit > Project Settings > Physics > Collision Matrix 까지 가서 Player와 PlayerBullet이 겹치는 구간은 체크해제해주세요
@khyun1777
@khyun1777 3 жыл бұрын
ReloadOut() 함수 부분이랑 Turn()함수의 RaycastHit 부분 설명을 자세하게 해주실수 있으신가요?? 이해하기가 조금 어려워요 ㅠ.ㅠ
@goldmetal
@goldmetal 3 жыл бұрын
ReloadOut 함수에서 계산하는 것은 탄을 보충할 때 총에 남아있는 탄을 고려해서 채우는 것입니다. (탄창에 30발이 들어가지만 현재 7발 남았을 때 -> 30-7 = 23발만 사용해서 장전) Turn은 마우스 커서위치를 월드에 대입하여 레이를 쏴서 맞은 위치를 가지고 캐릭터가 그쪽으로 바라보게 하는겁니다. 마우스 위치는 World가 아닌 Screen이라는 점 참고 바랍니다.
@수지-x3k
@수지-x3k 3 жыл бұрын
강의 영상 잘보고있습니다! 혹시 공격을 할때 마우스방향으로 공격을 할수있는 로직을 짜고싶은데..혹시 힌트면 주실수있나요 마우스에 포지션값을 가져와서 공격할때의 방향을 마우스포지션값에 넣으면 되는지ㅜㅜ 의견 부탁드립니다!
@goldmetal
@goldmetal 3 жыл бұрын
36:17 이미 챕터 4에서 다루고 있습니다.
@TBKJMT
@TBKJMT 2 жыл бұрын
장전 로직에 float rate = equipWeapon.reloadRate;를 추가하여 총마다 장전시간을 다르게하였습니다. 그런데 이렇게하니 애니메이션이 시간하고 안맞더라구요 장전 애니메이션을 총마다 다 따로 배정해주어야하나요? 아니면 장전애니메이션을 하나만 두고 애니메이션의 속도만을 로직상에서 일시적으로 변경할수 있나요?
@goldmetal
@goldmetal 2 жыл бұрын
애니메이터에서 속도 조절이 가능합니다. docs.unity3d.com/ScriptReference/Animator-speed.html
@nowons100
@nowons100 3 жыл бұрын
골매님. OnTrigger 이벤트에서는 other.tag로 상대 오브젝트를 판별했는데 왜 OnCollision에서는 collision.gameObject.tag로 가져오는 건지요?
@goldmetal
@goldmetal 3 жыл бұрын
OnTrigger 계열은 매개변수가 Collider라서 바로 tag 가져올 수 있지만 OnCollision 계열은 매개변수가 Collision이라서 따로 transform 혹은 gameObject까지 한번 더 들어가야 tag에 접근 가능합니다.
@nowons100
@nowons100 3 жыл бұрын
@@goldmetal 아항.. 그런거군요.. 외워야겠네요.. 고맙습니다~
Inside Out 2: ENVY & DISGUST STOLE JOY's DRINKS!!
00:32
AnythingAlexia
Рет қаралды 12 МЛН
pumpkins #shorts
00:39
Mr DegrEE
Рет қаралды 34 МЛН
1인 미니 게임 개발 후기 [Mini game development review]
11:53
후뢰시곰 [Flashbear Games]
Рет қаралды 1,6 М.
코딩을 몰라도 게임을 만들 수 있을까?
7:29
오늘코딩
Рет қаралды 75 М.
오늘코딩이 선정한 최고의 2D 에셋
7:00
오늘코딩
Рет қаралды 32 М.
I redesigned my game
23:32
jdh
Рет қаралды 86 М.