Unity Spain

Post Antiguos => General (Antiguo) => Mensaje iniciado por: Centauro5legs en Febrero 15, 2016, 10:54:12 PM

Título: Ayuda con un RayCast
Publicado por: Centauro5legs en Febrero 15, 2016, 10:54:12 PM
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?....
Título: Ayuda con un RayCast
Publicado por: juanma_teso en Febrero 15, 2016, 11:36:07 PM
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.
Título: Ayuda con un RayCast
Publicado por: leocub58 en Febrero 16, 2016, 12:05:10 AM
if (EstructuraMuestra.GetComponent<Collider> ())
      EstructuraMuestra.GetComponent<Collider> ().eneable = false;
           
No es enabled?
Título: Ayuda con un RayCast
Publicado por: Centauro5legs en Febrero 16, 2016, 12:12:11 AM
[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
Título: Ayuda con un RayCast
Publicado por: juanma_teso en Febrero 16, 2016, 04:34:59 PM
Has conseguido solucionarlo? Puede que sea porque le pasas la posición local del EstructuraMuestra??
Título: Ayuda con un RayCast
Publicado por: Centauro5legs en Febrero 22, 2016, 10:39:41 PM
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