2017-11-09 20 views
1

편집 : 3D가 아닌 2D 구현에 대한 대답이 필요합니다. 따라서 'Asked Before'질문은 내 프로젝트에서 작동하지 않습니다.Unity 2D 마우스 확대/축소, 마우스 포인트의 위치 확대

편집 : 아래에서 허용되는 답변을 사용하여이 내 작업 스크립트입니다. Vector3의 0.1F 부분이 제대로 작동하기 어렵 기 때문에 약간 꺼져 있지만 작동합니다. Time.deltaTime이 작동하지 않았습니다.

using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 

public class CameraZoom : MonoBehaviour 
{ 

private float zoom = 10; 
Vector3 newPosition; 

void Update() 
{ 
    if (Input.GetAxis("Mouse ScrollWheel") > 0 && zoom > 9) 
    { 
     zoom -= 1; 
     Camera.main.orthographicSize = zoom; 
     newPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition); 
     transform.position = Vector3.Lerp(transform.position, newPosition, 0.1F); 
    } 

    if (Input.GetAxis("Mouse ScrollWheel") < 0 && zoom < 101) 
    { 
     zoom += 1; 
     Camera.main.orthographicSize = zoom; 
    } 

} 

} 

원래 질문 : 나는 확대 및 축소에 대한 기본 스크립트를 가지고,하지만 난 마우스 휠을 다시 확대 할 때, 나는 마우스 커서의 지점을 확대하고자합니다. 나는 Paradox 게임 (EU4 등)에서 비슷한 것을 볼 수 있다고 생각합니다. 축소하면 화면 왼쪽에있는 국가로 마우스를 가져간 다음 확대하여 국가가 확대되어 중심이됩니다.

여기 내 기본 스크립트가 내 카메라에 부착되어 있는데,이 카메라는 직선으로 확대/축소됩니다.

using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 

public class CameraZoom : MonoBehaviour { 

public float zoom = 10F; 

void Update() { 
    if (Input.GetAxis("Mouse ScrollWheel") > 0 && zoom > 9) 
    { 
     zoom -= 1; 
    } 

    if (Input.GetAxis("Mouse ScrollWheel") < 0 && zoom < 101) 
    { 
     zoom += 1; 
    } 

    GetComponent<Camera>().orthographicSize = zoom; 

    } 
} 
+0

'이전 질문'답변의 문제점은 3D 구현을위한 것이며 2D가 필요하다는 것입니다. 그것은 카메라의 위치를 ​​변형시킴으로써 (나는 생각합니다) 작동하지만, 저는 2D에 대한 'orthographicsize'로 무언가를해야한다고 생각합니다. – Farflame

+0

중복으로 표시하지 않았지만 복제본도 잘 작동해야합니다. – Programmer

+0

그렇지 않습니다. 사실 2D에서 아무것도하지 않는다고 믿는 카메라 변형을 움직이기 때문에 복제본은 전혀 아무것도하지 않습니다. 2D 버전은 카메라의 정사각형 크기를 변경해야합니다. 내 솔루션은 괜찮지 만 완벽하지는 않습니다. 사람들이 똑같은 해결책을 찾기 위해 여기에 온다고 가정 할 때, 복제본은 전혀 작동하지 않기 때문에 정답으로 표시해서는 안됩니다. – Farflame

답변

3

본인 스스로 시도하지는 않았지만이 방법이 효과가 있기를 바랍니다.

Vector3 newPosition; 
bool canZoom; 
bool isMoving; 

void Update() 
{ 
    if (Input.GetAxis("Mouse ScrollWheel") > 0 && zoom > 9) 
    { 
     zoom -= 1; 
     canZoom = true; 
    } 

    if (Input.GetAxis("Mouse ScrollWheel") < 0 && zoom < 101) 
    { 
     zoom += 1; 
     canZoom = true; 
    } 

    if (canZoom) 
    { 
     isMoving = true; 
     Camera.main.orthographicSize = zoom; 
     newPosition = Camera.main.ScreenToWorldPoint (Input.mousePosition); 
    } 
    if (isMoving) 
    { 
     transform.position = Vector3.Lerp (transform.position, newPosition, Time.deltaTime); 
    } 

    if(transform.position == newPosition) 
    { 
     isMoving = false; 
    } 

} 

참고 : 카메라가 특정 카메라 높이를 유지하려면 이동하기 전에 newPosision의 y 값을 조정하십시오.

희망이 도움이됩니다.

+0

수학이 정확하고 제대로 작동하는 것처럼 보입니다. 문제는 스크롤을 시작하면 영구적으로 스크롤되어 제어하기 어렵다는 것입니다. 나는 그것을 고치려고 노력하고 있지만 기본적인 생각은 옳다고 생각한다. – Farflame

+0

이것은 당신을 트랙에 넣기위한 것입니다. 대답을 수락하십시오. 행운을 빌어 요. –

2

세계 공간의 차이를 계산하고 확대/축소 중에이를 향해 이동하십시오.

using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 

public class CameraZoom : MonoBehaviour { 

public float zoom = 10F; 

void Update() { 
    if (Input.GetAxis("Mouse ScrollWheel") > 0 && zoom > 9) 
    { 
     zoom -= 1; 
    } 

    if (Input.GetAxis("Mouse ScrollWheel") < 0 && zoom < 101) 
    { 
     zoom += 1; 
    } 

    Camera cam = GetComponent<Camera>(); 
    RaycastHit hit; 
    Ray ray = cam.ScreenPointToRay(Input.mousePosition); 
    Vector3 targetPos; 

    if (Physics.Raycast(ray , out hit)) 
    { 
     targetPos = hit.point; 
    } 

카메라 cam = GetComponent();

cam.orthographicSize = zoom; 
    cam.transform.position += (targetPos - transform.position)/5f; 

    } 
} 
+0

나는 Unity에 익숙하지 않습니다. 몇 가지 오류가 있습니다. 'Camera Cam'의 두 번째 사용 이미 선언 된대로 제거해야한다고 생각합니다. 하지만 'targetPos'의 마지막 줄에 오류가 발생했습니다. '할당되지 않은 지역 변수 targetPos 사용'이 표시됩니다. 나는 그것이 위에 할당 되었기 때문에 그것이 할당되지 않은 방법을 얻지 못한다 .... – Farflame

+0

정확함, 나는 대답을 업데이트했다. "targetPos"는 레이 캐스트가 검색되지 않을 때마다 할당되지 않습니다. 마지막 줄을 if 블록 안에 넣을 수 있습니다. 그러나 디버깅을 시도하십시오. 뭔가 다른 것을 치지 않고 있는지 확인하려면 다른 부분을 로그인하십시오. 레이 캐스트가 작동하려면 마우스가 객체를 콜라이더로 가져 가야합니다. 지형 같은 것이 있습니까? – KYL3R