목록개발일지 (8)
시작은 0부터
오늘 작업 시간 1.25MH(10H) "검색은 내가 원하는 코드를 구현하기 위한 '키워드'를 찾는 과정이다." 교수님의 말씀을 듣고나서 맨땅에 헤딩하는 격으로 아는 범위 안에서 조금씩 코드를 수정해보면서 될 때까지 기능구현을 위해 매달리던 나의 방식이 잘못되었음을 느꼈다. 기존에는 막히는 부분은 검색을 해서 원하는 코드가 있을 경우 원리가 이해가 되는 경우 가져오고, 원하는 코드를 찾지 못할 때는 그냥 아는 범위 내에서 구현하려고 했었다. 나의 검색실력의 문제도 있겠지만 애초에 내가 원하는 바와 정확히 일치하는 코드를 구하는 것은 어려울 것이다. 구글링은 코드를 찾는 것이 목적이 아닌, 내가 구현하고자 하는 기능의 작동 원리를 파악하기 위한 키워드들을 하나씩 알아가는 과정이다. 성격상 뭔가 될것같다 싶으..
오늘 작업 시간 : 0.75MH(6H) [ 맵 수정 ] - 부스터 발판 비주얼 수정 - 길이 이어지지 않는 곳은 진입을 못하도록 나무로 막음. [ 플레이어 상호작용 오브젝트 추가 ] - 진입금지 표지판 : RigidBody를 달아놓아 플레이어가 부딪히는 힘에 따라 날아가도록 구현했다. 다만, 사용하는 메쉬의 문제인지 메쉬콜라이더를 적용하면 땅을 뚫고 땅밑으로 꺼지는 현상이 일어나는데 Convex 체크를 해서 일단은 막았지만 이 경우 콜라이더 모양이 삼각형이 되어 충돌시 자연스럽게 넘어지지 않고 밀려나는 현상이 있다. - 주차장 차단기 : 몸통은 고정, 차단기는 플레이어와 접촉시 AddComponent()를 이용해 몸통에 고정되어있다가 플레이어와 접촉하면 떨어져나가는 방식을 구현. [ 아이템 추가 구현 ]..
오늘 작업 시간 : 1.25MH(10h) 어제부터 오늘까지 '자신'을 제외한 플레이어에게만 충돌 판정이 되는 미사일 아이템을 구현하기 위해 종일 매달렸다. 견문이 좁아 조건문만 이리저리 수정해가면서 사실상 큰 차이가 없는 접근방법으로 자기자신을 구분하려고 했지만 실패했다. PhotonView.IsMine 인 플레이어만 Awake 에서 Tag 를 변경하여 다른 플레이어와 구분하는 방법을 알려준 동기의 조언을 참고하여 태그를 바꿔봤지만 잘 되지 않아, 다른 접근법들을 이용하여 적용해보았지만 잘 되지 않았다. 그리고 태그 변경으로 구분하는 방법을 알려준 동기분의 추가적인 조언을 받아 자신을 구분하는 방법을 해결하였다. 그리고 이 방법이 나에게는 너무도 놀라워 기록해둔다. 플레이어가 미사일을 생성할 때, 미사일..
오늘 작업 시간 : 1.25MH(10H) Vector3.forward : '로컬' 좌표 기준으로 앞방향을 나타낸다. transform.forward : '월드' 좌표 기준으로 앞방향을 나타낸다. 미사일 아이템을 구현하는데 플레이어의 앞방향을 가져와서 대입하기 위해 미사일 오브젝트의 transform.forward 에 플레이어의 transform.forward를 대입하고, rotation 값도 마찬가지로 대입하는 방법으로 간단하게 구현해보려고 했는데 왜 이상한 방향으로 나가나 했는데 역시나 접근방법이 틀렸었다. 미사일을 쏘는 문제도 싱글 게임에서는 Instantiate() 함수를 통해 생성할 때 인자값으로 부모를 설정하는 Transform 값을 넣어줄 수 있지만, 현재 멀티플레이를 위해 사용하는 Photo..
오늘 작업 시간 - 1MH(8H) NavMeshAgent 를 활용하여 AI의 이동을 구현하는 과정에서 물리 기능이나 다양한 변수 상황에 따른 처리를 적용하는 방법이 많이 까다롭고 막막해서 일단은 PVP 에 중점을 두어 플레이어 간의 상호 처리를 우선적으로 해결하기로 하였다. 이 문제를 코딩을 잘하는 동기분에게 말씀드렸더니 ML Agent 라는 다른 방법을 제안해주셨다. 유니티를 몇 달째 사용하면서도 정작 사용하는 코드나 함수의 폭이 좁은 와중에, 완전히 새로운 AI 구현 방법을 알게 되었다. https://unity.com/kr/products/machine-learning-agents 머신러닝 에이전트 심층 학습 기술을 활용하는 툴킷으로 지능적인 반응형 에이전트를 만들어 보세요. unity.com 맵을..
0.75(6H) 동안 작업. 맵에 유닛과 접촉했을 때 상호작용을 일으킬 수 있는 오브젝트 구현. 플레이어가 해당 오브젝트와 접촉하면 점프를 하거나 가속도를 얻는 기능을 구현하기 위해 닿는 처리를 하기 위해 트리거 콜라이더를 사용했다. 처음에는 OnTriggerEnter() 함수를 오브젝트에 달아 접촉 유닛을 파악하고 이벤트를 발생시키도록 하려고 했으나, 포톤 네트워크를 사용하여 멀티 플레이로 작동하는 상황에서 오브젝트가 플레이어를 판단할 경우 오브젝트가 판단하는 시간을 처리하는 기준이 메인 클라이언트에서 처리되기 때문에 처리 결과가 지연되거나 다를 수 있다는 문제가 있다는 팀원의 조언과 제안으로 OnTriggerEnter() 함수를 플레이어에 달았다. 상호작용하는 오브젝트들은 Tag와 트리거 콜라이더만 ..
오전 9시 기준 0.75(6H) 시간 동안 네비메쉬 AI 기울기 방법 모색. 어제 알게된 사실로 navMesh로 이동할 때는 transform 컴포넌트의 회전값이 아닌 navMesh가 자체적으로 가지고 있는 회전값을 사용하기 때문에 처리가 되지 않아 navMeshAgent 컴포넌트의 transform을 가져와 Rotate로 값을 설정하니 기준점이 잘 맞았다. 전방을 향해 레이를 쏴서 기울기값을 조절하는 문제로 레이를 쏘는 방향은 전방과 일치했는데 각도가 불일치하는 현상이 발생했다. Raycast 함수에 사용되는 방향 인자값에 transform.forward만 작성해서 생긴 문제로 각도를 일치시키기 위해서 현재 자신의 기울기값에 방향을 곱하는 방식으로 구현하였다. Quaternion curRotation ..
오전 9시부터 1.0(8h)을 맵 만드는데만 사용했다. 5시 30분 기준으로 도로는 전부 만들었다. 이제 다시 AI의 기울기값을 수정하는 방법을 찾아야한다. https://docs.unity3d.com/ScriptReference/AI.NavMeshAgent.SetDestination.html 유니티 스크립팅 AI를 보면서 새삼 알게 된 것은 NavMeshAgent의 SetDestination 함수 자체가 기본적으로 목표방향을 향해 이동하면서 이동하는 길을 따라 자동으로 회전한다는 것이다. Transform.Rotate(x,y,z)가 제대로 작동하지 않았던 것이 코드 상의 문제가 아니라 NavMesh의 자동 회전 기능과 충돌해서 회전값이 고정되는 현상이 발생한 것이 아닐까! 싶었다. navMeshAgen..