티스토리 뷰
오늘은 Unity에서 가장 많이 사용되는 오브젝트 이동과 관련된 내용을 정리해 보겠다.
Unity에서 물체를 이동시키는 방법은 여러가지 있겠지만 크게 3가지 종류로 나뉠수 있을 것 같다.
- 키보드 방향키로 이동
- 마우스 클릭한 곳으로 이동
- 마우스로 드래그
각각의 이동을 구현하기 위해 필요한 내용들을 말로 풀어보았다
키보드로 이동 | 1. 키마다 방향을 할당한다. 2. 특정 키가 눌러졌을때, 정해진 방향으로 object의 위치를 이동 |
클릭한 곳으로 이동 | 1. 클릭한 때, 클릭한 곳의 위치를 안다 2. 클릭한 위치로 object를 이동시킨다. |
드래그 | 1. 클릭시 1)클릭한 좌표와 2)오브젝트 중앙 자표와의 차이 (offset)를 확인 2. 드래그할때 오브젝트의 위치를 → 클릭좌표 + offset 으로 이동 |
각 이동의 구현과 관련된 함수 및 변수를 적어 보았다.
키보드 이동하기
[3d인 경우]
조작정보 받기 | 위치정보 확인 및 변수선언 | 이동 |
GetAxis("Horizontal") GetAxis("Vertical") GetKeyButtonDown() GetKey() |
v = Input.GetAxisRaw("Vertical"); h = Input.GetAxisRaw("Horizontal"); |
float speed = 숫자; transform.position += new Vector3(h, 0, v) * Speed * Time.deltaTime; |
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerMove : MonoBehaviour
{
float h;
float v;
float speed = 2f;
void FixedUpdate()
{
v = Input.GetAxisRaw("Vertical"); // 위아래에 해당하는 키보드가 눌릴때 숫자(-1,0,1) 반환
h = Input.GetAxisRaw("Horizontal"); // 왼쪽오른쪽에 해당하는 키보드가 눌릴때 숫자(-1,0,1) 반환
//object의 위치를 눌린 입력받은 값에 따라 이동
transform.position += new Vector3(h, 0f, v) * speed * Time.deltaTime;
}
}
[2d인 경우]
조작정보 받기 | 위치정보 확인 및 변수선언 | 이동 |
GetAxis("Horizontal") GetAxis("Vertical") GetKeyButtonDown() GetKey() |
Vector2 move = New Vector2(); move.x = Input.GetAxisRaw("Vertical"); move.y = Input.GetAxisRaw("Horizontal"); move.Normalize(); // |
Rigidbody2D rb; float speed = 숫자; rb = Get Component<Rigidbody2D>(); } rb.velocity = move * speed } |
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerMove : MonoBehaviour
{
float speed = 2f;
Vector2 move = new Vector2(); // 새로운 Vector2 객체 생성
Rigidbody2D rd2D; // Rigidbody2D 객체 생성
void start(){
rd2D = GetComponent<Rigidbody2D>()// rd2D의 현재 스크립트가 삽입된 object의 Rigidbody2D 불러오기
}
void FixedUpdate()
{
move.x = Input.GetAxisRaw("Horizontal");
move.y = Input.GetAxisRaw("Vertical");
move.Normalize();// 이동방향에 상관없이 일정한 속도 유지
rd2D.velocity = move * speed;
}
}
클릭한 곳으로 이동하기
조작정보 받기 | 위치정보확인 | 이동 |
OnMouseDown() | cam.ScreenToWorldPoint(Input.mousPosition); | transform.position = Vector3.MoveToward (시작점, 도착점, 속도) |
[2D에서 이동할때]
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MoveToClick : MonoBehavior {
private Camera cam;
[SerializeField] private speed = 10f;
void Awake(){
//카메라를 이렇게 따로 지정해주는 이유 = 찾아놓고 계속 쓰기 위해(코드가 가벼워짐)
cam = Camera.main;
}
#클릭 했을때
void OnMouseDown(){
GetMousePos()
//오브젝트 이동
transform.position = Vector3.MoveTowards(transform.position,
GetMousePos(),
speed*Time.deltaTime)
}
#마우스의 위치값 가져오기
Vector3 GetMousePos(){
var mousePos = cam.ScreenToWorldPoint(Input.mousPosition);
mousePos.z = 0;
return mousePos; // 마우스 위치값 반환
}
}
3d
드래그&드롭 (2d)
자세한 내용은 이전에 만들어 놓은 포스터를 확인
https://justdoitman.tistory.com/207
조작정보 받기 | 위치정보확인 | 이동 |
OnMouseDown() OnMouseDrag() |
cam.ScreenToWorldPoint(Input.mousPosition); Vector3 offset = object.position - mouse.position |
transform.position = mousePos; |
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;
//object의 위치를 마우스 위치에 중앙좌표 차이만큼 더한곳으로 옮기기
}
Vector3 GetMousePos(){
var mousePos = cam.ScreenToWorldPoint(Input.mousPosition);
// 마우스의 위치값 가져오기
mousePos.z = 0;
return mousePos; // 마우스 위치값 반환
}
}
참고사이트
https://www.youtube.com/watch?v=cvI25BDJPAA
728x90
'IT > UNITY(C#)' 카테고리의 다른 글
(C#) 비전공자 Unity_너무 당연해서 넘어갔지만 궁금한 녀석 : Monobehavior (0) | 2022.07.15 |
---|---|
(C#) UNITY_게임 오브젝트 옮기기(드래그앤드랍) (0) | 2022.07.14 |
[Unity] 게임플레이 화면에서 갑자기 줌인 되는 경우 (0) | 2022.07.14 |
Unity_간단한 UI만들기_소지금, 상태바, HP, MP (TextMeshPro - Text, Slider 이용하기) (0) | 2022.07.13 |
비전공자가 배우는 C# - 자료형 & 형변환 (0) | 2020.08.06 |
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 마케팅
- 크롤링
- 주식
- PYTHON
- 파이썬
- 랜덤맵
- 일자별
- 주식투자
- Anet
- 스타트업
- ET5X
- beautifulsoup
- IT기초
- 머신러닝
- 프로그래머스
- Unity
- 비전공자
- requests
- 알고리즘
- It
- 터틀트레이딩
- 강화학습
- C#
- json
- 심리학
- 유니티
- 가격데이터
- 사진크롤링
- 시스템투자
- 경영학
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함