Victor Seguin
Victor Seguin

Reputation: 11

Why is my raycast not detecting the object?

Im currently on a project where i need to detect if an object is in front of an other, so if it's the case the object can't move, because one is in front of it, and if not the object can move. So im using here a raycast, and if the ray hit something I turn a bool to true. And in my scene, the ray hits but never turning it to true. I precise that both of my objects as 2D colliders and my raycast is a 2DRaycast, I previously add to tick "Queries Start in colliders" in physics 2D so my ray won't detect the object where I cast it. Please save me. Here is my code :

float rayLength = 1f;
private bool freeze = false;
private bool moving = false;
private bool behindSomeone = false;
Rigidbody2D rb2D;
public GameObject cara_sheet;
public GameObject Monster_view;
public GameObject monster;

void Start()
{
    rb2D = GetComponent<Rigidbody2D>();
}

void Update()
{
    Movement();
    DetectQueuePos();
}

private void Movement()
{
    if(freeze || behindSomeone) 
    {
        return;
    }

    if(Input.GetKeyDown(KeyCode.Space))
    {
        Debug.Log("Move");
        moving = true;
        //transform.Translate(Vector3.up * Time.deltaTime, Space.World);
    }
    
    if(moving)
    {
        transform.Translate(Vector3.up * Time.deltaTime, Space.World);
    }
     
}

private void OnTriggerEnter2D(Collider2D collision)
{
    
    if (!collision.CompareTag("Bar"))
    {
        return;
    }

    StartCoroutine(StartFreeze());
    
}

public void DetectQueuePos()
{
    RaycastHit2D hit = Physics2D.Raycast(this.transform.position, this.transform.position + this.transform.up * rayLength, 2f);
    Debug.DrawLine(this.transform.position, this.transform.position + this.transform.up * rayLength, Color.red, 2f);

    if (hit.collider != null)
    {
        print(hit.collider.name);
    }

    if(hit.collider != null)
    {   
        Debug.Log("Behind true");
        //Destroy(hit.transform.gameObject);
        behindSomeone = true;
        
    }
}

IEnumerator StartFreeze()
{
    yield return new WaitForSeconds(1f);
    rb2D.constraints = RigidbodyConstraints2D.FreezeAll;
    freeze = true;
    moving = false;

    cara_sheet.SetActive(true);
    Monster_view.SetActive(true);
}

Example Screenshot

Upvotes: 0

Views: 3349

Answers (1)

derHugo
derHugo

Reputation: 90639

While Debug.DrawLine expects a start position and an end position a Physics2D.Raycast expects a start position and a direction.

You are passing in what you copied from the DrawLine

this.transform.position + this.transform.up * rayLength

which is a position, not a direction (or at least it will a completely useless one)! Your debug line and your raycast might go in completely different directions!

In addition to that you let the line have the length rayLength but in your raycasts you pass in 2f.

It should rather be

Physics2D.Raycast(transform.position, transform.up, rayLength)

Upvotes: 1

Related Questions