Unity (48) 썸네일형 리스트형 ML-Agents_1 개발환경 구축 1. Python 설치: https://www.python.org/downloads/release/python-379/ 에서 Windows x86-64 executable installer 다운 후 실행 Add Python 3.7 to PATH 체크 하고 Install Now를 누른다. ⑴ 이것은 Python 3.7을 컴퓨터가 현재 cmd.exe의 어느 디렉토리에 있다 하더라도, 파이썬을 실행 시킬 수 있도록 해주는 것. 즉, 환경변수(컴퓨터 시스템 전반에 걸쳐 쉽게 참조할 수 있도록 만들어 놓은 변수)를 설정하는 것이다. Disable path length limit 를 선택하여 최대 길이 제한을 없애준다. 2. Git 설치: https://git-scm.com/ 에서 최신버전을 다운로드 받는다. 다운.. 유니티 2인 프로젝트 03.08 ~ 03.28 Enemy FSM (Finite-State Machine) FSM이란 유한 개의 상태를 가지고 주어지는 입력에 따라 어떤 상태에서 다른 상태로 전이되거나 또다른 출력 같은 것들이 일어나게 하는 장치를 나타낸 모델이라고 한다. 뭔가 어렵게 쓰여진 것 같은데 그냥 일반 게임에서 보는 몬스터라고 생각하자. 순찰, 걷기, 공격 등의 상태가 있고 어떠한 조건을 만족하면 해당 상태에 해당하는 동작을 하는 거라고 보면 될 것 같다. public class Enemy : MonoBehaviour { // Enemy의 상태는 3가지가 있다 SEARCH, MOVE, ATTACK enum State { SEARCH, MOVE, ATTACK } // 현재 상태를 담을 변수 State state; void Start() { // 초기 상태는 SEARCH state = State.SEA.. 5-2. Enemy Path Finding_2 NavMesh Agent를 이용해서 target 따라다니기 저번 포스트에서 지형지물을 Bake 해서 길 정보(Nav Mesh)를 만들어 냈다. 이제 Enemy에 추가한 Nav Mesh Agent를 사용해서 Player를 따라다녀 보자. using UnityEngine.AI; // NavMeshAgent의 기능을 사용하기 위해서 AI namespace를 사용 // agent 기능을 이용해서 목적지를 향해서 이동 public class Enemy : MonoBehaviour { NavMeshAgent agent; GameObject target; void Start() { // agent에 NavMeshAgent 를 담고 agent = GetComponent(); // GameObject target에 찾을 대상 (Player)를 넣음 GameObject targe.. 5-1. Enemy Path Finding_1 길 만들기 이번 포스트는 Enemy가 Player를 따라다니는 AI를 만드는 방법에 대한 내용을 다룰 것이다. 1. Window - AI - Navigation 을 누르면 Inspector 창 옆에 Navigation 탭이 새로 생긴다. 2. 미리 만들어 두었던 지형지물을 빈 객체에 넣어 정리를 한다. 이름은 Environment 라고 했다. 3. Environment(지형지물을 넣어둔 오브젝트 이름)의 Inspector창을 보면 Static이라고 되어있는 부분이 있는데 여기서 Navigation Static을 선택해 준다. 4. Navigatin Static을 누르면 자식들도 모두 Navigation Static으로 변경할 것인지 묻는 창이 나온다. Yes를 눌러서 자식들도 모두 Navigation Static으.. 4. 총알 발사 FPS에서 절대 빠지면 안 되는 총쏘기를 구현해 보겠다. 왼쪽 버튼을 눌렀을 때 총알이 나가도록 하고 싶다. 하지만 실제로 총알이 나가는 건 아니고, 메인 카메라가 바라보는 방향에 닿은 곳의 정보를 가져와서 총알 자국을 남기는 것이다. 이때 사용할 것이 Raycast이다. Ray ray = new Ray(Camera.main.transform.position, Camera.main.transform.forward); 먼저 ray에 Ray가 시작되는 지점과 앞으로 나아갈 방향을 정한다. 카메라가 바라보는 정면 방향으로 총을 쏠 것이기 때문에 시작 지점에 Camera.main.transform.position 나아갈 방향에는 Camera.main.transform.forwad를 넣는다. Ray를 만들었으니 .. 3. Player Jump 2 땅에 붙어있어도 gravity값이 계속해서 yVelocity에 더해지기 때문에 아래로 이동할 때 순간이동 하듯이 빠르게 움직이는 걸 볼 수 있다. 따라서 땅에 있을 때는 yVelocity를 초기화 해줘야 한다. 이때 Character Controller에는 땅에 닿아 있는지 확인 할 수 있는 기능이 있는데 CharacterController.isGrounded 이다. 그래서 조건에 isGrounded가 true라면 yVelocity를 0으로 초기화해줬다. 추가적으로 2단 점프를 구현하고 싶었기에 점프를 할 때마다 jumpCount 의 값을 1씩 올리고 maxJumpCount 에 2의 값을 넣어 jumpCount가 MaxJumpCount 보다 작을 때만 점프를 할 수 있게 했다. 마찬가지로 땅에 닿았을 때.. 2. Player Jump 저번 포스트에 이어서 이번에는 Player의 점프를 구현해 보도록 하겠다. 1. 플레이어에 Character Controller 컴포넌트를 추가한다. 2. 점프 코드 public class Player : MonoBehaviour { public float jumpPower = 10; public float gravity = -9.81f; float yVelocity; void Update() { // y속도는 중력을 계속 받아야 함. yVelocity += gravity * Time.deltaTime; // 만약 점프키를 누르면 y속도를 jumpPower로 함 if (Input.GetButtonDown("Jump")) { yVelocity += jumpPower; } dir = Camera.main.t.. 이전 1 2 3 4 5 6 다음