ํ”ฝ์…€ ํƒ‘๋ทฐ ์ŠˆํŒ…๊ฒŒ์ž„์„ ๊ฐœ๋ฐœํ•˜๋ฉด์„œ ์นด๋ฉ”๋ผ ๊ด€๋ จํ•ด์„œ ๋‚œํ•ญ์„ ๊ฒช๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.


ํ˜„์žฌ ๊ตฌํ˜„ํ•˜๋ ค๊ณ  ํ•˜๋Š” ๊ธฐ๋Šฅ์€ ๋งˆ์šฐ์Šค๋กœ ํŠน์ • ์ง€์ ์„ ์กฐ์ค€ํ•˜๋ฉด ํ•ด๋‹น ๋ฐฉํ–ฅ์œผ๋กœ ์นด๋ฉ”๋ผ๋ฅผ ์ด๋™์‹œํ‚ด์œผ๋กœ ์กฐ์ค€ ๋ฐฉํ–ฅ์œผ๋กœ ์‹œ์•ผ๋ฅผ ๋„“ํž ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.


๊ทธ๋Ÿฐ๋ฐ ๋ฌธ์ œ์ ์€ pixel perfect camera๋ฅผ ์ด์šฉํ•  ๋•Œ, ์กฐ์ค€์„ ํ•˜๋ฉด ์บ๋ฆญํ„ฐ๊ฐ€ ๋–จ๋ฆฌ๋Š” ํ˜„์ƒ์ด ๋ฐœ์ƒํ•œ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค.


์ œ ์ƒ๊ฐ์—๋Š” pixel perfect camera์˜ pixel ๋ณด์ • ๋ฌธ์ œ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ ๊ฐ™์€๋ฐ... ์ด๊ฑธ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์„์ง€ ๋ง‰๋ง‰ํ•ฉ๋‹ˆ๋‹ค ใ… ใ… 


์•„๋ž˜๋Š” ๋ฌธ์ œ ์˜์ƒ๊ณผ ์นด๋ฉ”๋ผ ์›€์ง์ž„ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค





public class CameraMove : MonoBehaviour

{

ย  ย  public float radius;

ย  ย  public float maxRadius;


ย  ย  public GameObject target;

ย  ย  private Transform targetTransform;

ย  ย  private Transform transform;


ย  ย  private Camera camera;

ย  ย  private Vector2 mousePos;

ย  ย  private Vector2 targetPos;

ย  ย  private Vector3 tempVector;


ย  ย  private float magnitude;

ย  ย ย 

ย  ย  private void Awake()

ย  ย  {

ย  ย  ย  ย  targetTransform = target.GetComponent<Transform>();

ย  ย  ย  ย  transform = GetComponent<Transform>();

ย  ย  ย  ย  camera = GetComponent<Camera>();

ย  ย  ย  ย  setTarget(target);

ย  ย  }

ย  ย  private void LateUpdate()

ย  ย  {

ย  ย  ย  ย  CameraMoving();

ย  ย  }


ย  ย  private void CameraMoving()

ย  ย  {

ย  ย  ย  ย  mousePos = camera.ScreenToWorldPoint(Input.mousePosition);

ย  ย  ย  ย  targetPos = targetTransform.position;


ย  ย  ย  ย  tempVector = mousePos - targetPos;

ย  ย  ย  ย  Vector3 posVector = targetPos; posVector.z = -100;


ย  ย  ย  ย  //๋งˆ์šฐ์Šค๊ฐ€ ๋ฒ”์œ„ ์•ˆ์ด๋ฉด ์นด๋ฉ”๋ผ๊ฐ€ ํ”Œ๋ ˆ์ด์–ด๋ฅผ ๋”ฐ๋ผ๊ฐ„๋‹ค

ย  ย  ย  ย  magnitude = tempVector.magnitude;


ย  ย  ย  ย  if (magnitude < radius)

ย  ย  ย  ย  {

ย  ย  ย  ย  ย  ย  transform.SetPositionAndRotation(posVector ,Quaternion.identity);

ย  ย  ย  ย  }

ย  ย  ย  ย ย 

ย  ย  ย  ย  //๋งˆ์šฐ์Šค๊ฐ€ ๋ฒ”์œ„ ๋ฐ–์ด๋ผ๋ฉด ์นด๋ฉ”๋ผ๊ฐ€ ์กฐ์ค€๋ฐฉํ–ฅ์œผ๋กœ ์•ฝ๊ฐ„ ์ „์ง„ํ•œ๋‹ค

ย  ย  ย  ย  else

ย  ย  ย  ย  {

ย  ย  ย  ย  ย  ย  //๋งˆ์šฐ์Šค๊ฐ€ ๋„ˆ๋ฌด ๋ฉ€๋ฆฌ์žˆ์œผ๋ฉด ๋”์ด์ƒ ์ด๋™ ์•ˆ๋˜๊ฒŒ

ย  ย  ย  ย  ย  ย  if (magnitude > maxRadius)

ย  ย  ย  ย  ย  ย  {

ย  ย  ย  ย  ย  ย  ย  ย  tempVector = (tempVector.normalized * maxRadius * 0.25f) + posVector; tempVector.z = -100;

ย  ย  ย  ย  ย  ย  }


ย  ย  ย  ย  ย  ย  else

ย  ย  ย  ย  ย  ย  {

ย  ย  ย  ย  ย  ย  ย  ย  tempVector = (tempVector.normalized * (magnitude - radius) * 0.25f) + posVector;ย  ย  tempVector.z = -100;

ย  ย  ย  ย  ย  ย  }


ย  ย  ย  ย  ย  ย  transform.SetPositionAndRotation(tempVector, Quaternion.identity);

ย  ย  ย  ย  }



ย  ย  ย  ย  //๊ตฌํ˜„: ๋งต ๋ฐ– ๋ณด์ด์ง€ ์•Š๊ฒŒ


ย  ย  }



ย  ย  private void setTarget(GameObject target)

ย  ย  {

ย  ย  ย  ย  this.target = target;

ย  ย  ย  ย  targetTransform = target.GetComponent<Transform>();

ย  ย  }

}