unity3D如何获得transform.position的解决方案“主摄像机”的分配尝试无效。输入位置是南南?

时间:2018-03-06 01:20:34

标签: c# unity3d

这是我的相机代码:

using UnityEngine;

public class followcamara : MonoBehaviour {

    // Update is called once per frame
    public Transform player;
    public Vector3 offset;
    void Update ()    
    {
        //debug.log(player.position); imprime la posicion del jugador.
        //  transform.position = player.position; // si solo dejamos esta porcion de codigo, 
        //la camara se pusiera en el jugador en 1ra persona, pero como la camara en este juegos la queremos en 3ra 
        //persona, le agregaremos lo siguiente.

        transform.position = player.position + offset;// asi la camara se centra y se modifica a las coordenadas 
        //que le pongamos.

    }
}

这是我放在检查员身上的偏移值:0.1,2,-5

我收到了很多错误,但这些是前三个:

enter image description here

当我在某个旋转的道路边缘玩耍时会发生这种情况,就像这样,但是在路边。所以,当它发生时,你只是消失了,而且我给了我很多错误。我该如何解决这些问题?我是团结的新人。

enter image description here

玩家变换坐标将值更改为na,na,na

enter image description here

运动的代码是

using UnityEngine;

public class playermovement : MonoBehaviour {

    public Rigidbody rb;
    public float fowardforce = 2000f;
    public float sidewaysforce = 500f;
    private bool isdeath = false;

    // Update is called once per frame
    void FixedUpdate ()
        //esta parte de aqui se utiliza para generar una accion a (frames*segundo), 
        //entonces si tu computadora e srapida los Frames seran mayores, por eso agregamos el time.deltatime.
        //que es la cantidad de segundos que la computadora genero el ultimo frame, eje: si la funcion update,
        //ejecuta un frame 10 veces por vez, el time.deltatime va a ser 0.1, si es 20 por segundo su valor ahora es 0.5,
        //este forze hace que las fisicas se ejecuten al mismo tiempo en cada computador estimadamente, sin importar,
        //su capacidad.    
    {
        rb.AddForce(0, 0, fowardforce * Time.deltaTime);
        //input.getkey("tecla") se utiliza para analizar el teclado y ver que tecla se esta pulsando
        if(Input.GetKey("right"))
        {
            rb.AddForce(sidewaysforce * Time.deltaTime, 0, 0,ForceMode.VelocityChange); //x,y,z,cuarto parametro modo fuerza, leelos los diferentes.
        }

        if(Input.GetKey("left"))
        {
            rb.AddForce(-sidewaysforce * Time.deltaTime, 0, 0,ForceMode.VelocityChange);
        }

        if (Input.GetKey("up"))
        {
            rb.AddForce(0, 25, 0);
        }

        if(rb.position.y < -1f)
        {
            // FindObjectOfType<gameManager>().end_game();
            // FindObjectOfType<gameManager>().EndGameModoInfinito();
            death();
            FindObjectOfType<score>().OnDeath();

        }

        if (Input.GetMouseButton(0)) //lee cualquier pulso sin importar la posicion, sirve para mouse y pantallas touch
        {
            if (Input.mousePosition.x > Screen.width / 2) // si la posicion del mouse esta en el eje x, es decir a la derecha
            {
                rb.AddForce(sidewaysforce * Time.deltaTime, 0, 0, ForceMode.VelocityChange);
            }

            else
            {
                rb.AddForce(-sidewaysforce * Time.deltaTime, 0, 0, ForceMode.VelocityChange);
            }
            //obviamente esta a la izquierda si no es asi
        }    
    }
}

2 个答案:

答案 0 :(得分:0)

我会检查你遇到的第一个例外(无效的worldAABB:对象太大或太远...... )。当物体离场景中心太远时,通常会产生这种情况,通常在某个轴上为5000+单位。这导致近似无穷大,即NaN。你能检查玩家的位置,看看你是否处于这种状况?如果我的想法是正确的,那么您正在向NaN添加偏移量(有限),从而获得结果NaN

编辑:似乎您的代码与here相同。您是否尝试过相同的建议,因此缩放地面的Z分量?

答案 1 :(得分:0)

几分钟前,我遇到了Input.mousePosition是{Nan,Nan,Nan}的错误。问题的原因是,在将mousePosition分配给其他gameObject之前,我先将鼠标的位置对齐并划分为四舍五入,然后将其位置对齐到可变大小的网格中。在最近的更改中,有时将大小设置为零,这会导致“被零除”错误。