본문 바로가기
취미/게임 개발

[Unity] 게임 개발 - 한 점으로 이동시키기

by krapoi 2021. 12. 10.
반응형

이번에 만들어 볼 것은 저번에 만들었던 작은 원들을 한 점에 모이게 하는 것이다.

이게 왜 필요할까 생각할 수 돼있는데 보면 알게 된다.

 

이번에는 이런걸 만들어 볼 거다.

처음에는 자석 기능처럼 만들어 볼까 했는데,

만들어보니까 내가 원하던 그림이 아니어서 그냥 한 점을 정해두고 그 점으로 이동하게 만들었다.

 

 

그러면 세팅을 해보자.

우선 빈 오브젝트든 나처럼 Circle수프 라이드 튼 하나를 만들어 준다.

이런 식으로 하나를 만들어주면 준비는 끝났다.

참고로 이 오브젝트에서 건든 것은 위치뿐이다. 아 태그는 바꿔놓았다.

그러면 이제 스크립트를 보러 가자.

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

public class Potato : MonoBehaviour
{
    public float CreateTime = 0.0f; // 생성되고 난 후 몇초가 지났는지
    public float speed = 0.1f; // 점으로 이동하는 속도
    public float deleteTIme = 10.0f; // 작은 원들을 삭제할 시간
    public float moveTIme = 2.0f; // 작은 원들이 움직이기 시작하는 시간
    public Vector2 vel = Vector2.zero; // Vector2 vel = Vector2(0,0)
    public bool canmove = false; // 움직이는 불값
    public bool candelete = false; // 삭제되는 불값

    public GameObject target; // 이동할 위치 가져올 오브젝트

    private void Awake() // Start여도 상관은 없음
    {
        target = GameObject.FindGameObjectWithTag("MG"); // 게임이 실행되자 마자 Tag로 오브젝트를 target에 넣어줌
    }
    private void Update()
    {
        CreateTime += Time.deltaTime; // 생성되고 난 후의 시간을 더해줌
        if (CreateTime >= moveTIme) // 생성된 시간이 움직일 수 있는 시간보다 많아지면 canmove true
            canmove = true;

        if (CreateTime >= deleteTIme) // 생성된 시간이 삭제시간보다 많아지면 candelete true
            candelete = true;

        if (canmove) // canmove = true
            transform.position = Vector2.SmoothDamp(gameObject.transform.position, target.transform.position, ref vel, speed);
        	//이 오브젝트의 위치에 Vector2값을 계속 주어 target.transform.position으로 이동시킴 속도는 speed의 값의 크기로 이동 ref vel은 Vector2값 초기화
        if (candelete) // candelete = true
            Destroy(gameObject); // 이 게임오브젝트 파괴
    }
   
}

음 이번에는 딱히 추가할 설명은 없는 거 같다.

어쨌든 이 스크립트를 이제 저번에 만들어 두었던 작은 원들에게 넣어주면 된다.

아 참고로 작은 원은 프리 펩을 만들어 주어야 한다.

 

아 나처럼 부드럽게 움직이는 걸 원하는 게 아니라면 SmoothDamp를 MoveTo로 바꾼 뒤 vel을 없애주면 된다.

반응형