Jump to content
UnitySpain
Sign in to follow this  
Stunx

Problemas con un raycast en Unity!

Recommended Posts

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 :8_laughing:.

Share this post


Link to post
Share on other sites

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

Edited by Igor

Share this post


Link to post
Share on other sites
4 hours ago, Igor said:

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

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

Share this post


Link to post
Share on other sites
On 8/7/2019 at 4:13 PM, Stunx said:

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

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

Quote

 

Vector3 heading = target.position - transform.position;

float distance = heading.magnitude;

Vector3 direction = heading / distance;

 

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

Edited by pioj
Por favor, usa el <> o el "quote" para pegar código.

Share this post


Link to post
Share on other sites

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"

Share this post


Link to post
Share on other sites
Sign in to follow this  

×
×
  • Create New...