Cómo mover la cámara entre varios puntos intermedios?

votos
-1

Tengo este código que se está moviendo la cámara de un punto a otro punto, como si se presiona un botón Voy a pasar del punto A al punto B por lo que la manera de modificar el código para que mi cámara pasará con en múltiples puntos como pasar de una a B, entonces B a C y así sucesivamente aquí es mi código gracias

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

camMOVEtwo clase pública: {MonoBehaviour

public Transform  handleview;
public Transform pressureview;
public Transform wallview;
public Transform sechandleview;
public Transform pressuretwoview;
public Transform switchview;

public GameObject handlebtn;
public GameObject pressurebtn;
public GameObject wallbtn;
public GameObject handletwobtn;
public GameObject pressuretwobtn;
public GameObject switchbtn;

public GameObject parentobj;
Animator anim;



public float transitionSPEED;
Transform currentVIEW;
private bool flag = false;
private bool isStarted = false;
Vector3 currentangel;
public List<GameObject> modelparts;

private void Start(){
    handlebtn.SetActive (true);
    pressurebtn.SetActive (false);
    wallbtn.SetActive (false);
    handletwobtn.SetActive (false);
    pressuretwobtn.SetActive (false);
    switchbtn.SetActive (false);

    anim = parentobj.GetComponent<Animator> ();
    anim.SetBool (start, true);



    foreach (GameObject obj in modelparts) {

        obj.GetComponent<BoxCollider> ().enabled = false;
    }
}

private void Update(){

    if (flag && !isStarted) {

        StartCoroutine (newnew ());
        isStarted = true;

    }


}

IEnumerator newnew(){
    float t = 0.0f;
    while (t < 2.0f) {
        t += Time.deltaTime;
        transform.position = Vector3.Lerp (transform.position, currentVIEW.position, Time.deltaTime * transitionSPEED);

        //for camera rotation
        currentangel = new Vector3 (Mathf.LerpAngle (transform.rotation.eulerAngles.x, currentVIEW.transform.rotation.eulerAngles.x, Time.deltaTime * transitionSPEED),
            Mathf.LerpAngle (transform.rotation.eulerAngles.y, currentVIEW.transform.rotation.eulerAngles.y, Time.deltaTime * transitionSPEED),
            Mathf.LerpAngle (transform.rotation.eulerAngles.z, currentVIEW.transform.rotation.eulerAngles.z, Time.deltaTime * transitionSPEED));

        transform.eulerAngles = currentangel;
        Debug.Log (coroutine is running);

        yield return null;

    }



}

public void Handleview(){

    currentVIEW = handleview;
    handlebtn.SetActive (false);

    flag = true;


}

public void Pressureview(){

    currentVIEW = pressureview;
    pressurebtn.SetActive (false);
    flag = true;

}

public void Wallview(){

    currentVIEW = wallview;
    wallbtn.SetActive (false);
    flag = true;



}

public void Secondhandleview(){
    currentVIEW = sechandleview;
    handletwobtn.SetActive (false);
    flag = true;




}

public void Pressuretwoview(){
    currentVIEW = pressuretwoview;
    pressuretwobtn.SetActive (false);
    flag = true;




}

public void Switchview(){
    currentVIEW = switchview;
    switchbtn.SetActive (false);
    flag = true;




}

}

Publicado el 27/11/2018 a las 16:58
fuente por usuario
En otros idiomas...                            


2 respuestas

votos
0

Usted puede tomar una serie de pointscomo se muestra en la secuencia de comandos a continuación. Para mantener también en que la cámara es que he tomado la variable currentPointIndexsólo para mantener el índice del punto actual.

CameraMotion.cs

public Transform[] points;
public int currentPointIndex=0;
public Transform lookAtTarget;

private void Update()
{
    if (Input.GetKeyDown(KeyCode.Space))
    {
        StartCoroutine(CameraTransition(points[currentPointIndex],1.0f));
        currentPointIndex++;
    }
}

IEnumerator CameraTransition(Transform nextPoint,float time)
{
    float i = 0;
    float rate = 1 / time;

    Vector3 fromPos = transform.position;

    while (i<1)
    {
        i += Time.deltaTime * rate;
        transform.position = Vector3.Lerp(fromPos,nextPoint.position,i);
        transform.LookAt(lookAtTarget);
        yield return 0;
    }
}}

Básicamente, estamos bucle a través de los puntos de la matriz y la transición en consecuencia.

Alternativamente, si sus puntos no están en una forma lineal (en una matriz) puede modificar la lógica consecuencia. Sin embargo, se puede utilizar el mismo co-rutina.

Respondida el 27/11/2018 a las 18:13
fuente por usuario

votos
0

Añadir sus objetivos a una lista

public Transform  handleview;
public Transform pressureview;
public Transform wallview;
public Transform sechandleview;
public Transform pressuretwoview;
public Transform switchview;

// I made this serialized since actually you wouldn't need the 
// single Transforms above anymore but directly reference them here instead
[SerializeField] private List<Transform> _views;

private int currentViewIndex;

private void Awake()
{
    _views = new List<Transform>()
    {
        handleview,
        pressureview,
        wallview,
        sechandleview,
        pressuretwoview,
        switchview
    }

    currentVIEW = handleView;
}

y posteriormente girar a través de la lista

public void NextView()
{
    currentViewIndex++;
    if(currentViewIndex >= _views.Count) currentViewIndex = 0;


    currentVIEW = _views[currentViewIndex];
}
Respondida el 27/11/2018 a las 18:01
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more