반응형
이번에 만들어 볼 것은 저번에 만들었던 작은 원들을 한 점에 모이게 하는 것이다.
이게 왜 필요할까 생각할 수 돼있는데 보면 알게 된다.
처음에는 자석 기능처럼 만들어 볼까 했는데,
만들어보니까 내가 원하던 그림이 아니어서 그냥 한 점을 정해두고 그 점으로 이동하게 만들었다.
그러면 세팅을 해보자.
우선 빈 오브젝트든 나처럼 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을 없애주면 된다.
반응형
'취미 > 게임 개발' 카테고리의 다른 글
[Unity] 게임 개발 - 드래그 앤 드롭 (4) | 2021.12.20 |
---|---|
[Unity] 게임 개발 - 클릭 이벤트 만들기 (0) | 2021.12.09 |
Unity 2D 로그라이크 게임만들기(적 Ai) #3 (1) | 2021.08.28 |
Unity 2D 로그라이크 게임만들기(적과 바닥) #2 (0) | 2021.08.27 |
Visual studio에서 Unity 자동완성이 안될때 (1) | 2021.08.27 |