당신은 주제를 찾고 있습니까 “유니티 카메라 이동 – [unity] 카메라 이동 만들기“? 다음 카테고리의 웹사이트 you.maxfit.vn 에서 귀하의 모든 질문에 답변해 드립니다: https://you.maxfit.vn/blog. 바로 아래에서 답을 찾을 수 있습니다. 작성자 Maker. G 그나 이(가) 작성한 기사에는 조회수 2,604회 및 좋아요 19개 개의 좋아요가 있습니다.
유니티의 하이어라키에서 오브젝트를 더블클릭하거나 Ctrl + F를 누르면 포커싱되는 기능이있다.
유니티 카메라 이동 주제에 대한 동영상 보기
여기에서 이 주제에 대한 비디오를 시청하십시오. 주의 깊게 살펴보고 읽고 있는 내용에 대한 피드백을 제공하세요!
d여기에서 [unity] 카메라 이동 만들기 – 유니티 카메라 이동 주제에 대한 세부정보를 참조하세요
화면을 돌아다니는 카메라를 만들어 봅시다.
유니티 카메라 이동 주제에 대한 자세한 내용은 여기를 참조하세요.
유니티 – 드래그로 카메라 이동(Drag and Move Camera)
유니티 – 드래그로 카메라 이동(Drag and Move Camera). 피로물든딸기 2022. 4. 14. 20:14. 320×100. 반응형. Unity 전체 링크. 메인 카메라에 스크립트를 추가한다.
Source: bloodstrawberry.tistory.com
Date Published: 6/17/2022
View: 3243
메인 카메라 이동 (Unity) – 밸런스 있는 삶
이번 시간에는 메인 카메라를 유니티에서 이동하는 방법에 대해서 이야기하고자 합니다. 0. C# script 만들어주기. 먼저 C# script를 만들어줍니다.
Source: himbopsa.tistory.com
Date Published: 1/3/2022
View: 1392
[Unity] 캐릭터 이동 시 카메라 따라가기 (3인칭) – MayQing Study
캐릭터 이동을 구현하였으니, 이제 카메라가 캐릭터를 따라다닐 수 있도록 구현해봅시다. 이전에 만들었던 Scripts 폴더에 MainCamera_Action이라는 스크립트를 생성 …
Source: mayquartet.tistory.com
Date Published: 3/7/2022
View: 3003
[Unity Tip] 유니티 카메라 이동 제한 (Limit camera movement in …
유니티 버전 : 2020.3.0f1 (LTS). Visual studio 버전 : 2019 Community (16.11.2). 2D에서 마우스로 카메라를 이동시킬 때 카메라의 x, …
Source: dydvn.tistory.com
Date Published: 5/10/2021
View: 5817
[Unity] 유니티 오브젝트를 따라가는 카메라 – 지식공유
바닥(Plane)과 따라갈 오브젝트(Cube)를 생성합니다. 오브젝트(Cube)에 이동관련 스크립트를 추가합니다. 키보드로 이동이 가능하도록 추가합니다 …
Source: scvtwo.tistory.com
Date Published: 11/18/2022
View: 9201
[유니티] 카메라 이동 및 회전 코드 – 저그유저의 프로그래밍
[유니티] 카메라 이동 및 회전 코드. 스타크래프트 좋아하는 사람 2021. 12. 30. 20:22. 카메라에 붙여서 사용할 수 있는 코드입니다. 카메라가 보는 방향으로 이동 할 …Source: zergling.tistory.com
Date Published: 6/5/2022
View: 3683
[Unity3D] 유니티 Lerp로 부드러운 카메라 이동 구현하기 …
[Unity3D] 유니티 Lerp로 부드러운 카메라 이동 구현하기 (오브젝트 추적) 2017/11/09 – [Unity] 유니티 3D Vector의 선형보간 Lerp 정확한 사용법 …Source: iygames.tistory.com
Date Published: 12/29/2022
View: 1909
18. 카메라 이동으로 플레이어 따라가기
유니티 3D기본(Roll A Ball). 18. 카메라 이동으로 플레이어 따라가기 … 플레이어 공이 움직이는 대로 카메라가 따라가려면 플레이어 공의 Position …
Source: bossmonster.tistory.com
Date Published: 5/25/2021
View: 2318
주제와 관련된 이미지 유니티 카메라 이동
주제와 관련된 더 많은 사진을 참조하십시오 [unity] 카메라 이동 만들기. 댓글에서 더 많은 관련 이미지를 보거나 필요한 경우 더 많은 관련 기사를 볼 수 있습니다.
![[unity] 카메라 이동 만들기](https://i.ytimg.com/vi/wKFDvj2ATRg/maxresdefault.jpg)
주제에 대한 기사 평가 유니티 카메라 이동
- Author: Maker. G 그나
- Views: 조회수 2,604회
- Likes: 좋아요 19개
- Date Published: 2019. 6. 4.
- Video Url link: https://www.youtube.com/watch?v=wKFDvj2ATRg
[Unity] 카메라를 특정 위치로 부드럽게 이동시키기 – 오브젝트 Focus
반응형
✔ Unity – 카메라 오브젝트 포커싱 (Object Focus)
부드럽게 이동시키기, 오브젝트 줌 인/아웃 하기
유니티의 하이어라키에서 오브젝트를 더블클릭하거나 Ctrl + F를 누르면 포커싱되는 기능이있다.
API로 제공해주면 참 좋겠지만 없는것 같아서 스크립트로 제작했다. ( API있거나 생기면 공유좀 ㅠ_ㅠ)
또한 혹시나 오브젝트를 줌인하기 전에 줌아웃해서 전체 맵을 보고 줌인해야하는 경우도 있기에 경유 기능도 추가하여 제작했다.
● 카메라 특정 오브젝트로 부드럽게 이동하기 – 경유지점 포함
◇ 사용법
1. 아래 스크립트를 아무 오브젝트에 AddComponent하고 camera에 MainCamera를 드래그하여 넣어준다.
2. 경유지점이 있으면 subTarget에 Transform을 드래그하여 넣어준다.
3. SetTarget 함수를 호출하면서 파라미터로 목표오브젝트를 넣어준다.
– SetTarget(GameObject 목표오브젝트)
– SetTarget(GameObject 목표오브젝트, bool isBounds)
: bounds의 크기 기준으로 타겟을 설정한다. bound는 Mesh 중심에서 Mesh 크기만큼의 사각형을 뜻한다.
4. 잘되는지 확인
using System.Collections; using System.Collections.Generic; using UnityEngine; ///
/// 이동 완료시 발생 이벤트 /// public class MoveCompleteEventArgs { public GameObject targetObject; public Vector3 position; public Quaternion quaternion; } public class CameraMoveToObject : MonoBehaviour { public static event System.EventHandler
EventHandler_CameraMoveTargtet; /// /// 카메라 /// public GameObject camera; ///
/// 줌인 대상 오브젝트 /// private Transform targetObject; ///
/// 경유 지점 위치 /// public Transform subTarget; ///
/// 부드럽게 이동될 감도 /// public float smoothTime = 0.3f; private Vector3 velocity = Vector3.zero; ///
/// 카메라 타겟 줌인 상태 플래그 /// public static bool IsActive = false; ///
/// 줌인 정도 -가 클수록 줌아웃 /// public float Zoomin = -5; ///
/// 오브젝트 크기에 맞춰 줌기능 사용시 사용될 데이터 /// private Bounds boundsData; private bool isBounds = true; ///
/// 경유지점 도착 후 진행 카운트 /// private int PassCount = 0; // Update is called once per frame void Update() { if (IsActive) { Vector3 targetPosition; //경유지점이 있다면 목표지점을 경유우선으로 지정한다 if (subTarget != null && PassCount == 0) { targetPosition = subTarget.transform.position; smoothTime = 0.1f; } else { //경유지점이 없다면 bounds 체크 후 목표지점을 종착지로 설정한다 if (!isBounds) targetPosition = targetObject.TransformPoint(new Vector3(0, 10, Zoomin)); else targetPosition = new Vector3(boundsData.center.x, boundsData.center.y + boundsData.size.y, boundsData.center.z – boundsData.size.z + Zoomin); } //위에서 설정된 위치로 부드럽게 이동 camera.transform.position = Vector3.SmoothDamp(camera.transform.position, targetPosition, ref velocity, smoothTime); camera.transform.LookAt(targetObject); //목표지점 이내에 도착 if (Vector3.Distance(targetPosition, camera.transform.position) < 0.1f) { //경유지점이 있을 경우 if (subTarget != null) { //if(Vector3.Distance(targetPosition,subTarget.transform.position) < 0.1f) if (targetPosition == subTarget.transform.position) { PassCount++; //경유지점 도착 후 targetPosition을 최종 목표위치로 변경 if (!isBounds) targetPosition = targetObject.TransformPoint(new Vector3(0, 10, Zoomin)); else targetPosition = new Vector3(boundsData.center.x, boundsData.center.y + boundsData.size.y, boundsData.center.z - boundsData.size.z + Zoomin); } else { //경유하고 최종 목적지 도착했을때 이벤트 처리 MoveCompleteEventArgs args = new MoveCompleteEventArgs(); args.targetObject = targetObject.gameObject; args.position = camera.transform.position; args.quaternion = camera.transform.rotation; EventHandler_CameraMoveTargtet(this, args); Clear(); } } else { //경유 지점 없이 최종 목적지 도착했을때 이벤트 처리 MoveCompleteEventArgs args = new MoveCompleteEventArgs(); args.targetObject = targetObject.gameObject; args.position = camera.transform.position; args.quaternion = camera.transform.rotation; EventHandler_CameraMoveTargtet(this, args); Clear(); } } } //if (Input.GetMouseButton(0) && IsActive || Input.GetMouseButton(1) && IsActive || Input.GetAxis("Mouse ScrollWheel") != 0 && IsActive) //{ // Clear(); //} } ///
/// target 오브젝트로 시점을 이동하는 함수 /// /// 목표 오브젝트 /// 오브젝트 크기에 따라 줌인 여부 public void SetTarget(GameObject target, bool bounds = true) { if (target == null) return; IsActive = true; targetObject = target.transform; //bounds가 true일경우 target의 bounds 데이터를 저장 if(bounds) { Bounds combinedBounds = new Bounds(); var renderers = target.GetComponentsInChildren
(); foreach (var render in renderers) { combinedBounds.Encapsulate(render.bounds); } boundsData = combinedBounds; isBounds = true; } else { boundsData = new Bounds(); isBounds = false; } } public void Clear() { smoothTime = 0.3f; IsActive = false; targetObject = null; PassCount = 0; } } 반응형
유니티 – 드래그로 카메라 이동(Drag and Move Camera)
728×90
반응형
Unity 전체 링크
메인 카메라에 스크립트를 추가한다.
테스트하기 쉽게 왼쪽의 Alt가 입력된 경우에만 카메라가 움직이도록 하자.
void Update() { if (Input.GetKeyDown(KeyCode.LeftAlt)) isAlt = true; if (Input.GetKeyUp(KeyCode.LeftAlt)) isAlt = false; if (Input.GetMouseButton(0)) { if (isAlt) { /* Camera Move */ } } }
Alt Input을 판단할 변수와 최초 클릭 위치, 그리고 드래그 속도를 정할 변수를 선언한다.
bool isAlt; Vector2 clickPoint; float dragSpeed = 30.0f;
마우스 최초 클릭 시, 마우스 위치를 기억한다.
void Update() { if (Input.GetKeyDown(KeyCode.LeftAlt)) isAlt = true; if (Input.GetKeyUp(KeyCode.LeftAlt)) isAlt = false; /* 마우스 위치 기억 */ if (Input.GetMouseButtonDown(0)) clickPoint = Input.mousePosition; if (Input.GetMouseButton(0)) …
ScreenToViewportPoint를 이용해 현재의 마우스 위치와 마우스 최초 클릭의 clickPoint의 차이를 구한다.
그리고 Speed를 곱한 후, Translate로 이동한다.
if (isAlt) { Vector3 position = Camera.main.ScreenToViewportPoint((Vector2)Input.mousePosition – clickPoint); Vector3 move = position * (Time.deltaTime * dragSpeed); transform.Translate(move); }
Alt키를 누르면서 마우스를 드래그해보면 아래와 같이 움직인다.
카메라가 현재 좌우/상하로 움직이고 있다.
좌우/앞뒤로 움직이기 위해서는 코드를 조금 수정할 필요가 있다.
position의 z와 y를 변경한다.
if (isAlt) { Vector3 position = Camera.main.ScreenToViewportPoint((Vector2)Input.mousePosition – clickPoint); /* 좌우, 앞뒤 이동으로 변경 */ position.z = position.y; position.y = .0f; Vector3 move = position * (Time.deltaTime * dragSpeed); transform.Translate(move); }
카메라가 앞/뒤로 다가갈 때, 카메라의 높이가 변경되는 것을 막고 싶다면, y축을 고정하면 된다.
if (isAlt) { Vector3 position = Camera.main.ScreenToViewportPoint((Vector2)Input.mousePosition – clickPoint); position.z = position.y; position.y = .0f; Vector3 move = position * (Time.deltaTime * dragSpeed); float y = transform.position.y; /* y축 고정을 위해 기존 좌표 저장 */ transform.Translate(move); transform.transform.position = new Vector3(transform.position.x, y, transform.position.z); }
위의 동영상과 달리 큐브에 다가가지 않는다.
최종 코드는 아래와 같다.
using System.Collections; using System.Collections.Generic; using UnityEngine; public class DragCamera : MonoBehaviour { bool isAlt; Vector2 clickPoint; float dragSpeed = 30.0f; void Update() { if (Input.GetKeyDown(KeyCode.LeftAlt)) isAlt = true; if (Input.GetKeyUp(KeyCode.LeftAlt)) isAlt = false; if (Input.GetMouseButtonDown(0)) clickPoint = Input.mousePosition; if (Input.GetMouseButton(0)) { if (isAlt) { Vector3 position = Camera.main.ScreenToViewportPoint((Vector2)Input.mousePosition – clickPoint); position.z = position.y; position.y = .0f; Vector3 move = position * (Time.deltaTime * dragSpeed); float y = transform.position.y; transform.Translate(move); transform.transform.position = new Vector3(transform.position.x, y, transform.position.z); } } } }
728×90
반응형
메인 카메라 이동 (Unity)
728×90
게임을 하다 보면 메인 카메라를 이동해야할 필요가 있습니다. 슈퍼마리오만 플레이 해봐도 마리오를 따라 카메라가 이동하는 것을 알 수 있습니다.
그림. 슈퍼 마리오 게임
이번 시간에는 메인 카메라를 유니티에서 이동하는 방법에 대해서 이야기하고자 합니다.
0. C# script 만들어주기
먼저 C# script를 만들어줍니다.
그림. 메인 카메라 제어를 위한 Script
저는 CameraController라는 이름으로 C# Script를 만들어 줬습니다.
using System.Collections; using System.Collections.Generic; using UnityEngine; public class CameraController : MonoBehaviour { GameObject player; // Start is called before the first frame update void Start() { player = GameObject.Find(“cat”); // game object cat을 찾아서 객체에 지정 } // Update is called once per frame void Update() { Vector3 PlayerPos = player.transform.position; // 플레이어가 조종중인 게임 오브젝트의 위치를 계산 transform.position = new Vector3(transform.position.x, PlayerPos.y, transform.position.z); // 플레이어가 조종중인 오브젝트의 y 값만 카메라의 좌표에 넘김 } }
코드는 다음과 같이 구성했습니다. 주석으로 기능을 설명해두었으니 차근 차근 따라오시면 이해가 되실겁니다.
해당 코드 내용을 실행시키면 카메라가 플레이어를 따라 움직일 것으로 예상됩니다. 이제 해당 코드를 MainCamera에 upload한 후 게임을 실행시켜 보겠습니다.
그림. 만들어진 Script를 Main Camera에 드래그 해서 넣음
동영상. 시연 영상
시연 결과 플레이어의 위치에 따라 코딩된 것과 같이 카메라가 찍는 y축이 변하는 것을 볼 수 있습니다.
다음에도 유용한 정보로 돌아오겠습니다. 감사합니다. ^^
728×90
[Unity] 캐릭터 이동 시 카메라 따라가기 (3인칭)
캐릭터 이동을 구현하였으니, 이제 카메라가 캐릭터를 따라다닐 수 있도록 구현해봅시다.
이전에 만들었던 Scripts 폴더에 MainCamera_Action이라는 스크립트를 생성해줍니다. 이후 다음과 같이 코드를 작성해줍시다.
using System.Collections; using System.Collections.Generic; using UnityEngine; public class MainCamera_Action : MonoBehaviour { public GameObject Target; // 카메라가 따라다닐 타겟 public float offsetX = 0.0f; // 카메라의 x좌표 public float offsetY = 10.0f; // 카메라의 y좌표 public float offsetZ = -10.0f; // 카메라의 z좌표 public float CameraSpeed = 10.0f; // 카메라의 속도 Vector3 TargetPos; // 타겟의 위치 // Update is called once per frame void FixedUpdate() { // 타겟의 x, y, z 좌표에 카메라의 좌표를 더하여 카메라의 위치를 결정 TargetPos = new Vector3( Target.transform.position.x + offsetX, Target.transform.position.y + offsetY, Target.transform.position.z + offsetZ ); // 카메라의 움직임을 부드럽게 하는 함수(Lerp) transform.position = Vector3.Lerp(transform.position, TargetPos, Time.deltaTime * CameraSpeed); } }
offset 변수들은 “타겟으로부터의 카메라의 위치”를 의미합니다. 즉 위의 코드는 타겟으로부터 (0, 10, -10)의 위치에 카메라가 위치한다는 뜻이 됩니다. public으로 설정하여 유니티 내부에서 간편히 변경할 수 있도록 해주었습니다.
카메라의 각도 또한 설정해야 하는데, 이는 유니티 내부에서 카메라의 각도를 직접 조정하는 방법이 가장 편하므로 굳이 스크립트로 작성하지 않았습니다만, 스크립트를 쓰시고 싶다면 위의 코드에 다음 코드를 덧붙여주시면 됩니다.
// … 는 상기 코드와 동일한 부분입니다. public class MainCamera_Action : MonoBehaviour { //… public float angleX = 0.0f; public float angleY = 0.0f; public float angleZ = 0.0f; //… // Update is called once per frame void FixedUpdate() { //… transform.rotation = Quaternion.Euler(angleX, angleY, angleZ); } }
angle 변수를 사용하여 카메라의 각도를 지정해주시면 됩니다.
여기에서도 FixedUpdate를 사용했습니다. FixedUpdate를 이동하는 물체에 사용하는 이유는 Update와 달리 프레임의 영항을 받지 않기 때문이라고 합니다. 즉 이동 시 버벅거릴 수 있는 현상을 좀 더 보정해준다는 뜻으로 이해할 수 있겠습니다.
위에서 설정한 offset 변수들을 TargetPos의 각 x, y, z에 더하여줍니다. 이 작업을 통해 카메라가 가야 할 위치가 계속해서 업데이트됩니다.
이제 카메라의 위치로 이동시킬 차례입니다. 해당 포스팅에서는 카메라가 부드럽게 이동할 수 있도록 Lerp를 사용한 방식으로 스크립트를 작성하였습니다. Lerp에 관한 설명은 mayquartet.tistory.com/44의 마지막 부분에 있습니다.
더욱 자세한 설명을 원하신다면 docs.unity3d.com/kr/530/ScriptReference/Mathf.Lerp.html을 참고하시는 것도 좋을 것 같습니다.
이렇게 스크립트를 다 작성했다면 유니티 화면으로 가서 MainCamera_Action 스크립트를 Main Camera에 부여해주도록 합시다.
스크립트를 부여했다면 카메라가 따라다닐 타겟을 지정해주도록 합시다. 여기에서는 Player를 따라다닐 것이므로 Player를 스크립트의 Target에 넣어주도록 합시다.
이제 유니티를 실행하면 카메라가 플레이어를 따라다니는 것을 볼 수 있습니다.
[Unity Tip] 유니티 카메라 이동 제한 (Limit camera movement in Unity)
유니티 버전 : 2020.3.0f1 (LTS)
Visual studio 버전 : 2019 Community (16.11.2)
2D에서 마우스로 카메라를 이동시킬 때 카메라의 x, y값이 특정 값을 넘어서지 않게 하는 상황입니다.
Main camera에 CameraContol 라는 스크립트를 하나 만들어서 붙여줬습니다.
다음과 같이 스크립트를 짰습니다.
마우스를 클릭한 순간에만 필요한 부분은 Input.GetMouseButtonDown을 사용합니다.
마우스 클릭을 유지하고있을 때 필요한 부분은 Input.GetMouseButton을 사용합니다.
Mathf.Clamp를 이용해 새로 계산된 카메라의 Position값인 newCamPos의 최솟값, 최댓값을 지정해 다시 newCamPos에 넣어줍니다.
Mathf.Clamp를 이용하지않고 if문을 사용할 수도 있겠지만, 보기에 더 깔끔한 Clamp를 사용했습니다.
반응형
[Unity] 유니티 오브젝트를 따라가는 카메라
반응형
안녕하세요
오브젝트를 따라가는 카메라를 만드는 코드를 공유하려고 합니다.
바닥(Plane)과 따라갈 오브젝트(Cube)를 생성합니다.
오브젝트(Cube)에 이동관련 스크립트를 추가합니다.
키보드로 이동이 가능하도록 추가합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 using System .Collections; using System .Collections.Generic; using UnityEngine; public class Mover : MonoBehaviour { float m_fSpeed = 5. 0f; void Update() { float fHorizontal = Input.GetAxis( “Horizontal” ); float fVertical = Input.GetAxis( “Vertical” ); transform.Translate(Vector3.right * Time.deltaTime * m_fSpeed * fHorizontal, Space.World); transform.Translate(Vector3.forward * Time.deltaTime * m_fSpeed * fVertical, Space.World); } } cs
다음은 메인 카메라(Main Camera)에 오브젝트를 따라가는 스크립트를 추가합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 using System .Collections; using System .Collections.Generic; using UnityEngine; public class CFollowCamera : MonoBehaviour { public Transform target; // 따라다닐 타겟 오브젝트의 Transform private Transform tr; // 카메라 자신의 Transform void Start() { tr = GetComponent < Transform > (); } void LateUpdate() { tr.position = new Vector3(target.position.x – 0. 52f, tr.position.y, target.position.z – 6. 56f); tr.LookAt(target); } } cs
그리고 Target에 오브젝트(Cube)를 넣어줍니다.
실행을 해보면 오브젝트(Cube)를 따라서 카메라가 이동하게 됩니다.
위에서 바라보는게 더 자연스러울 것 같아서 카메라 위치를 변경해보겠습니다.
감사합니다.
반응형
[유니티] 카메라 이동 및 회전 코드
카메라에 붙여서 사용할 수 있는 코드입니다.
카메라가 보는 방향으로 이동 할 수 있게 만들었고
( transform.forward * vertical + transform.right * horizontal )
마우스 오른쪽 클릭을 통해 회전을 할 수 있는 코드입니다.
회전은 마우스 가로 움직임이 세로축에 영향을 주고
마우스 세로 움직임이 가로축에 영향을 줍니다.
MouseX => rotation.y에 영향
MouseY => rotation.x에 영향
( Quaternion.Euler(transform.rotation.x – mouseY, transform.rotation.y + mouseX, 0.0f) )
private new Transform transform; 를 선언하고 transform = GetComponent
를 해주었는데 transform을 캐싱하여 성능을 높일 수 있다고 해서 사용했습니다! ㅎㅎ
using UnityEngine; public class CameraController : MonoBehaviour { public float rotateSpeed = 5.0f; public float moveSpeed = 3.5f; public float limitAngle = 70.0f; private new Transform transform; private bool isRotate; private float mouseX; private float mouseY; private void Start() { transform = GetComponent
(); mouseX = transform.rotation.eulerAngles.y; //마우스 가로(x)는 세로축(y) 이 중심 mouseY = -transform.rotation.eulerAngles.x; //마우스 세로(y)는 가로축(-x) 이 중심 } private void Update() { float horizontal = Input.GetAxisRaw(“Horizontal”); float vertical = Input.GetAxisRaw(“Vertical”); //카메라를 기준으로 앞, 옆으로 이동시킵니다. Vector3 movement = transform.forward * vertical + transform.right * horizontal; movement = movement.normalized * (Time.deltaTime * moveSpeed); transform.position += movement; //마우스 오른쪽 클릭 시 회전시킴 if (Input.GetMouseButtonDown(1)) { isRotate = true; } if (Input.GetMouseButtonUp(1)) { isRotate = false; } if (isRotate) { Rotation(); } } public void Rotation() { mouseX += Input.GetAxis(“Mouse X”) * rotateSpeed; // AxisX = Mouse Y mouseY = Mathf.Clamp(mouseY + Input.GetAxis(“Mouse Y”) * rotateSpeed, -limitAngle, limitAngle); //mouseX (가로 움직임) 은 Y축에 영향을 줌 //mouseY (세로 움직임) 은 X축에 영향을 줌 transform.rotation = Quaternion.Euler(transform.rotation.x – mouseY, transform.rotation.y + mouseX, 0.0f); } }
[Unity3D] 유니티 Lerp로 부드러운 카메라 이동 구현하기 (오브젝트 추적)
[Unity3D] 유니티 Lerp로 부드러운 카메라 이동 구현하기 (오브젝트 추적)2017/11/09 – [Unity] 유니티 3D Vector의 선형보간 Lerp 정확한 사용법
지난 게시글에서 Lerp의 사용법을 최대한 자세하게 설명드렸습니다. 이번엔 그것을 응용해서 카메라로 오브젝트를 추적하는 스크립트를 작성해 보겠습니다.
우선 이동할 2D 오브젝트를 생성해 Target이라는 이름으로 설정합니다.
이제 메인카메라에 Chasing.cs 스크립트를 하나 컴포넌트로 추가합니다.
이제 Chasing.cs 스크립트를 아래처럼 작성해주세요
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Chasing : MonoBehaviour { public GameObject Player; private GameObject Target; public float CameraZ = -10; // Update is called once per frame void FixedUpdate () { Vector3 TargetPos = new Vector3(Target.transform.position.x, Target.transform.position.y, CameraZ); transform.position = Vector3.Lerp(transform.position, TargetPos, Time.deltaTime * 2f); } }
CameraZ는 Inspector 창에서 지정해줘도 괜찮습니다. 그리고 하이라키 뷰에서 Target 오브젝트를 Chasing 스크립트의 Target로 끌어옵니다.
현재 오브젝트의 z 축 position이 0이기 때문에 -10으로 설정했습니다.
그리고 Update는 FixedUpdate함수를 사용했습니다. Update와 LateUpdate 함수는 매 프레임마다 호출되지만 FixedUpdate는 프레임에 영향을 받지 않고 호출됩니다. Update와 LateUpdate 함수에서 오브젝트와 카메라를 동시에 이동할 경우 오브젝트가 덜덜 떨리는 현상을 보실 수 있을겁니다.
먼저 새로운 Vector3 TargetPos를 선언하여 타겟의 x,y 좌표와 카메라의 z좌표를 넣었습니다. 그후 그 좌표로 카메라의 position을 보정합니다.
이렇게 까지 완성하고 오브젝트의 이동까지 구현하셨다면 이제 카메라가 부드럽게 오브젝트를 추적합니다.
Lerp함수에 대한 해석은 지난 게시글을 참고해주세요~~!
감사합니다.
2017/11/09 – [Unity] 유니티 3D Vector의 선형보간 Lerp 정확한 사용법
18. 카메라 이동으로 플레이어 따라가기
게임에서 흔히 보이는 3인칭 시점을 간단하게 구현해보겠습니다.
먼저 Scene창에서 카메라를 적당한 위치에 놓습니다.
플레이어 공이 움직이는 대로 카메라가 따라가려면 플레이어 공의 Position 정보를 카메라에도 줘야합니다.
C#스크립트를 생성해 카메라에 줍니다.
소스코드
using System.Collections; using System.Collections.Generic; using UnityEngine; public class CameraMove : MonoBehaviour { Transform playerTransform; //Player의 transform 정보를 담을 변수 선언 void Awake() { playerTransform = GameObject.FindGameObjectWithTag(“Player”).transform; //GameObject의 메서드인 Find로 Player 오브젝트를 찾은 뒤 Position 정보를 가져옵니다. } void LateUpdate() //카메라 움직임은 주로 LateUpdate에 적습니다. { transform.position = playerTransform.position; //카메라의 position에 player의 position 정보를 넣어줍니다. } }
GameObject의 메서드인 Find로 다른 오브젝트를 찾아 필요한 정보를 가져올 수 있지만 Find는 cpu 부하가 높아 최적화를 고려한다면 권장되지 않는 방법입니다. 그리고 gameObject와 GameObject 혼동에 주의해주세요.
플레이를 해보면 이렇게 보입니다.
카메라는 분명 플레이어를 잘 따라가지만 이건 3인칭이 아닌 1인칭으로 보입니다.
3인칭이 되려면 카메라와 플레이어 사이에 거리를 둬야하는데 위 카메라의 소스코드는 카메라의 position과 플레이어의 position이 똑같기 때문에 마치 한몸처럼 1인칭 시점으로 보이는 겁니다.
따라서 소스코드에 거리 변수를 추가해야합니다.
소스코드
using System.Collections; using System.Collections.Generic; using UnityEngine; public class CameraMove : MonoBehaviour { Transform playerTransform; Vector3 Offset; // 카메라와 플레이어 사이의 거리 변수 void Awake() { playerTransform = GameObject.FindGameObjectWithTag(“Player”).transform; Offset = transform.position – playerTransform.position; //카메라 위치 – 플레이어 위치 } void LateUpdate() { transform.position = playerTransform.position + Offset; //카메라 위치 = 플레이어 위치 + 거리 } }
결과
Scene에서 카메라를 놓은 위치를 기반으로 플레이어와의 거리를 계산하고 그 거리값을 계속 더해줌으로써, 카메라가 계속 일정거리를 유지하며 플레이어를 쫓아가게 되었습니다.
키워드에 대한 정보 유니티 카메라 이동
다음은 Bing에서 유니티 카메라 이동 주제에 대한 검색 결과입니다. 필요한 경우 더 읽을 수 있습니다.
이 기사는 인터넷의 다양한 출처에서 편집되었습니다. 이 기사가 유용했기를 바랍니다. 이 기사가 유용하다고 생각되면 공유하십시오. 매우 감사합니다!
사람들이 주제에 대해 자주 검색하는 키워드 [unity] 카메라 이동 만들기
- 유니티
- unity
- camera
- itween
YouTube에서 유니티 카메라 이동 주제의 다른 동영상 보기
주제에 대한 기사를 시청해 주셔서 감사합니다 [unity] 카메라 이동 만들기 | 유니티 카메라 이동, 이 기사가 유용하다고 생각되면 공유하십시오, 매우 감사합니다.