¹è°æ ½ºÅ©·Ñ

2D¿¡¼­ Ⱦ ½ºÅ©·ÑÀ̳ª Á¾ ½ºÅ©·ÑÀÌ ¸¹ÀÌ  »ç¿ëµÈ´Ù.
Ä«¸Þ¶ó¸¦ ¿òÁ÷ÀÌ¸é ¹è°æÀÌ ½ºÅ©·Ñ µÈ´Ù.

2d Toolkit¿¡¼­ tk2dTileMap_demo°¡ ½ºÅ©·Ñ ¿¹Á¦ÀÌ´Ù.

tk2dCameraÀÇ tk2dTileMapDemoFollowCam ½ºÅ©¸³Æ®¸¦ ÂüÁ¶Çϸé Ä«¸Þ¶óÀÇ Á¶ÀÛ¿¡ ´ëÇؼ­ ºÐ¼®ÇÒ ¼ö ÀÖ´Ù.

public class tk2dTileMapDemoFollowCam : MonoBehaviour {

 

    tk2dCamera cam;

    public Transform target;

    public float followSpeed = 1.0f;

 

    public float minZoomSpeed = 20.0f;

    public float maxZoomSpeed = 40.0f;

 

    public float maxZoomFactor = 0.6f;

 

    void Awake() {

        cam = GetComponent<tk2dCamera>();

    }

 

    void FixedUpdate()

    {

        //Ä«¸Þ¶ó À̵¿

        Vector3 start = transform.position;

        Vector3 end = Vector3.MoveTowards(start, target.position, followSpeed * Time.deltaTime);

        end.z = start.z;

        transform.position = end;

 

        //Ä«¸Þ¶ó ZoomFactor

        if (target.rigidbody != null && cam != null) {

            float spd = target.rigidbody.velocity.magnitude;

            float scl = Mathf.Clamp01((spd - minZoomSpeed) / (maxZoomSpeed - minZoomSpeed));

            float targetZoomFactor = Mathf.Lerp(1, maxZoomFactor, scl);

            cam.ZoomFactor = Mathf.MoveTowards(cam.ZoomFactor, targetZoomFactor, 0.2f * Time.deltaTime);

        }

    }

}

targetÀ» ÁöÁ¤Çϸé Ä«¸Þ¶ó°¡ Ÿ°ÙÀ¸·Î À̵¿ÇÑ´Ù.

TransformÀ¸·Î ŸÀÔ¿¡ GameObject¸¦ µå·¡±× Çϸé ÀÚµ¿À¸·Î ¿¬°áµÈ´Ù.
Player °ÔÀÓ¿ÀºêÁ§Æ®¸¦ TargetÀ¸·Î ÁöÁ¤ÇÏ¿´´Ù.


Ä«¸Þ¶óÀÇ ZoomFactor¸¦ ÁÖ¼®Ã³¸®Çϸé Ä«¸Þ¶ó°¡ Zoom in, out µÇ´Â ±â´ÉÀ» ¸·À» ¼ö ÀÕ´Ù.

 

Vector3 Ŭ·¡½ºÀÇ MoveTowards

//Vector3ÀÇ MoveTowards

public static Vector3 MoveTowards (Vector3 current, Vector3 target, float maxDistanceDelta)

{

    Vector3 a = target - current;

    float magnitude = a.magnitude;

    if (magnitude <= maxDistanceDelta || magnitude == 0f)

    {

        return target;

    }

    return current + a / magnitude * maxDistanceDelta;

}

 

MathfÀÇ MoveTowards

//MathfÀÇ MoveTowards

public static float MoveTowards (float current, float target, float maxDelta)

{

    if (Mathf.Abs (target - current) <= maxDelta)

    {

        return target;

    }

    return current + Mathf.Sign (target - current) * maxDelta;

}