2017-05-17 6 views
0

떠 다니는 비행을 설명하기 위해 마우스를 가져 가거나 비행하거나 더 나은 단어. 스크립트에서 이제 카메라 위치를 변경합니다. 대신에 나는 카메라를 다음 위치로 움직이거나 지평선 높이의 변화를 포함하여 떠오르게하고 싶습니다. 그래서 부드럽게 뜨게됩니다. 어쩌면 내가 레이 캐스트를 사용해야 할까?호버처럼 움직이기 위해 카메라 위치를 어떻게 바꿀 수 있습니까?

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

public class CameraFly : MonoBehaviour { 

    public Camera camera; 

    private Vector3 currentPos; 
    private Vector3 targetPos; 
    public float desiredCameraHeight; 

    int movementspeed = 10; 

    // Use this for initialization 
    void Start() 
    { 

    } 

    // Update is called once per frame 
    void LateUpdate() 
    { 
     RaycastHit hit; 
     //Ray ray = camera.ScreenPointToRay(Terrain.activeTerrain.transform.position); 

     Ray ray = camera.ViewportPointToRay(Terrain.activeTerrain.transform.position); 

     if (Physics.Raycast(ray, out hit)) 
     { 
      float cameraHeight = desiredCameraHeight - hit.distance; 
      targetPos.y = cameraHeight; 
      transform.position += Vector3.Lerp(currentPos, targetPos, 0); 
     } 
    } 
} 

하지만 중 하나를 사용하여 ScreenPointToRay 또는 ViewportPointToRay 카메라는 전혀 움직이지 :

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

public class Teleport : MonoBehaviour { 

    public GameObject player; 
    public Camera mainCamera; 
    public Camera firstCam; 
    public Camera camera; 
    public bool loop; 
    public bool changeDirection; 
    public bool lightningBallEffect; 
    public bool lookAtTarget; 

    private List<GameObject> TeleportBooths; 

    TeleportationsCore[] tCores; 
    private int boothIndex = 0; 

    private void Start() 
    { 
     InstantiateObjects gos = GetComponent<InstantiateObjects>(); 

     TeleportBooths = new List<GameObject>(); 
     TeleportBooths = gos.PrefabsList(); 
     firstCam.enabled = false; 
     mainCamera.enabled = false; 
     camera.enabled = true; 

     tCores = TeleportBooths.Select(booth => booth.AddComponent<TeleportationsCore>()).ToArray(); 

     WorkingBooth(); 
    } 

    private void WorkingBooth() 
    { 
     if (tCores[boothIndex].NextWorkingBooth() == true) 
      boothIndex++; 
     if (boothIndex == tCores.Length) 
      boothIndex = 0; 
     player.transform.position = TeleportBooths[boothIndex].transform.position; 
camera.transform.position = new Vector3(TeleportBooths[boothIndex].transform.position.x - 15, TeleportBooths[boothIndex].transform.position.y + 15, TeleportBooths[boothIndex].transform.position.z); 
camera.transform.LookAt(TeleportBooths[boothIndex].transform); 

    } 

    private void Update() 
    { 
     WorkingBooth(); 
    } 
} 

이 내가 시도하는 것이다.

+0

을하는 데 도움이하지만 지금은 그것보다 이동의 경우 지형의 지역에 따라 높이의 카메라 변경하는 방법을 찾을 필요가 : 여기

은 psuedocode입니다 카메라가 높으면 카메라가 아래로 내려갑니다. 나는 카메라를 땅 위에 조금 붙이고 싶다. 높이 0.6에서 이것은 카메라를 움직이는 방법입니다 : transform.position + = transform.forward * Time.deltaTime * movementspeed; 하지만 지형의 높이를 어떻게 계산하고 그에 따라 카메라 높이를 변경합니까? –

+0

나는 이것을 도울 수있다. 이거 해결 했니? – Programmer

답변

0

Lerp 방법을 사용하면 카메라를 위치 A에서 B로 부드럽게 이동할 수 있습니다. 그러나 가변적 인 지형 높이를 맞추려면 광선을 지상으로 던지고 ray hit 거리를 사용하여 목표 위치의 y 값을 설정해야합니다.

//currentPos; 
//targetPos; 
//desiredCameraHeight; 
//Racast down from camera to ground/terrain; 
//cameraHeight = desiredCameraHeight - hitDistance; 
//targetPos.y = cameraHeight; 
//Lerp(currentPos,targetPos); 

희망이이 카메라를 이동합니다

+0

나는 시도한 것을 가지고 뭔가 내 질문을 업데이트하려고 노력했다. 봐 주시겠습니까? 감사. –

관련 문제