유니티 목표지점 이동 - yuniti mogpyojijeom idong

NavMeshAgent.destination 프로퍼티를 설정하는 것으로 에이전트에 이동시키고자 하는 포인트까지의 경로를 산출시킬 수 있습니다. 산출이 완료되는 즉시 에이전트는 자동으로 경로를 따라 이동하여 목표에 도달합니다. 다음의 코드는 게임 오브젝트를 이용하여 목표 포인트를 설정하는 간단한 클래스를 사용하며 Start 함수의 destination 프로퍼티에 할당됩니다. 스크립트는 이미 NavMeshAgent 컴포넌트를 에디터로부터 추가하고 설정했다고 간주한다는 점에 유의해야 합니다.

    // MoveDestination.cs
        using UnityEngine;
    
        public class MoveDestination : MonoBehaviour {
       
           public Transform goal;
       
           void Start () {
              NavMeshAgent agent = GetComponent<NavMeshAgent>();
              agent.destination = goal.position; 
           }
        }
    // MoveDestination.js
        var goal: Transform;

        function Start() {
          var agent: NavMeshAgent = GetComponent.<NavMeshAgent>();
          agent.destination = goal.position; 
        }

Vector3 target = new Vector3(10, 1.5f, 0);

void Update()

{

    //1. MoveTowards (단순 등속 이동)

   transform.position = Vector3.MoveTowards(transform.position, target, 1f);

   //2. SmoothDamp (미끄러지듯이 감속 이동) 

   Vector3 velo = Vector3.zero;

   transform.position = Vector3.SmoothDamp(transform.position, target, ref velo, 0.1f);

   //3. Lerp (선형 보간 이동) 

   transform.position = Vector3.Lerp(transform.position, target, 0.05f);

  //4. Slerp (포물선 이동) 

   transform.position = Vector3.Slerp(transform.position, target, 0.05f);

저작자표시

거의 알고리즘 일기장

유니티

1. 유니티 _ 목표지점으로 이동시키기

건우권 2020. 5. 2. 00:20

1. 공하나 만들기 ( create sphere )

유니티 목표지점 이동 - yuniti mogpyojijeom idong

2. c# 스크립트 만들기

유니티 목표지점 이동 - yuniti mogpyojijeom idong

3. c#스크립트 키고 (더블클릭) 밑에 코드 입력

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

public class Move : MonoBehaviour
{
    Vector3 target = new Vector3(8, 1.5f, 0);
    // Update is called once per frame
    void Update()
    {
        ////1. MoveTowards
        //transform.position =
        //        Vector3.MoveTowards(transform.position, target, 1f);

        ////2. SmoothDamp, Vector3.zero는 (0,0,0)임, 마지막 인자를 작게 줄수록 빠르게이동
        //Vector3 velo = Vector3.zero;

        ////ref는 참조 값 받는거임
        //transform.position =
        //        Vector3.SmoothDamp(transform.position, target, ref velo, 1f);

        ////3. Lerp (선형 보간), 마지막 인자를 작게 줄수록 느리게 이동 (smooth와 반대)
        //transform.position =
        //            Vector3.Lerp(transform.position, target, 0.1f);

        //4. Slerp (구면 선형 보간)
        transform.position =
                    Vector3.Slerp(transform.position, target, 0.1f);

    }
}

번외 : 좌표계 종류

유니티 목표지점 이동 - yuniti mogpyojijeom idong
유튜브 골드메탈님의 동영상 캡쳐본

참고

https://www.youtube.com/user/GoldmetalYT

골드메탈

게임 개발 & 그림 그리기 & 게임 플레이 각종 컨텐츠를 방송하는 스트리머 골드메탈 채널입니다. 주 컨텐츠는 게임 개발이며 유니티 엔진을 기반으로 컨텐츠를 진행합니다. - 2019.03.15 구독자 5천명 돌파! 감사합니다. - 2019.12.02 구독자 1만명 돌파! 감사합니다.

www.youtube.com

유니티 목표지점 이동 - yuniti mogpyojijeom idong

[Unity] Step4. 목표 지점으로 이동

유니티 목표지점 이동 - yuniti mogpyojijeom idong
델라2020. 1. 14. 0:07

Vector3 : 클래스에서 제공하는 이동 함수

* Vector 에 포함된 모든 함수는 속도(시간)을 나타내는 매개변수에 Time.deltaTime을 곱해주어야 한다.

등속 이동

MoveTowards : 매개변수는 (현재 위치, 목표 위치, 속도)로 구성, 마지막 매개변수에 비례하여 속도 증가

using UnityEngine; public class NewBehaviourScript : MonoBehaviour { Vector3 target = new Vector3(8, 1.5f, 0); void Update() { transform.position = Vector3.MoveTowards(transform.position, target, 2f*Time.deltaTime); } }

부드러운 감속 이동

SmoothDamp : 매개변수는 (현재 위치, 목표 위치, 참조 속도, 속도)로 구성, 마지막 매개변수에 반비례하여 속도 증가

* ref: 참조 접근 -> 실시간으로 바뀌는 값 적용 가능

using UnityEngine; public class NewBehaviourScript : MonoBehaviour { Vector3 target = new Vector3(8, 1.5f, 0); void Update() { Vector3 velo = Vector3.zero; transform.position = Vector3.SmoothDamp(transform.position, target, ref velo, 0.1f*Time.deltaTime); } }

선형 보간 - SmoothDamp 보다 감속 시간이 김

Lerp : 매개변수는 (현재 위치, 목표 위치, 속도)로 구성, 마지막 매개변수(0~1)에 비례하여 속도 증가

using UnityEngine; public class NewBehaviourScript : MonoBehaviour { Vector3 target = new Vector3(8, 1.5f, 0); void Update() { transform.position = Vector3.Lerp(transform.position, target, 0.05f*Time.deltaTime); } }

구면 선형 보간 - 호를 그리며 이동, 포물선 이동

Slerp : 매개변수는 (현재 위치, 목표 위치, 속도)로 구성, 마지막 매개변수(0~1)에 비례하여 속도 증가

using UnityEngine; public class NewBehaviourScript : MonoBehaviour { Vector3 target = new Vector3(8, 1.5f, 0); void Update() { transform.position = Vector3.Slerp(transform.position, target, 0.05f*Time.deltaTime); } }