반응형
2D에서 3D 콘텐츠를 드래그 앤 드랍하는 기능을 따로 만들어 보았다.
오브젝트를 드래그 & 드롭하는 기능
Scene을 생성하고 Object를 생성한다.
Hierachy 창에서 빈 게임오브젝트를 생성하여 DragAndDropController라는 이름으로 생성해준다.
이름은 각자 간단하게 작성하면 된다.
Project 창에서 CharacterController.cs 파일을 생성하여 준다.
소스코드
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CharacterController : MonoBehaviour
{
private float dist; // Distance
private bool dragging = false; //Drag 모션 Flag
private Vector3 offset; //오프셋
private Transform toDrag; //현재 위치 저장 변수
public GameObject hitObj; // 감지 오브젝트
void Update()
{
Vector3 vec; // 지역 변수 Vector3
if(Input.touchCount != 1) // 터치된 손가락의 수가 1가 아니면
{
dragging = false; // Drag 모션 false
return;
}
Touch touch = Input.touches[0]; //입력된 Touch 수
Vector3 pos = touch.position; // 터치된 위치 값 저장
if (touch.phase == TouchPhase.Began) // 터치 상태가 입력이 되었을때,
{
Ray ray = Camera.main.ScreenPointToRay(pos); // 스크린에 터치된 위치에 광선을 쏜다!
RaycastHit hit; // Hit 지역 변수
if (Physics.Raycast(ray, out hit)) // Hit 된 오브젝트
{
if (hit.collider.gameObject.tag == "Character") // Character 태그가 붙어있는 오브젝트일때.
{
hitObj = hit.transform.gameObject; // hitObj 변수에 hit 된 오브젝트를 담는다.
toDrag = hitObj.transform; // 현재 위치 저장
hitObj.GetComponent<Animator>().SetBool("Attack", true); // 캐릭터의 애니메이션 실행
dist = hit.transform.position.z - Camera.main.transform.position.z; //Z 축에 대한 위치 계산
vec = new Vector3(pos.x, pos.y, dist);
vec = Camera.main.ScreenToWorldPoint(vec);
offset = toDrag.position - vec; 현재 위치를 오프셋에 저장
dragging = true; // Drag 모드가 참
}
}
}
if(dragging && touch.phase == TouchPhase.Moved ) // 터치 상태가 움직일 때,
{
vec = new Vector3(Input.mousePosition.x, Input.mousePosition.y,dist);
vec = Camera.main.ScreenToWorldPoint(vec);
toDrag.position = vec + offset;
}
if(dragging && (touch.phase == TouchPhase.Ended || touch.phase == TouchPhase.Canceled)) // 터치 상태가 취소되거나, 끝났을 때
{
if (dragging == true) // 현재 상태가 Drag 상태이면
{
hitObj.GetComponent<Animator>().SetBool("Jump", true); // 캐릭터 애니메이션 실행
}
dragging = false; // Drag 는 false로 바꾼다.
hitObj = null; // Hit 되었던 오브젝트 변수를 비워준다.
}
}
}
CharcterController.cs 파일을 DragAndDropController 오브젝트 컴포넌트에 삽입하여 준다.
모바일에서 확인하려면 File > BuildSettings > Platform 을 Android & IOS로 변경하여 빌드하여준다.
실행 화면
728x90
반응형
'Unity' 카테고리의 다른 글
[Unity] CountDown(카운트다운) 타이머를 만들어보자. (0) | 2023.03.03 |
---|---|
[Unity] NavigationSystem #1 - 캐릭터의 목적지 이동 (0) | 2022.10.13 |
[Unity] Addressable 시스템 활용 (0) | 2022.08.21 |
[Unity] 싱글톤 클래스 (0) | 2022.06.28 |
[Unity] 다국어 지원 (0) | 2022.06.23 |