728x90
안녕하세요.
오늘은 마우스 클릭으로 오브젝트를 제거하는 예제를 진행하겠습니다.
먼저 제거할 오브젝트를 배치합니다. (저의 경우는 이미지에서 보이는 나무 - Medium Tree 입니다.)
그리고 스크립트를 새로 생성합니다.
ToolHit 라는 스크립트와 TreeCuttable 이라는 스크립트를 생성하겠습니다.
먼저 ToolHit 입니다.
public class ToolHit : MonoBehaviour
{
public virtual void Hit(){
}
}
ToolHit 는 인터페이스 역할을 할 스크립트입니다.
이 파일을 다른 스크립트에서 Hit를 재정의 해서 사용하게 됩니다.
다음은 TreeCuttable 스크립트 입니다.
public class TreeCuttable : ToolHit
{
public override void Hit()
{
Destroy(gameObject);
}
}
ToolHit 스크립트를 상속받아 Hit 발생시 오브젝트를 삭제하게 작성합니다.
그리고 제거할 오브젝트에 TreeCuttable 스크립트를 컴포넌트로 추가합니다.
이제 캐릭터에 마우스 클릭 이벤트를 정의하겠습니다.
먼저, 캐릭터에 ToolsCharacterController라는 새스크립트를 컴포넌트로 생성합니다.
offsetDistance 는 캐릭터로부터 설정한 거리 간격만큼 떨어져 있는 오브젝트를 인식하는 거리값입니다.
sizeOfInteractableArea 는 offset값을 중심점으로 오브젝트를 인식하는 범위를 설정하는 값입니다.
GetMouseButtonDown 은 마우스 버튼을 누른 순간에 발생하는 순간 입니다.
0은 마우스 왼쪽, 1은 마우스 오른쪽, 2는 마우스 휠버튼을 나타냅니다.
//ToolsCharacterController.cs
public class ToolsCharacterController : MonoBehaviour
{
CharacterController2D character;
Rigidbody2D rigid2d;
[SerializeField] float offsetDistance = 1f;
[SerializeField] float sizeOfInteractableArea = 1.2f;
private void Awake(){
character = GetComponent<CharacterController2D>();
rigid2d = GetComponent<Rigidbody2D>();
}
private void Update(){
if(Input.GetMouseButtonDown(0)){
UseTool();
}
}
private void UseTool(){
Vector2 position = rigid2d.position + character.lastMotionVector * offsetDistance; //캐릭터위치, 캐릭터방향, offset
Collider2D[] colliders = Physics2D.OverlapCircleAll(position, sizeOfInteractableArea);
foreach(Collider2D c in colliders){
ToolHit hit = c.GetComponent<ToolHit>();
if(hit != null){
hit.Hit();
break;
}
}
}
}
'C#' 카테고리의 다른 글
[C#][Unity] 점프 샘플 코드 (0) | 2022.11.05 |
---|---|
[C#][Unity] 로그 찍기 (0) | 2022.11.01 |
[C#][Unity] Awake와 Start의 차이 (0) | 2022.10.17 |
[C#][Unity] 2D 오브젝트 화살표로 강조표시 (0) | 2022.10.16 |
[C#][Unity] 2D 캐릭터 이동시 현재방향 저장 (0) | 2022.10.14 |