유니티로 게임개발하다가 부드럽게 목표지점까지 가는 방법을 구현해 봤어요. Cocos2dx를 사용할때는 그냥 MoveTo() 이 함수를 호출하면 그냥 끝났는데, 유니티로 구현할려니까 코딩해야되는 부분이 조금 더 많네요. 그래도 생각보다 간단하게 구현되니까 한번 테스트 해 보세요.
먼저 SmoothDamp 를 사용해서 구현해본 물체를 부드럽게 움직이는 동영상입니다.
위와 같이 물체를 움직이는 방법은 아래처럼 코딩해 주시면됩니다. 저는 Coin 이라고 C# 스크립트 파일을 만들어서 아래처럼 구현해 줬습니다. 그리고 움직이고 싶은 물체에 Coin 스크립트를 넣어주면 끝! 부드럽게 움직이는 핵심코드는 아래 파란색으로 마킹해 뒀습니다. 필요한 부분만 보세요^^
using UnityEngine;
public class Coin : MonoBehaviour
{
private bool isActivate = false;
public Vector3 target;
public float smoothTime = 10.0f;
private float yVelocity = 2.0f;
private float xVelocity = 2.0f;
private void FixedUpdate()
{
if(isActivate)
{
float newPositionX = Mathf.SmoothDamp(transform.position.x, target.x, ref xVelocity, smoothTime);
float newPositionY = Mathf.SmoothDamp(transform.position.y, target.y, ref yVelocity, smoothTime);
transform.position = new Vector3(newPositionX, newPositionY, transform.position.z);
}
}
public void SetTarget(Vector3 location)
{
isActivate = true;
target = location;
}
private void OnTriggerEnter2D(Collider2D collision)
{
if(collision.gameObject.CompareTag("Player"))
Destroy(gameObject);
}
}
여기서 잠깐? 마우스 클릭한 곳에 물체 생성은 어떻게 하나요?
코인생성 및 목표지점을 간단하게 구현해 봤습니다. 코인 생성은 마우스로 클릭한 지점에 코인을 생성하고 SetTarget(Vector3 location) 함수를 호출해서 목표지점을 설정해주면됩니다. 그러면 현재 코인이 생성된 위치로부터 목표지점으로 코인이 부드럽게 움직이는 것을 확인 하실 수 있을껍니다.
void Update () {
// 마우스크릭한 위치에 생성
if (Input.GetMouseButtonDown(0))
DoAction(Input.mousePosition);
}
void DoAction(Vector2 location)
{
// 화면좌표를 실제좌표로 변환
Vector2 startPos = Camera.main.ScreenToWorldPoint(location);
// 코인객체생성
GameObject coin = Instantiate(fabCoin);
coin.transform.position = startPos;
// 코인목표지점 설정
Vector3 pos = GameObject.Find("Player").transform.position;
coin.GetComponent<Coin>().SetTarget(pos);
}
자 이렇게 하면 물체를 현재지점에서 목표지점으로 부드럽게 움직일 수 있습니다.
'개발 > 정보' 카테고리의 다른 글
유니티에 Revision Control Diff/Merge 설정하는 방법 (0) | 2017.07.28 |
---|---|
유니티로 튜토리얼 화면 구현해 보기 (0) | 2017.07.23 |
스카이포스 리로디드 (Sky Force Reloaded) 근황 (0) | 2017.07.13 |
풋볼데이 무과금 첼시 근황 (오랜만에 접속해봤네요) (0) | 2017.07.12 |
Unity load next scene c# script in active scene (0) | 2017.07.07 |
유니티에서 다음씬 (Next Scene) 로드하기 (0) | 2017.07.06 |
유니티 물체가 완전히 안에 있는지 알아보는 방법 (Fully-in case) (0) | 2017.07.05 |
유니티에 Magica Voxel 적용하는 방법 (0) | 2017.07.05 |
최근댓글