티스토리 뷰
오늘은 Unity에서 게임 오브젝트를 클릭 해서 옮길 수 있는 Drag&Drop에 대해서 배워볼 예정이다
1. OnMouseDrag를 이용해 기본적인 Drag & Drop 기능 구현
기본적인 기능 구현에 앞서서, object에 'collider2D' component를 넣어두자
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class DragAndDrop : MonoBehavior {
private Camera cam;
void Awake(){
cam = Camera.main; // 이렇게 카메라를 지정해주는 이유는, 함수 실행마다 찾아가는 수고를 덜어 주기 위해!
}
#드래그를 하는 동안
void OnMouseDrag(){
transfrom.position = GetMousePos(); // object의 위치를 마우스 위치로 이동
}
Vector3 GetMousePos(){
#아주 중요한 부분
var mousePos = cam.ScreenToWorldPoint(Input.mousPosition);
// 현재 보여지는 화면안에서 마우스의 좌표값을 가져와 mousePos에 할당
mousePos.z = 0; // 2D이기 때문에 z값 0으로
return mousePos; // 마우스의 현제 좌표값은 반환
}
}
이렇게 되면 기본적인 이동은 가능해진다.
하지만 한가지 문제점이 발생!!!
바로 object의 정가운데를 클릭하지 않는 이상,
드래그를 하기 위해 클릭함과 동시에 object가 마우스 위치로 조금씩 움직여 버리게 된다.
그래서 ↓↓↓
2. 오브젝트 바깥을 클릭했을때, 움직이는 것 수정 (어딜 클릭해도 가만이 있게끔 하기)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class DragAndDrop : MonoBehavior {
private Camera cam;
private Vector3 dragOffset; // 클릭했을때, object의 중앙좌표와과 클릭한 좌표사이의 차이
void Awake(){
cam = Camera.main;
}
#클릭 했을때
void OnMouseDown(){
dragOffset = transform.position - GetMousePos();
//object의 중앙좌표와과 클릭한 좌표사이의 차이값을 구하기
}
#드래그를 하는 동안
void OnMouseDrag(){
transfrom.position = GetMousePos() + dragOffset; //좌표차이를 상쇄해주기
}
Vector3 GetMousePos(){
var mousePos = cam.ScreenToWorldPoint(Input.mousPosition);
mousePos.z = 0;
return mousePos;
}
}
3. 드래그 속도 조절하기
이제 속도를 조절해서 천천히 따라오게끔 해보자
나중에 클릭한 좌표로 오브젝트를 이동시킬때 사용될 수 있을 것 같다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class DragAndDrop : MonoBehavior {
private Camera cam;
private Vector3 dragOffset;
[SerializedField] private float speed = 10f;
// 앞에 [SerializedField]를 붙이면 inspector에서 값을 조절 할 수 있다.
void Awake(){
cam = Camera.main;
}
#클릭 했을때
void OnMouseDown(){
dragOffset = transform.position - GetMousePos();
}
#드래그를 하는 동안
void OnMouseDrag(){
transfrom.position = Vector3.MoveTowards(transform.position,
GetMousePos()+dragOffset,
speed*Time.deltaTime);
}
Vector3 GetMousePos(){
var mousePos = cam.ScreenToWorldPoint(Input.mousPosition);
mousePos.z = 0;
return mousePos;
}
}
Vector3.MoveTowards (현재위치, 목표위치, 속도)
: 어떤 물체를 현재위치에서 목표위치까지 정해진 속도로 이동시킨다.
참고싸이트
728x90
'IT > UNITY(C#)' 카테고리의 다른 글
(C#) 비전공자도 이해하는 C#의 자료형식의 구분 방법_reference type, value type, built-in type, cusotom type (0) | 2022.07.15 |
---|---|
(C#) 비전공자 Unity_너무 당연해서 넘어갔지만 궁금한 녀석 : Monobehavior (0) | 2022.07.15 |
(C#) UNITY_비전공자가 게임 만들기_이동하기, 드래그(drag&drop), 클릭한곳으로 이동 (0) | 2022.07.14 |
[Unity] 게임플레이 화면에서 갑자기 줌인 되는 경우 (0) | 2022.07.14 |
Unity_간단한 UI만들기_소지금, 상태바, HP, MP (TextMeshPro - Text, Slider 이용하기) (0) | 2022.07.13 |
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Unity
- ET5X
- 심리학
- 사진크롤링
- Anet
- 알고리즘
- 스타트업
- IT기초
- 머신러닝
- beautifulsoup
- 파이썬
- 프로그래머스
- It
- json
- requests
- 비전공자
- C#
- 경영학
- 랜덤맵
- 크롤링
- 시스템투자
- 유니티
- 주식투자
- 터틀트레이딩
- 강화학습
- 주식
- 마케팅
- PYTHON
- 일자별
- 가격데이터
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함