En este momento estás viendo Convierta la posición del mouse a la posición mundial con ScreenToWorldPoint () siempre da la posición de la cámara

 – Unity

Convierta la posición del mouse a la posición mundial con ScreenToWorldPoint () siempre da la posición de la cámara – Unity

Convierta la posición del mouse a la posición mundial con ScreenToWorldPoint () siempre da la posición de la cámara

– UnityAssets3Free

buenas , soy juansito y aqui os traigo
esta unity pregunta

Tengo un juego basado en cuadrículas en el que manipulo los clics en la cuadrícula con la posición del mouse y los edito en función de la posición del mouse de flor a número entero.

Cuando uso ScreenToWorldPoint() pasando Input.mousePosition, siempre obtengo el mismo valor incluso cuando se mueve el mouse.

En la celda de la cuadrícula de clics, el clic del jugador debe incrementar su valor en 1, pero en cualquier lugar donde haga clic, solo cambiará uno en el centro de la pantalla, lo que significa que si muevo la cámara, otra celda cambiará su valor.

La única solución que encontré es configurar manualmente point.z a lo que sea necesario, lo probé con 0f, 1f y, por último, con una posición negativa de la cámara Z, y siempre obtengo el mismo resultado con diferentes valores de Z.

En el interior Debug.Log(point + " " + Input.mousePosition); el punto es siempre el mismo (50.00, 50.00, 100.00) y Input.mousePosition cambia dependiendo de dónde haga clic el jugador y la resolución de la pantalla.

aquí está el código

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

public class Testing : MonoBehaviour 

    private Grid grid;
    private Vector3 point;

    private void Start() 
        grid = new Grid(10, 10, 10f, new Vector3(0, 0));
    

    private void Update() 
        HandleClickToModifyGrid();

        if (Input.GetMouseButtonDown(1)) 
            Debug.Log(grid.GetValue(Camera.main.ScreenToWorldPoint(Input.mousePosition)));
        
    

    private void HandleClickToModifyGrid() 
        if (Input.GetMouseButtonDown(0)) 
            
            point = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            point.z = -Camera.main.transform.position.z;
            int value = grid.GetValue(point);
            grid.SetValue(point, value + 1);
            Debug.Log(point + "  " + Input.mousePosition);
        
    


1 respuesta 1

En general ScreenToWorldPoint Tomar uno Vector3 Dónde

La posición z está en Unityes del mundo de la cámara.

Es decir, qué tan lejos frente a la cámara debe estar tu posición mundial.

¿Estás pasando por un Vector2 así que cuando esto se convierte implícitamente en un Vector3 los z el componente será 0 => el punto siempre estará en el plano de las cámaras.

No sé exactamente cómo funciona tu Grid, pero quizás sea mejor que uses un Plane y Plane.Raycast como por ejemplo

// A XZ plane going through 0,0,0
var plane = new Plane(Vector3.up, Vector3.zero);
// or e.g. XY Pläne
//var plane = new Plane(Vector3.back, Vector3.zero);

var ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if(plane.Raycast(ray, out var distance))

    var point = ray.GetPoint(distance);

    ...

nota: si aun no se resuelve tu pregunta por favor dejar un comentario y pronto lo podremos de nuevo , muchas gracias

eso es todo,espero que te funcione

Deja una respuesta