Noticias

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

Temas recientes

Problemas con un raycast en Unity!

Iniciado por Stunx, Agosto 06, 2019, 08:33:19 PM

Tema anterior - Siguiente tema
Buenas a todos, tengo un problema con este script:
 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerCamera : MonoBehaviour {
    // Script hecho por mi (Stunx)
    // Nombre: PlayerCamera | Version: 1.0 | Descripcion: Un controlador para camara incluido con colision.
    public Transform target;
    public float distance = 3.0f;
    public float maxDistance = 4.0f;
    public float xSpeed = 250.0f;
    private float x = 0.0f;
    private float y = 0.0f;
    void Start()
    {
        var angles = transform.eulerAngles;
        x = angles.y;
        y = angles.x;
        if (GetComponent<Rigidbody>())
        {
            GetComponent<Rigidbody>().freezeRotation = true;
        }
    }

void FixedUpdate()
{
   RaycastHit hit = new RaycastHit(); Ray ray = new Ray(transform.position, target.position);
   Debug.DrawLine(transform.position, target.position, Color.red);
   if (Physics.Raycast(ray, out hit, maxDistance))
   {
      distance = hit.distance + 1f;
      print("Tocaste la pared!");
   }
   else print("Dejaste la pared :(");
}
    void Update()
    {
        if (target)
        {
            x += Input.GetAxis("Mouse X") * xSpeed * 0.02f;
            var rotation = Quaternion.Euler(y, x, 0);
            var position = rotation * new Vector3(0.0f, 0.0f, -distance) + target.position;
            transform.rotation = rotation;
            transform.position = position;
        }
    }
}

 
El problema es que solo colisiona por un lado, y no por los demas, osea, p.e si tengo un cubo, solo colisiona por una cara y no por las otras, he creado otros cubos y hace lo mismo, revisado el Collider y normal, y no tengo idea de que pasa, si me podeis hechar una mano, gracias .

Agosto 07, 2019, 12:07:49 PM #1 Ultima modificación: Agosto 07, 2019, 12:08:18 PM por Igor
hola.
 
tienes mal el "ray"
 
las variables del ray deven ser: origen, y direccion.
 
tu has usado dos posiciones, la del propio objeto y la del "target".
 
prueba a poner asi:
 

Ray ray = new Ray(transform.position, target.position-transform.position);

 
si a la posicion del "target" le restas la posicion de origen te da una "direccion".
 
creo que puede ser eso.
 
saludos

Cita de: Igor date=1565172469hola.
   
   
      tienes mal el "ray"
   
   
      las variables del ray deven ser: origen, y direccion.
   
   
      tu has usado dos posiciones, la del propio objeto y la del "target".
   
   
      prueba a poner asi:
   
   

Ray ray = new Ray(transform.position, target.position-transform.position);

   
      si a la posicion del "target" le restas la posicion de origen te da una "direccion".
   
   
      creo que puede ser eso.
   
   
      saludos
   


Gracias por ayudar, pero no me funciono :(, me vuelvo loco con esto.

Agosto 08, 2019, 01:20:03 AM #3 Ultima modificación: Agosto 08, 2019, 11:54:42 PM por pioj
Cita de: Stunx date=1565187237Gracias por ayudar, pero no me funciono :(, me vuelvo loco con esto.
   


Es incorrecto, la dirección se calcula así:
 



   
       
   
   
      Vector3 heading = target.position - transform.position;
   
   
      float distance = heading.magnitude;
   
   
      Vector3 direction = heading / distance;
   
   
       
   

[/quote]
 
También puedes usar el Vector3.direction(targetPosition,transform.position);

Ya que está yo la calculo así:
 

Vector3 dir = ( target.position - transform.position ).normalized ;

 
@Stunx Si querés usar dos puntos (principio y fin) como en tu código original usa "Physics.LineCast"

Etiquetas: