[Unity2D] 13. 광석 체력(강도) 부여
·
Unity 개발일지/[Unity2D]졸업프로젝트
2024.01.05 광석 체력 추가 현재 게임에는 구리/철/은/금/다이아 다섯종류의 광석이 존재한다. 여태까지는 일반 땅 타일과 마찬가지로 곡괭이로 한 번만 캐면 파괴되도록 설정되어있었으나, 광석마다 강도를 설정하여 구리는 2번, 철은 3번 ...., 다이아는 6번 곡괭이질 해야 파괴되도록 설정하고자 한다. Player 스크립트와 채굴을 담당하는 bricks 스크립트에 추가해주었다. Player public int pickAxesPower = 1; //곡괭이 공격력 //... // 타일맵의 위치와 체력을 저장할 구조체 struct TilemapInfo { public Vector3 position; //타일의 위치 public int health; //타일의 체력 } private List tilemap..
[Unity] Object.Instantiate
·
공부/Unity & C#
Object Instantiate (Object original, Vector3 position, Quaternion rotation); Object Instantiate (오브젝트, 위치, 방향); 오브젝트를 원하는 위치에 생성할 때 사용한다. 파라미터(매개변수) original 생성하고자 하는 오브젝트 position 새 오브젝트를 생성하려는 위치 rotation 새 오브젝트의 방향 사용 예제 using UnityEngine; public class InstantiateExample : MonoBehaviour { public GameObject prefab; void Start() { for (int i = 0; i < 10; i++) Instantiate(prefab, new Vector3(i *..
[Unity2D] 12. 아이템 드랍 및 획득 / Vector3.Distance / Vector3.MoveTowards
·
Unity 개발일지/[Unity2D]졸업프로젝트
2024.01.03 아이템 드랍 및 획득 추가 이번에는 지난 글에 이어 아이템 상자가 파괴되면 1. 아이템이 드랍 2. 플레이어가 가까이 가면 획득 하는 동작을 구현했다. 기존의 Player에 작성했던 코드를 Item 스크립트에 새로 추가하여 옮겨주었다. Item using System.Collections; using System.Collections.Generic; using UnityEngine; public class Item : MonoBehaviour { public GameObject item; //아이템 오브젝트 Animator boxAnim; private GameObject gameManager; void Start() { boxAnim = GetComponent(); gameManag..
[Unity2D] 11. 아이템 상자 부수기 , OverlapCircle()
·
Unity 개발일지/[Unity2D]졸업프로젝트
2024.01.02 상자 부수기 추가 이번에는 저번에 랜덤위치에 생성되도록 만든 아이템 상자를 부수는 코드를 추가하였다. 기존의 Player 스크립트에 코드를 추가해주었다. Player //아이템상자의 레이어 public LayerMask ItemBoxLayer; //아이템상자 오브젝트 public GameObject itemBox; //아이템상자 애니메이션 Animator boxAnim; //... //... //circle은 플레이어 주변에서 마우스 방향을 따라 이동하는 오브젝트이다. Collider2D ItemBoxCollider = Physics2D.OverlapCircle(circle.transform.position, 0.01f, ItemBoxLayer); if (ItemBoxCollider ..
[Unity2D] 10. 플레이어 목숨, 게임 오버 추가
·
Unity 개발일지/[Unity2D]졸업프로젝트
2023. 11 30 GameOver 추가 이번에는 플레이어의 체력을 설정하고 체력이 0이 되면 게임오버가 되도록 추가해주었다. 우선 Player 스크립트에서 적에게 공격받았을 때 체력이 감소하는 코드를 추가해주었다. public GameManager manager; public int life; //... //... //... //이전 글에서 작성한 코드 if(collision.gameObject.tag == "Enemy") { OnDamaged(collision.transform.position); //추가된 부분 //적과 충돌하면 life 1개 감소 life--; //life가 0보다 작아지면 GameManager에서 GameOver()을 실행한다 if(life
[Unity2D] 9. 공격받았을 때 피격 효과 적용(넉백, 무적모드)
·
Unity 개발일지/[Unity2D]졸업프로젝트
2023.11. 29 피격 효과 적용 이번에는 플레이어가 적에게 공격 받았을 때 1. 플레이어 스프라이트 색상 및 투명도 변경 2. 넉백 두가지 기능을 추가하였다. 기존의 Player 스크립트에 코드를 추가해주었다. void OnCollisionEnter2D(Collision2D collision) //적과 충돌하였을 때 { //충돌한 오브젝트의 태그가 "Enemy"이면 if(collision.gameObject.tag == "Enemy") { OnDamaged(collision.transform.position); } } void OnDamaged(Vector2 targetPos) //적과 충돌시 효과 { //플레이어의 레이어를 playerDamaged로 변경 gameObject.layer = 10; ..
[Unity2D] 8. 아이템 상자 랜덤 생성
·
Unity 개발일지/[Unity2D]졸업프로젝트
2023.11.24 아이템 랜덤 생성 아이템 상자도 랜덤한 위치에 생성되어야 한다. 1. 아이템 상자로 사용할 프리펩을 생성 2. 기존에 작성한 MapGenerator 스크립트에 아이템 생성 함수를 추가해주었다. (이전글) https://knhoo.tistory.com/entry/Unity2D-4-%EA%B4%91%EB%AC%BC-%EB%9E%9C%EB%8D%A4-%EC%83%9D%EC%84%B1 [Unity2D] 4. 광물 랜덤 생성 로그라이크 장르 특성에 맞게 플레이 할 때 마다 광물의 위치도 랜덤하게 조정해야한다. 기존에 작성한 MapGenerator스크립트에 추가했다. (이전 글) https://knhoo.tistory.com/entry/Unity2D-3-%EB%9E%9C%EB%8D%A4-%E k..
[Unity2D] 7. 땅에 박히는 버그 수정
·
Unity 개발일지/[Unity2D]졸업프로젝트
2023.11.23 땅에 박히는 오류 수정 테스트 진행 중에 플레이어가 일정 구간 이상 높은 곳에서 떨어지면 땅에 박혀버리는 오류가 발생하였다. 이는 떨어지는 높이가 증가할수록 가속도가 붙어서 발생하는 오류이므로 낙하 최대속도를 제한하여 해결하였다. 기존 코드 public float maxSpeed; //기존에는 좌우이동의 maxSpeed만 존재 if (rigid.velocity.x > maxSpeed) rigid.velocity = new Vector2(maxSpeed, rigid.velocity.y); else if (rigid.velocity.x < maxSpeed * (-1)) rigid.velocity = new Vector2(maxSpeed * (-1), rigid.velocity.y); 수정..
[Unity2D] 6. 점프 오류 개선
·
Unity 개발일지/[Unity2D]졸업프로젝트
2023.11.21 점프 코드 수정 테스트를 진행하다보니 점프 동작에서 버그가 발생하였다. 기존에는 바닥 타일의 레이어를 "Ground"로 설정하여 플레이어가 Ground레이어의 오브젝트와 충돌하면 isJumping의 값을 false로 설정하고, 점프하면 true로 설정하여 무한 점프를 방지하였다. 그러나 벽면에 붙어서 점프를 했을 때 가끔 끼임 현상(?)이 발생하고 다시 바닥으로 내려와도 isJumping의 값이 false로 되지 않아 점프가 불가능해지는 오류가 발생했다. 기존 코드 if (Input.GetKeyDown(KeyCode.Space) && !anim.GetBool("isJumping")) { rigid.AddForce(Vector3.up * jumpPower, ForceMode2D.Impu..
[Unity2D] 5. 광물 랜덤 생성
·
Unity 개발일지/[Unity2D]졸업프로젝트
로그라이크 장르 특성에 맞게 플레이 할 때 마다 광물의 위치도 랜덤하게 조정해야한다. 기존에 작성한 MapGenerator스크립트에 추가했다. (이전 글) https://knhoo.tistory.com/entry/Unity2D-3-%EB%9E%9C%EB%8D%A4-%EB%A7%B5-%EC%83%9D%EC%84%B1%ED%95%98%EA%B8%B0 [Unity2D] 3. 랜덤 맵 생성하기 2023.11.02 맵 빈공간 랜덤 생성 로그라이크라는 장르의 특성에 맞게 매번 플레이를 할 때 마다 맵의 구조가 바뀌는 맵을 구현해야했다. 우선 지하 중간중간에 빈 공간(동굴)을 생성하는 코드를 작 knhoo.tistory.com TileBase GetWeightedRandomTile() { // 각 타일에 대한 확률 ..