목록전체 글 (58)
시작은 0부터
API(Application Programming Interface) 외부 라이브러리 연동. 응용 프로그램에서 사용할 수 있도록 운영 체제나 프로그래밍 언어가 제공하는 기능을 사용할 수 있게 제공되는 인터페이스. 인터페이스(Interface) 서로 다른 시스템 간에 커뮤니케이션이 가능하도록 설계한 상호 작용 방식. 소프트웨어 인터페이스 : 운영체제는 하드웨어와 접속할 수 있는 통로로써 인터페이스를 활용. 객체 지향 프로그램들의 경우 응용 프로그램 내의 오브젝트들 간의 메소드를 통해서 상호작용하는데 활용된다. Web API 웹서버 또는 웹 브라우저를 위한 API. - HTTP 서비스. - 다양한 클라이언트에서 접근 가능하도록 설계 - 웹 환경을 통해 제공되는 데이터 CRUD 인터페이스 제공. URI, UR..
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..
Physics.OverlapSphere(Vector3 position, float radius, int layerMask) : position을 기준으로 radius 만큼의 원형 반경으로 주변을 검사하여 layerMask에 해당하는 layer를 가진 콜라이더를 감지하여 bool 값으로 반환한다. AI의 행동 반경을 설정할 때 유용하게 쓰인다. Physics.Raycast(Vector3 origin, Vector3 direction, out RaycastHit hitInfo, float maxDistance, int layerMask) : origin을 시작점으로 direction 방향으로 maxDistance만큼 레이를 쏴서 layerMask를 제외한 콜라이더의 정보(hitInfo)를 bool값으로 반환..
전용서버(Dedicated server) : 플레이어 접속자 수에 상관없이 항상 모든 플레이어와 NPC, 클라이언트에 대응하여 연산하는 서버. 외부와 단절되어 연산하기 때문에 보안이 높다. MMORPG 게임에 주로 사용된다. 클라이언트가 서버로부터 요청하고 응답받는 시간이 걸린다.(P2P 게임에 부적합) P2P(Peer To Peer) server : 클라이언트 간에 직접 연결. 클라이언트 각각이 모든 연산을 다 한 후 연산 결과를 다른 모든 클라이언트에게 전달. 서로 요청하고 응답받기 때문에 컴퓨터 사양이 좋으면 응답속도가 빨라질 수 있지만, 한 명이라도 성능이 떨어져 응답속도가 지연되면 가장 느린 클라이언트를 기준으로 처리되기 때문에 클라이언트 사양에 영향을 많이 받는다. 연결 중에 클라이언트 한명이..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/9pHGB/btrL3QXVRP9/MICK5s2GZmJlmS9dQ1gMKk/img.png)
UI의 최적화는 한번에 많이 그려내는 것이 가장 최선의 방법이다. 메테리얼을 한번만 바꾸고 한번에 최대한 많이 그려내는 것. 이를 유니티 내부에서 구현한 기능으로 '아틀라스'가 있다. 2048 크기 이미지 3개를 한번에 출력하기 위해 4096 크기의 이미지를 출력하는 것 Blend Tree : Blend Type 2D Simple Directional : 방향마다 애니메이션 '하나'만 표현한다. 2D Freedom Directional : 방향마다 애니메이션 여러개를 표현한다. 블랜드트리는 값에 따라 애니메이션을 섞는다. 위 경우는 float xAxis 값과 zAxis값을 그대로 반환하여 애니메이션 변수로 사용하여 블랜드트리를 설정하였다.
레이싱 게임을 만들어보면서 차량의 움직임을 구현할 때 지금까지 알고 있던 transform.Translate, RigidBody.AddForce, RigidBody.velocity 가운데 AddForce가 가장 차량 움직임에 근접한 이동방식이라고 판단하여 사용했는데, 차량을 회전해도 바라보는 방향과 상관없이 절대좌표를 기준으로 Z축으로 전진하는 문제가 있었다. AddRelativeForce : AddForce(절대좌표)의 상대좌표버전. 오브젝트의 회전값을 기준으로 작동한다. 이동 구현에 난항을 겪고 있는데, 우선 맵에는 경사(오르막, 내리막길)도 있고 약간의 턱(방지턱)도 있는 구조다. 이런 환경에서 Character Controller 를 사용하면 경사나 턱은 알아서 넘어가도록 구현이 되지만 문제는 리..