본문 바로가기

유니티 게임 개발16

[유니티 강좌] 2D RPG 게임 만들기 - 16 / 스테이터스 클래스 정리하기 처음에는 정말 기초만 포스팅하고 끝내려 했는데 예상치 못하게 많이 진행이 되면서 점점 코드가 복잡해지고 있습니다. 스크립트 파일을 나누지 않으면 점점 개발이 힘들어지니 이번 포스팅에서 약간이나마 깔끔하게 정리하는 시간을 가지려고 합니다. 한 분이 질문 주셨는데요. "여러 적을 만들 때 일일이 스크립트를 만들어서 스테이터스를 설정하는 건 비효율적이고 귀찮은 작업인 것 같다. 이 문제를 해결할 방법이 있는지 궁금하다" 라고 질문해주셨습니다. 질문한 분의 고민은 기존에 스테이터스 객체가 정의되지 않아서 발생했던 문제로 이번 포스팅을 따라해보시면 해결하실 수 있을 겁니다. 먼저 설명을 드리기 전에 말씀드리고 싶은 것은 제가 설명드릴 방법이 실무에서 쓰이는 정석이 아닐 수 있다는 점, 그리고 제가 프로그래밍을 공.. 2021. 5. 13.
[유니티 강좌] 2D RPG 게임 만들기 - 15 / 플레이어의 죽음 이 게임에서 플레이어가 죽는 경우는 체력이 0 이하가 되었을 때 땅 밑으로 떨어졌을 때 위 두 가지 경우로 나눌 수 있는데요. 이번 포스팅에서는 죽으면 die 애니메이션을 실행하고, 게임을 재시작 하는 것까지 구현해보겠습니다. 스크립트 코드는 sword_man.cs에 추가해주세요. using UnityEngine.SceneManagement; // 클래스 위에 적기 bool isSwordManDead = false; void Start() { ~~~ // 기존 코드 밑에 StartCoroutine(CheckSwordManDeath()); } void Update() { if (isSwordManDead) return; // 조작 못하게 하기 ~~~ // 기존 코드 위에 } IEnumerator Check.. 2021. 5. 2.
[유니티 강좌] 2D RPG 게임 만들기 - 14 / 사운드 RPG 만들기 - Google Drive 이 폴더에 파일이 없습니다.이 폴더에 파일을 추가하려면 로그인하세요. drive.google.com 드라이브에 예제 사운드 파일을 추가했습니다. Scripts폴더에 Sounds폴더를 만들고 BGM, SFX를 관리하는 스크립트를 생성합니다. SFXManager.cs public class SFXManager : MonoBehaviour { public static SFXManager Instance { get; private set; } public AudioClip playerAttack; AudioSource audioSource; private void Awake() { Instance = this; } private void Start() { audioSou.. 2021. 3. 28.
[유니티 강좌] 2D RPG 게임 만들기 - 13 / 함정 MineTile -> Texture -> Misc에 있는 가시 이미지를 사용했습니다. Thorns.cspublic class Thorns : MonoBehaviour { private void OnTriggerEnter2D(Collider2D col) { if (col.CompareTag("Player")) { Sword_Man swordMan = col.GetComponent(); swordMan.nowHp -= 10; if (swordMan.nowHp < 0) swordMan.nowHp = 0; } } } Polygon Collider 2D의 Edit Collider를 누르면 충돌체를 다각형으로 수정할 수 있습니다. 만든 함정 오브젝트를 Prefabs에 저장합니다. 2021. 3. 24.
[유니티 강좌] 2D RPG 게임 만들기 - 12 / 아이템 파란색 잼 - 이동속도 증가 초록색 잼 - 공격속도 증가 빨간색 잼 - 체력회복 스크립트 폴더 안에 items 폴더를 만들고, 아이템마다 스크립트를 만듭니다. GemBlue.cs public class GemBlue : MonoBehaviour { // 10초간 이동속도 100% 증가 private void OnTriggerEnter2D(Collider2D col) { if(col.CompareTag("Player")) { Sword_Man swordMan = col.GetComponent(); StartCoroutine(IncreaseMoveSpeed(swordMan)); GetComponent().enabled = false; // Destroy를 하면 코루틴이 정지되므로, 임시로 그림만 없앴음. G.. 2021. 3. 24.
[유니티 강좌] 2D RPG 게임 만들기 - 11 / 간단한 적 AI 범위 안에 들어온 적을 쫓아가고, 공격 사거리에 들어왔을 때 공격을 하는 간단한 AI를 만들어보겠습니다. 실행 흐름 의사 코드 while True if 시야 범위 안에 들어왔을 때 then 타깃 방향 쳐다보기 if 공격 범위 안에 들어왔을 때 then 공격 else 추적 end if endif endwhile EnemyAI 이 구조를 토대로 EnemyAI 스크립트를 만들겠습니다. public class EnemyAI : MonoBehaviour { public Transform target; float attackDelay; Enemy enemy; Animator enemyAnimator; void Start() { enemy = GetComponent(); enemyAnimator = enemy.ene.. 2021. 3. 21.
[유니티 강좌] 2D RPG 게임 만들기 - 10 / 따라오는 카메라, 영역 설정 이번 포스팅은 자세히 이해하지 않아도 괜찮으니 바쁘신 분들은 스크립트만 가져가셔도 괜찮습니다. public class CameraFollow : MonoBehaviour { public Transform target; public float smoothSpeed = 3; public Vector2 offset; public float limitMinX, limitMaxX, limitMinY, limitMaxY; float cameraHalfWidth, cameraHalfHeight; private void Start() { cameraHalfWidth = Camera.main.aspect * Camera.main.orthographicSize; cameraHalfHeight = Camera.main.or.. 2021. 3. 18.
[유니티 강좌] 2D RPG 게임 만들기 - 9 / 맵 생성, 타일 맵 Unity Asset Store의 Mine Tileset을 사용했습니다. 텍스쳐부분만 사용할 거라 다른 파일은 삭제해 드라이브에 업로드했습니다. Assets -> Import Package -> Custom Package로 불러와주세요. RPG 만들기 - Google Drive 이 폴더에 파일이 없습니다.이 폴더에 파일을 추가하려면 로그인하세요. drive.google.com 팔레트를 저장할 Palettes 폴더와 타일을 저장할 Tiles 폴더를 생성합니다. Hierarchy창에서 타일맵을 생성합니다. Grid와 Tilemap이 생성되면서 격자무늬가 보이게 됩니다. 우측 하단에 Open Tile Palette를 클릭합니다. (이미지에 Tilemap이라고 되어있는데 실수로 변경을 못했습니다. Ground로.. 2021. 3. 18.
[유니티 강좌] 2D RPG 게임 만들기 - 8 / 벽에 붙는 현상 안녕하세요. 오랜만에 포스팅입니다. 그동안 댓글로 응원해주신 분들 모두 감사드리고 죄송합니다! 현재까지 진행된 프로젝트 압축 파일은 구글 드라이브에 올려놨습니다. 혹시 막히시면 참고해주세요. RPG 만들기 - Google Drive 이 폴더에 파일이 없습니다.이 폴더에 파일을 추가하려면 로그인하세요. drive.google.com 이번에 다룰 주제는 유니티의 포럼과 질문에 여러 번 등장한 주제이니만큼 그냥 넘길 수는 없을 것 같습니다. 벽 쪽으로 이동하면서 벽면을 타면 잘 미끄러지지 않게 되는 문제입니다. transform.Translate를 사용할 때는 문제 없지만, Rigidbody.AddForce, Rigidbody.velocity같은 물리적으로 작동하는 함수로 이동할 때만 해당 현상이 발생합니다... 2021. 3. 15.