ํฝ์ ํ๋ทฐ ์ํ ๊ฒ์์ ๊ฐ๋ฐํ๋ฉด์ ์นด๋ฉ๋ผ ๊ด๋ จํด์ ๋ํญ์ ๊ฒช๊ณ ์์ต๋๋ค.
ํ์ฌ ๊ตฌํํ๋ ค๊ณ ํ๋ ๊ธฐ๋ฅ์ ๋ง์ฐ์ค๋ก ํน์ ์ง์ ์ ์กฐ์คํ๋ฉด ํด๋น ๋ฐฉํฅ์ผ๋ก ์นด๋ฉ๋ผ๋ฅผ ์ด๋์ํด์ผ๋ก ์กฐ์ค ๋ฐฉํฅ์ผ๋ก ์์ผ๋ฅผ ๋ํ ์ ์๋ ๊ธฐ๋ฅ์ ๋๋ค.
๊ทธ๋ฐ๋ฐ ๋ฌธ์ ์ ์ 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>();
ย ย }
}
LateUpdate๋ง๊ณ ๊ทธ๋ฅ Update๋ก ํด๋ฐ
Update๋ก ๋ฐ๊ฟจ๋๋ฐ๋ ๊ฐ์ ํ์์ด ๋ฐ์ํ์์ต๋๋ค
์๋ FixedUpdate()๋ก ํด๋ด
Fixed๋ ์์ ์ ํด๋ดค๋๋ฐ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค ใ
smoothPosition = Vector3.Lerp(this.transform.position, desiredPosition, smoothCameraSpeed); this.transform.position = smoothPosition;
๋ณด๊ฐ์ ์ด์ ์๋ํด๋ดค๋๋ฐ ์๋์์ต๋๋ค ใ
FixedUpdate์์์ ์๋ํจ?
FixedUpdate์ ํด๋ณธ ๊ธฐ์ต์ ์์ด์ ์๋ํด๋ดค๋๋ฐ ๋๊ฐ์ ๊ฒฐ๊ณผ์ ๋๋ค
๋๋ฒ๊น ๋ชจ๋์์ 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; }๋ง์ฐ์ค๊ฐ ๋ฉ๋ฆฌ ์์๋ ์ฌ๊ธฐ ์ดํ ์์ค ์์ชฝ์ ์๋ค๊ฐ๋ค ํ๋ ํ์ธ๊ฐ๋ฅ?
๋๋ฒ๊น ๋ชจ๋๋ฅผ ์ฌ์ฉํด๋ณธ ์ ์ด ์์ด์ ์ด๋ป๊ฒ ํ ์ง๋ ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค... ๋ค๋ง else๋ฌธ์ ์ฃผ์์ฒ๋ฆฌํ๊ณ ํด๋ดค๋๋ฐ๋ ๋๊ฐ์ ํ์์ด ๋ฐ์ํ์์ต๋๋ค
๊ทธ๋ผ ์ฝ์์ Debug.log ๋ฌธ ๋ฃ์ด์ ์ด๋ ํ๋ ์์ ์ด๋ ์ฝ๋๊ฐ ์คํ๋๊ณ ์๋์ง ํ์ธํด๋ด. ์ผ๋จ ๋๋ ๋จ๋ฆฌ๋ ์ฝ๋๊ฐ ์ด๋์ธ์ง, ํ๋๋ง์ ๋ฌธ์ ์ธ์ง ์๋ ์๋ค๋ฆฌ๊ฐ๋ค๋ฆฌ ํ๋๊ฑด์ง ๋ด์ผ ํ ๋ฏ. ๋ด๊ฐ ๋ด๊ณต์ด ์์ด์ ํ๋ฐฉ์ ๋ฌธ์ ํด๊ฒฐ ๋ชปํด์ฃผ๋ค ใ ใ
๋๊ธ์ ๋ฌ์์ฃผ์ ๊ฒ๋ง์ผ๋ก๋ ์ ๋ง ๊ฐ์ฌ๋๋ฆฝ๋๋ค ใ ใ Debug.Log๋ก ํ์ธํด๋ณธ ๊ฒฐ๊ณผ, if else๊ฐ ๋ฒ๊ฐ์๊ฐ๋ฉด์ ๋์ค๋ ๊ฒ์ ์๋ ๊ฒ์ผ๋ก ํ์ธ๋์์ต๋๋ค.
๊ทธ๋ผ ์ด๋ ์ฝ๋์์ ์นด๋ฉ๋ผ ์์น ์ค์ ํ๊ณ ์์?
์์ ์ฌ๋ฆฐ ์ฝ๋ ๋ง๊ณ ๋ ์นด๋ฉ๋ผ ์ด๋ ๊ด๋ จํด์ ๊ฑด๋๋ฆฐ ๊ฒ์ ์์ต๋๋ค
์ ์ ์ฝ๋๊ฐ ์ด๋ ํ์ด๋ฐ์ ์ด๋ ์ค์ด ๋์๊ฐ๊ณ ์๋์ง ํจ ๋ด๋ด์ผ ํ ๋ฏ. ๋ง์ผ ๋ด๋ฐ์ ์นด๋ฉ๋ผ ๊ฑด๋๋ฆฐ๊ฑฐ ์ง์ง๋ก ์๋ค๋ฉด ์ ์์์ ๋ญ๊ฐ ๋ฌธ์ ์ธ์ง ํจ ๋ด๋ด. ๋๋ ๋จ๋ฆฌ๊ฒ ํ๋ ์ฝ๋๊ฐ ๋ญ์ง ํน์ ํด์, ๊ทธ๊ฑฐ๋ฅผ ๋ค๋ฅธ ์์ผ๋ก ํจ ๋ฐ๊ฟ๋ด์ ๊ทธ๋๋ ๋๋ ๋จ๋ฆฌ๋์ง ํจ ๋ด๋ณด์ .
๊ทธ๋ฐ๋ฐ pixel perfect camera๋ฅผ ์ฌ์ฉํ์ง ์์ ๋๋ ๋๋ ๋จ๋ฆฌ๋ ํ์์ด ์์ต๋๋ค ์๋ง pixel perfect camera ๋ด๋ถ์ ๋ฌธ์ ์๋๊น์?
์ฝ๋ ๋ฌธ์ ๊ฐ ์๋๋ชจ์์ด๋ค, ๊ตฌ๊ธ์ ๊ฒ์ํด ๋ณด๋๊น ๊ฝค ๋ง์ ์ฌ๋๋ค์ด ๊ฐ์ ๋ฌธ์ ๋ฅผ ๊ฒฝํํ๋ ๋ชจ์
https://www.google.com/search?q=pixel+perfect+camera+unity+jitter&sxsrf=AOaemvL3Hw1bzN9IGS0cm-YmmxkSZi0w-w%3A1635589741960&ei=bR59YZmNOtupoATimKnADw&oq=pixel+perfect+camera+unity+jitter&gs_lcp=Cgdnd3Mtd2l6EAMyBggAEBYQHjoHCCMQsAMQJzoHCAAQRxCwA0oECEEYAFDOGVjNImDVI2gCcAJ4AIABWogBsgOSAQE1mAEAoAEByAEJwAEB&sclient=gws-wiz&ved=0ahUKEwjZ98TM9vHzAhXbFIgK
pixel perfect camera jitter ๋ผ๊ณ ๊ฒ์ํด๋ณด์
snap ๋ญ์๊ธฐ ๋ฌธ์ ์๋?
์นด๋ฉ๋ผ๋ฌด๋ธ๊ฐ ์ํ๋ฐ ํ๋ ๋๋ถ์ด์๋๊ฑฐ ์๋?
๋ 2d๋ฅผ ๋ง๋ค์ด๋ณธ์ ์ด ์์ด์ ๊ทธ๋ฅ ์์์ธ๋ฐ ํฝ์ ํผํํธ ์นด๋ฉ๋ผ๋ ์๋ ํด์๋์ ์ ๋ฐฐ์๋ก ๊ณ ์ ์ํค๊ธฐ ์ํด ๋ณด๊ฐํ๋ฉฐ ์์ง์ด๊ณ ์๋๋ฐ ์บ๋ฆญํฐ๋ ๊ทธ๋ฅ ํ์ฌ ํด์๋์์ ํ๋ฒํ๊ฒ ์ด๋์ํค๊ณ ์๋๊ฒ ์๋? ์นด๋ฉ๋ผ์ ์บ๋ฆญํฐ ๋ ๋ค ์ ์์ขํ์์ ํด์๋์ ๋น๋ก์ ๋ง๊ฒ ์์ง์ฌ์ผ ๋๋๋ฐ ์บ๋ฆญํฐ๊ฐ ๊ทธ๊ฑธ ๋ฌด์ํ๊ณ ์์ง์ด๋๊ฒ ์๋๊ฐ ์ถ์