Noticias

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

Ayuda con un RayCast

Iniciado por Centauro5legs, Febrero 15, 2016, 10:54:12 PM

Tema anterior - Siguiente tema
Febrero 15, 2016, 10:54:12 PM Ultima modificación: Junio 10, 2016, 03:25:45 AM por pioj
OK, esto esta complejo, así que me tomare mi tiempo para explicar ...
 
Estoy haciendo un Script para construir dinamicamente, ya tengo la mayor parte hecha, pero tengo un problema. Necesito que la "Estructuras nuevas" se instancien en el lugar hacia donde mi personaje dirige la mirada. Pero no me sale, porque la estructura siempre se instancia en mis pies. Asumo que el problema esta a la hora de hacer el "Physics.Raycast", 
 
 
 
Tengo lo siguiente;
 

using UnityEngine;
using System.Collections;
public class Build : MonoBehaviour
{
    private GameObject EstructuraMuestra;
    public GameObject Estructura;
    RaycastHit myhit = new RaycasaRRRtHit ();
    Ray myray = new Ray ();
    bool EstructuraActiva;

    void Star(){
   
        EstructuraMuestra = Estructura;    
        Renderer[] R = EstructuraMuestra.GetComponentsInChildren<Renderer> ();
   Collider[] C = EstructuraMuestra.GetComponentsInChildren<Collider> ();
   if (EstructuraMuestra.GetComponent<Renderer> ())
      EstructuraMuestra.GetComponent<Renderer> ().material.color = new Color32 (0, 200, 0, 155);
   if (EstructuraMuestra.GetComponent<Collider> ())
      EstructuraMuestra.GetComponent<Collider> ().eneable = false;
           
        for (int i=0; i<R.Length; i++)
         R .material = new Color32 (0, 200, 0, 155);
      for (int i=0; i<C.Length; i++)
         C .eneable = false;
      EstructuraMuestra.name = "Estructura-Ejemplo";
      EstructuraActiva = true;
    }
    void Update ()
    {
        myray = Camera.main.ScreenPointToRay (new Vector3 ((Screen.width / 2), (Screen.height / 2), 0));
        if(EstructuraActiva == true){
            if (Physics.Raycast (myray, out myhit, 1000.0f)) {
           EstructuraMuestra.transform.position = myhit.collider.transform.localPosition;
           }
        }            
       
        if(Input.GetBottonMouse(0)){
            GameObject tempo = (GameObject)Instantiate (Estructura, EstructuraMuestra.transform.localPosition, EstructuraMuestra.transform.localRotation);
      tempo.transform.SetParent (GameObject.Find ("Terreno").transform);
      tempo.name = "Estructura";
      DestroyObject (EstructuraMuestra);
      EstructuraMuestra = new GameObject ();
      EstructuraActiva = false;
        }
    }
}

 
¿Alguien podría ayudarme?...
 
Pdata; Mi personaje esta en 3° persona, ¿Creen que eso afecte?....

Tal vez el rayo impacta contra el jugador y no contra el terreno, haz un debug del tag del collider a ver qué te sale.

Febrero 16, 2016, 12:05:10 AM #2 Ultima modificación: Febrero 16, 2016, 12:06:06 AM por leocub58
if (EstructuraMuestra.GetComponent<Collider> ())
      EstructuraMuestra.GetComponent<Collider> ().eneable = false;
           
No es enabled?

[quote author=leocub58" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="35159" data-ipsquote-contentcommentid="127174">
if (EstructuraMuestra.GetComponent<Collider> ())EstructuraMuestra.GetComponent<Collider> ().eneable = false;
           
No es enabled?[/quote]Si, pero no le pongas mucha atencion a eso, porque lo escribi, no lo copie XD

Has conseguido solucionarlo? Puede que sea porque le pasas la posición local del EstructuraMuestra??

Lo solucione del sigiente modo if (Physics.Raycast (myray, out myhit, 100.0f)) {
                if (myhit.collider.name.Equals ("Terreno"))
                    EstructuraMuestra.transform.position = myhit.point;} El problema es que me estaba dando la posición original del objeto con el que colicionaba, en lugar de la cordenada donde se estaba colisionando

Etiquetas: