Unity 개발일지/[Unity2D]졸업프로젝트
[Unity2D] 15. 폭탄 아이템 추가
knhoo
2024. 2. 8. 01:43
728x90
204.01.08 폭탄 추가
이번에는 사용하면 날라가고
주위의 타일들을 파괴하는 '폭탄'아이템을 구현하였다.
기존의 땅을 캐는 방식을 응용한 방법이다.
우선 폭탄 프리팹을 새로 만들어준 뒤
bomb스크립트도 새로 만들었다.
Bomb
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Bomb : MonoBehaviour
{
public GameObject explosionAreaGO;
public LayerMask whatisPlatform;
public CircleCollider2D circleCollider2D;
void Start()
{
bombJump();
explosionAreaGO.SetActive(false);
StartCoroutine(Boooom());
}
IEnumerator Boooom()
{
yield return new WaitForSeconds(3f);
explosionAreaGO.SetActive(true);
DestroyArea();
Destroy(this.gameObject, 0.05f);
}
void bombJump()
{
Rigidbody2D rigidBody = GetComponent<Rigidbody2D>();
Vector3 MousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
Vector2 distance = MousePosition - transform.position;
Vector2 velocity;
//마우스 위치가 플레이어보다 왼쪽에 있으면 왼쪽으로,
//오른쪽에 있으면 오른쪽으로 폭탄이 던져진다.
if (distance.x > 0)
velocity = Vector2.right * 3f;
else
velocity = Vector2.left * 3f;
Vector2 jumpVelocity = Vector2.up * 4f;
rigidBody.AddForce(velocity, ForceMode2D.Impulse);
rigidBody.AddForce(jumpVelocity,ForceMode2D.Impulse);
}
void DestroyArea()
{
int radiusInt = Mathf.RoundToInt(circleCollider2D.radius);
//for문을 사용해서 circle콜라이더의 범위만큼 타일을 삭제한다.
for(int i= -radiusInt; i <= radiusInt; i++)
{
for(int j = -radiusInt; j <= radiusInt; j++)
{
Vector3 checkCellPos = new Vector3(transform.position.x + i, transform.position.y + j, 0);
float distance = Vector2.Distance(transform.position, checkCellPos) - 0.001f;
if(distance <= radiusInt)
{
Collider2D overCollider2d = Physics2D.OverlapCircle(checkCellPos, 0.01f, whatisPlatform);
if(overCollider2d != null)
{
overCollider2d.transform.GetComponent<bricks>().BombBricks(checkCellPos);
}
}
}
}
}
}
bricks
public void BombBricks(Vector3 pos)
{
cellPosition = tilemap.WorldToCell(pos);
TileBase t = tilemap.GetTile(cellPosition);
player.GetComponent<Player>().addMineral(t);
tilemap.SetTile(cellPosition, null);
}
해당 위치의 타일을 없애주는 코드
MouseInput
public GameObject bomb;//폭탄 프리팹을 넣어준다.
//...
//마우스 우클릭으로 폭탄을 생성
if (Input.GetMouseButtonDown(1))
{
Instantiate(bomb, transform.position, transform.rotation);
}
마우스 클릭을 통해 폭탄 프리팹을 생성한다.
이후에 인벤토리 코드와 연동하여
폭탄 아이템 획득 및 사용 시
인벤토리에서의 소지 개수가 증가/감소하도록 해주었다.
결과 화면
에셋 : 다른 팀원이 제작
728x90