이번에는 마우스 클릭으로 유닛을 이동시켜보도록 하겠습니다.
실행 환경
개발 툴: Unity 2019.4.21f1
IDE : vscode
먼저 바닥과 유닛을 만들어보겠습니다.
작업전에 오브젝트 위치를 초기화 시키겠습니다.
Hierarchy 창에서 방금 만든 Plane 과 Capsule 을 ctrl 을 눌른 상태에서 클릭해서 동시에 선택한 다음
오른쪽 Inspector 창에서 Transform 을 우클릭해서 나온 메뉴의 Reset 을 클릭해주세요.
클릭하시면 Transform 아래 숫자들이 (0,0,0) 으로 초기화 된것을 볼 수 있습니다.
다음으로 생성한 캡슐을 움직이기 위해서 캡슐에 캐릭터 컨트롤러를 추가해보겠습니다.
캡슐 클릭 후 Inspector 에서 가장 밑으로 이동하시면 Add Component 가 있습니다.
클릭하시고 'character controller'를 입력해주세요.
클릭하시면 캐릭터 컨트롤러가 추가된걸 볼 수 있습니다.
다음으로 유닛 이동 로직을 짜기 위해서 스크립트를 만들어보도록 하겠습니다.
Project 폴더 창에서 Assets 파일을 우클릭 후 새폴더를 생성하고 이름을 Scripts 라고 지어주세요.
그리고 Scripts 폴더 안에 새로운 스크립트를 만들어줍니다.
이름은 마음대로 지어주세요. 저는 MyUnit 이라고 하겠습니다.
더블 클릭해서 스크립트를 열어주세요
코드를 아래처럼 만들어주세요
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MyUnit : MonoBehaviour
{
public float speed; // 캐릭터 움직임 스피드
public CharacterController characterController; // 캐릭터 컨트롤러
public Vector3 movePoint; // 이동 위치 저장
public Camera mainCamera; // 메인 카메라
void Start()
{
speed = 4.0f;
mainCamera = Camera.main;
characterController = GetComponent<CharacterController>();
}
void Update()
{
// 좌클릭 이벤트가 들어왔다면
if (Input.GetMouseButtonUp(0))
{
// 카메라에서 레이저를 쏜다.
Ray ray = mainCamera.ScreenPointToRay(Input.mousePosition);
// Scence 에서 카메라에서 나오는 레이저 눈으로 확인하기
Debug.DrawRay(ray.origin, ray.direction * 10f, Color.red, 1f);
// 레이저가 뭔가에 맞았다면
if (Physics.Raycast(ray, out RaycastHit raycastHit))
{
// 맞은 위치를 목적지로 저장
movePoint = raycastHit.point;
Debug.Log("movePoint : " + movePoint.ToString());
Debug.Log("맞은 객체 : " + raycastHit.transform.name);
}
}
// 목적지까지 거리가 0.1f 보다 멀다면
if (Vector3.Distance(transform.position, movePoint) > 0.1f)
{
// 이동
Move();
}
}
void Move()
{
// thisUpdatePoint 는 이번 업데이트(프레임) 에서 이동할 포인트를 담는 변수다.
// 이동할 방향(이동할 곳-현재 위치) 곱하기 속도를 해서 이동할 위치값을 계산한다.
Vector3 thisUpdatePoint = (movePoint - transform.position).normalized * speed;
// characterController 는 캐릭터 이동에 사용하는 컴포넌트다.
// simpleMove 는 자동으로 중력을 계산해서 이동시켜주는 메소드다.
// 값으로 이동할 포인트를 전달해주면 된다.
characterController.SimpleMove(thisUpdatePoint);
}
}
스틱코드를 사용하신다면 아래 링크로 이동해서 즐겨찾기 하신 후 'mouseMove' 자동완성을 사용해주세요.
https://stickode.com/detail.html?no=2644
ctrl+s 를 눌러 파일을 저장하시고 다시 Unity 로 돌아와서 Hierarchy 의 캡슐을 클릭해주세요.
그리고 Inspector 의 AddComponent 를 누르고 MyUnit( 위에서 만든 스크립트 ) 를 추가해주세요.
추가된 MyUnit 스크립트 컴포넌트를 보시면 여러 값들이 보이실텐데요.
스크립트에서 public 으로 선언한 변수들이 보이는 것을 볼 수 있습니다.
여기서도 초기 값들을 설정해줄 수 있지만 현재는 제가 스크립트가 실행될 때 값을 설정하도록 해두었기 때문에 따로 값을 설정하실 필요 없습니다.
이제 가장 위쪽 ▶ 버튼을 눌러 게임을 실행시킨 다음 게임 화면에 바닥을 클릭해주세요
캡슐이 이동하는 것을 볼 수 있습니다.
메인 카메라를 기준으로 레이저를 쏴서 동작하기 때문에 카메라를 위로 이동시키면 좀 더 정확히 이동시키실 수 있습니다.
'C#' 카테고리의 다른 글
[C#][Unity] 캐릭터 회전 구현하기 (0) | 2022.01.04 |
---|---|
[C#][Unity] 유닛 이동에 맞춰 카메라 따라가게 만들기 (0) | 2021.12.24 |
[C#][Unity] Http 통신 하기!! (0) | 2021.10.04 |
[C#][Unity]시점을 이동하는 카메라! (0) | 2021.09.27 |
[C#][Unity]체력바 만들기! (0) | 2021.09.17 |