스크립트 공부중..
회사에서 캐릭터 선택창에서 사용될 카메라 회전 구조를 정리하면서 짠 초기 코드지만, 나름 유니티 스크립트 개념을 깨워준 코딩임..ㅋㅋ
using UnityEngine;
using System.Collections;
public class FollowCam : MonoBehaviour
{
public Transform target; //추적할 타겟 게임 오브젝트의 Transform 변수
public float dist = 10.0f; // 카메라와의 일정 거리
public float height = 5.0f; // 카메라의 높이 설정
public float dampRotate = 5.0f; // 부드러운 회전을 위한 변수
public float TurnSpeed;
public float camPos;
Vector3 V3;
private Transform tr;
// Use this for initialization
void Start ()
{
//카메라 자신의 transform 컴포넌트를 tr에 할당
tr = GetComponent<Transform> ();
TurnSpeed = 2f;
camPos = 2f;
}
void Update()
{
Vector3 PositionInfo = tr.position - target.position; // 주인공과 카메라 사이의 백터정보
PositionInfo = Vector3.Normalize (PositionInfo); // 화면 확대가 너무 급격히 일어나지 않도록 정규화~
target.transform.Rotate (0, Input.GetAxis ("Horizontal")* TurnSpeed, 0); //마우스 입력이 감지되면 오브젝트 회전
transform.RotateAround (target.position, Vector3.right, Input.GetAxis ("Mouse Y")* TurnSpeed); //마우스 Y(Pitch) 움직임 인지하여 화면 회전
tr.position = tr.position - (PositionInfo * Input.GetAxis ("Mouse ScrollWheel")* TurnSpeed); // 마우스 휠로 화면확대 축고
}
}
마우스 회전시 카메라 좌우 회전~
오브젝트에 왼쪽마우스를 찍고 돌리면 회전~
훨로 카메라 확대 축고~
아래는 똑같은 형식의 모바일 터치 구현 스크립트
using UnityEngine;
using System.Collections;
public class TouchCameraControl : MonoBehaviour
{
public Transform charTarget;
private Camera cameratarget;
private Vector2 PrevPoint;
public float moveSensitivityX = 1.0f;
public float moveSensitivityY = 1.0f;
public bool updateZoomSensitivity = true;
public float orthoZoomSpeed = 0.05f;
public float minZoom = 1.0f;
public float maxZoom = 20.0f;
public float perspectiveZoomSpeed = .5f;
private Transform tr;
void Start ()
{
//카메라 자신의 transform 컴포넌트를 tr에 할당
tr = GetComponent<Transform> ();
cameratarget = Camera.main;
}
void Update()
{
Vector3 PositionInfo = tr.position - charTarget.position;
PositionInfo = Vector3.Normalize (PositionInfo);
if (updateZoomSensitivity)
{
moveSensitivityX = cameratarget.orthographicSize / 5.0f;
moveSensitivityY = cameratarget.orthographicSize / 5.0f;
}
Touch[] touches = Input.touches;
if (cameratarget)
{
if (Input.touchCount == 1) {
if (Input.GetTouch (0).phase == TouchPhase.Moved) {
PrevPoint = Input.GetTouch (0).position - Input.GetTouch (0).deltaPosition;
charTarget.transform.Rotate (0, -(Input.GetTouch (0).position.x - PrevPoint.x), 0);
cameratarget.transform.RotateAround (charTarget.position, Vector3.right, -(Input.GetTouch (0).position.y - PrevPoint.y)*0.5f);
PrevPoint = Input.GetTouch (0).position;
}
}
}
if (cameratarget) {
if (Input.touchCount == 2)
{
Touch touchZero = Input.GetTouch(0);
Touch touchOne = Input.GetTouch(1);
Vector2 touchZeroPrevPos = touchZero.position - touchZero.deltaPosition;
Vector2 touchOnePrevPos = touchOne.position - touchOne.deltaPosition;
float prevTouchDeltaMag = (touchZeroPrevPos - touchOnePrevPos).magnitude;
float touchDeltaMag = (touchZero.position - touchOne.position).magnitude;
float deltaMagnitudediff = prevTouchDeltaMag - touchDeltaMag;
tr.position = tr.position - -(PositionInfo * deltaMagnitudediff * orthoZoomSpeed);
}
}
}
}
'Engine > UNITY' 카테고리의 다른 글
쿼터니언 (Quaternion)함수를 사용하여 Look At 쉽게 만들기~ (2) | 2015.12.31 |
---|---|
모바일 빌드 실패시 체크사항 (0) | 2015.12.18 |
유니티에 스프링 효과 추가 하기. (0) | 2015.12.10 |
유니티 최적화 기술 총정리 (0) | 2015.12.10 |
유니티 루트 모션 사용법 - Generic (0) | 2015.12.10 |