Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

Coordenadas del ratón y modelos del juego

Iniciado por Dries, Febrero 15, 2016, 08:58:13 PM

Tema anterior - Siguiente tema
Febrero 15, 2016, 08:58:13 PM Ultima modificación: Enero 01, 1970, 01:00:00 AM por Dries
Buenas a todos, soy nuevo en esto y bueno, ya sabéis las dudas que tiene uno cuando empieza en cualquier cosa ^^'. La cosa es que me gustaría crear un juego en el que, en un terreno modelado por mi e importado a la escena, cuando clique en el mapa, aparezca un modelo (el cual también esta creado por mi y en la carpeta de assets).  No sé si me explico bien. Básicamente un juego de clicar y poner un objeto*. Mi duda es que no tengo ni idea O.O. No sé como capturar el clic del ratón, pasar las coordenadas del clic a una variable y en esa posición, hacer que aparezca un objeto*. Una ayuda por favor. Gracias de antemano. objeto* = He puesto objeto pero no sé si esta bien dicho. Me refiero a un modelo que ya he creado e importado previamente a Unity y que lo tengo en la carpeta Assets o en alguna derivada, por ejemplo: Assets/modelos o algo así.

    
    void Update() {
        // Si haces click con el mouse
        if (Input.GetButtonDown("Fire1")) {
            //Pasas como parametro la posicion del mouse y creas un objeto ray
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            //verificas si no hay un collider
            if (!Physics.Raycast(ray))
                //Si no hay, creas un objeto particle, en la posicion del mouse
                Instantiate(particle, Input.mousePosition, transform.rotation);
        }
    }
Bueno el código lo saque de la api de Unity, lo modifique un poco.fuente: http://docs.unity3d.com/ScriptReference/Input-mousePosition.html" rel="external nofollow">http://docs.unity3d.com/ScriptReference/Input-mousePosition.htmTe aconsejo que estudies el leguaje C# (Aprende la parte de OOP, para entender mejor el codigo) y que leas el manual de Unity: http://docs.unity3d.com/es/current/Manual/Tambien podrias ver los videos sobre unity en youtube o los tutoriales de unity: http://unity3d.com/es/learn/tutorialsSaludos...

Hay varias formas de hacerlo.Yo por ejemplo uso el ScreenToWorld() y el ScreenPointToRay(). Está todo bastante bien explicado en la documentación oficial, busca por ahí.Otro ejemplo: http://docs.unity3d.com/ScriptReference/Camera.ScreenToWorldPoint.html

Febrero 21, 2016, 09:04:00 PM #3 Ultima modificación: Enero 01, 1970, 01:00:00 AM por Dries
[quote author=Ferno" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="35156" data-ipsquote-contentcommentid="127160">
void Update() {
        // Si haces click con el mouse
        if (Input.GetButtonDown("Fire1")) {
            //Pasas como parametro la posicion del mouse y creas un objeto ray
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            //verificas si no hay un collider
            if (!Physics.Raycast(ray))
                //Si no hay, creas un objeto particle, en la posicion del mouse
                Instantiate(particle, Input.mousePosition, transform.rotation);
        }
    }
Bueno el código lo saque de la api de Unity, lo modifique un poco.fuente: http://docs.unity3d.com/ScriptReference/Input-mousePosition.html">http://docs.unity3d.com/ScriptReference/Input-mousePosition.htmTe aconsejo que estudies el leguaje C# (Aprende la parte de OOP, para entender mejor el codigo) y que leas el manual de Unity: http://docs.unity3d.com/es/current/Manual/">http://docs.unity3d.com/es/current/Manual/Tambien podrias ver los videos sobre unity en youtube o los tutoriales de unity: http://unity3d.com/es/learn/tutorials">http://unity3d.com/es/learn/tutorialsSaludos...[/quote]Muy buenas! Muchas gracias por responder! Verás, he modificado un poco el proyecto que quería hacer, pero la idea es la misma. Aquí te pongo el código:using UnityEngine;
using System.Collections;public class Create : MonoBehaviour {    public Transform rotation;
    public GameObject Model;    void OnMouseDown() {
        if (Input.GetMouseButtonDown (0)) {
            PutTree ();
            // Debug.Log ("X: " + mousePos.x + "Y: " + mousePos.y);
        }
    }    void PutTree() {
        Vector2 mousePos = Input.mousePosition;
        Instantiate (Model, mousePos, rotation.rotation);
    }
} Bien, ese es mi código, te explico: Quiero hacer que cuando presione en cualquier parte de un plano (que en un futuro será un modelo 3D que tendrá la función de terreno) se sitúe un árbol (o cualquier modelo) en ese punto, y si vuelvo a clicar en cualquier otro punto, suceda lo mismo (situar un árbol en las coordenadas actuales). He usado un Vector2 porque me he dado cuenta de que la Z siempre es 0 y que puedo usar la Y como si fuese la Z. Y he puesto una rotación cualquiera, solo porque me lo pedía el método Instantiate. El problema es que el modelo me aparece en una zona que no tiene nada que ver, creo que tiene la misma coordenada X pero la Y es diferente. Digo la Y porque me funciona igual que la Z. Estoy usando Unity 3D. Llevo todo el día buscando en google y no encuentro nada O.o. 

El problema es que la posición que maneja el mousePosition no son las coordenadas globales de Unity, mira a ver si esto te sirve:http://docs.unity3d.com/ScriptReference/Camera.ScreenPointToRay.html

Etiquetas: