본문 바로가기
  • 나는 코딩할 때 눈물을 흘리곤 해...★
유니티

★Unity 유니티 기초★ 오브젝트 이동시키기

by 김팡톤 2023. 8. 11.

안녕기모찌 저의 첫 글이에요

사실 유니티 인터페이스 소개 글도 네이버에 적었었는데, 조만간 여기 옮길 예정이에요 (어쩌라구요 ((((((퍽

 

★ 방법1 - 키보드 방향키로 움직이기 ★

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MyPlayer : MonoBehaviour	// 스크립트 이름 수정
{
    [SerializeField]
    private float moveSpeed;
    private Vector3 moveDirection;

    private void Update()
    {
    moveDirection.x = Input.GetAxisRaw("Horizontal");	//자동지정 함수명
    moveDirection.y = Input.GetAxisRaw("Vertical");	//자동지정 함수명
    moveDirection.z = 0f;

    transform.position += moveSpeed * Time.deltaTime * moveDirection;	//적용
    }
}

 

전체 코드에요.

스크립트에 이걸 전체 복붙하고 오브젝트에 스크립트를 넣으면 돼요!

참고로 MyPlayer 는 저의 스크립트 이름이고, 쓰실때는 이 부분만 바꿔서 쓰시면 됩니다.

 

Horizontal과 Vertical에 대해서는 인터페이스 소개 글에서 다룰 예정이에요! 아래 링크를 클릭하시면 됩니다.

(사실 아직 안 썼음 ㅎㅎ 추가할거임용)

 

★ 방법2 - 마우스로 지정한 곳으로 슈슈슉 움직이기 - Lerp함수 ★

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MyPlayer : MonoBehaviour
{
    [SerializeField]
    private float moveSpeed;
    private Vector3 moveDirection;
    private Vector3 moveTargetPosition;

    private void Update()
       {
        Debug.Log("마우스 현 위치 좌표" + Input.mousePosition);	//그냥 포지션 표기

        if (Input.GetMouseButtonDown(0)) //아무스 좌클릭
        {
            moveTargetPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            moveTargetPosition.z = transform.position.z;
        }

        transform.position = Vector3.Lerp(transform.position, moveTargetPosition, moveSpeed * Time.deltaTime);

    }


}

마우스로 클릭하면 한번에 딱! 나타나도록 이동하는게 아니라,

슝~....하는 무빙 ㅋㅋ 방법이에요

 

이동하는 시간은 1초로 맞춰줘 있어요. (= 짧은 거리는 느리게, 긴 거리는 더 빠르게 움직임)

lerp함수를 이용했기 때문인데, 그 설명은 다른 분들이 잘 해주셨을 거에요. 저는 거기까진 잘 몰루 ㅠ

 

★ 방법3 - 마우스로 클릭, 끌어다 놓기 이동하기 ★

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MyPlayer : MonoBehaviour
{

    private bool isSelect;  //bool = true, false 값을 가짐

    private void Awake()
    {
        isSelect = false;
    }
    private void Update()

    {
        if(isSelect)
        {
            Vector3 newPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            newPos.z = transform.position.z;
            transform.position = newPos;
        }
    }

    private void OnMouseDown()
    {
        Debug.Log("해당 오브젝트가 선택 되었습니다.");	//확인차 작성함
        isSelect = true;
    }

    private void OnMouseUp()
    {
        Debug.Log("해당 오브젝트가 해제 되었습니다.");	//생략가능
        isSelect = false;
    }

}

하지만 이건 그냥 스크립트만 쓰면 되는게 아니에요~!!

오브젝트 선택 -> Add Component -> Box Xollider 2D 추가 (설정 안 건드려도 됨) 해주셔야 쓸 수 있어요

 

★ 방법4 - 캐릭터 컨트롤러를 사용하기 ★

 

이어서 하신다면, 방법 3에서 추가한 Box Xollider 2D를 꼭 삭제 해주세요 (remove)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MyPlayer : MonoBehaviour
{
    [SerializeField]
    private float moveSpeed;
    private Vector3 moveDir;
    private CharacterController charCont;

    private void Awake()
    {
        if (! TryGetComponent<CharacterController>(out charCont))
            Debug.Log("MyPlayer - Awake() - characterController 참조 실패");  //실패했을경우             
    }

    private void Update()
    {
        moveDir.x = Input.GetAxisRaw("Horizontal");
        moveDir.y = Input.GetAxisRaw("Vertical");
        moveDir.z = transform.position.z;

        charCont.Move(moveSpeed * Time.deltaTime * moveDir);
    }

}

오브젝트 선택 -> Add Component -> Character Controller 추가

script 메뉴에서 Speed 값 꼭!!!!!!입력해야함 이거 안해서 30분 동안 질질 짜고 있었음

 

 

 

★ 방법4 - WASD 사용하여 움직이기 (키입력) + 한칸한칸 이동하기 ★

 

이번 방법은 저런거 추가할 필요 없어요

그리고 한칸한칸 그리드 단위로 움직이는데, 스무스하게 하고 싶으시다면 위의 방법들이랑 합치면 되겓져?

저는 귀찮아서 안 했지만, 제 블로그를 보고 성공하셨다면 댓글에 남겨주세요.

명예의 팡톤블로그 회원에 이름 올려드립니다♥

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MyPlayer : MonoBehaviour
{
    float moveDistance = 1f;

    private void Awake()
    {
        transform.position = Vector3.zero;
    }

    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.W))
            transform.position = new Vector3(transform.position.x,
                                             transform.position.y + moveDistance,
                                             transform.position.z);
        if (Input.GetKeyDown(KeyCode.S))
            transform.position = new Vector3(transform.position.x,
                                             transform.position.y - moveDistance,
                                             transform.position.z);
        if (Input.GetKeyDown(KeyCode.A))
            transform.position = new Vector3(transform.position.x - moveDistance,
                                             transform.position.y,
                                             transform.position.z);
        if (Input.GetKeyDown(KeyCode.D))
            transform.position = new Vector3(transform.position.x + moveDistance,
                                             transform.position.y,
                                             transform.position.z);
    }
}

실행하시고 방향키 누르면서 아 왜 안되냐..하..또왜!!!!!!!!!!!!!! 하지 마시고^^(는 나)

wasd 로 움직이세요 ^^ 꼭이욤