Keep getting walkable although I am pointing on enemies

rpg_s01_using_raycasts_to_query_click

#1

when I point on the red enemies I still get walkable. I made sure that all enemies have layer enemies and that their corresponding integers are correct in the utility class. Any ideas why


#2

Hi Habiba,

Can you pop a screenshot up of the Layer Priorites property from the Inspector, it’s a member variable of the CameraRaycaster.cs script component from memory, so select whichever GameObject in the Hierarchy has that attached.


#3

problem1

It is attached to the camera arm object


#4

Ok, so that looks good. Often people have the layers in a different order.

Can you copy/paste your CameraRaycaster.cs script too.


See also;


#5
using UnityEngine;

public class CameraRaycaster : MonoBehaviour
{

    RaycastHit m_hit;
    Layer m_layerHit;
    [SerializeField] float distanceToBackground = 100f;
    Camera viewCamera;

    public Layer[] layerPriorities = {
        Layer.Enemy,
        Layer.Walkable
    };

   

   
    public RaycastHit hit
    {
        get { return m_hit; }
    }

    
    public Layer layerHit
    {
        get { return m_layerHit; }
    }

    void Start() // TODO Awake?
    {
        viewCamera = Camera.main;
    }

    void Update()
    {
        // Look for and return priority layer hit
        foreach (Layer layer in layerPriorities)
        {
           
            var hit = RaycastForLayer(layer);
            if (layer == Layer.Enemy)
            {
                Debug.Log("hit ? " + hit.HasValue);
            }
            if (hit.HasValue)
            {
               
                m_hit = hit.Value;
                m_layerHit = layer;
                return;
            }
        }

        // Otherwise return background hit
        m_hit.distance = distanceToBackground;
        m_layerHit = Layer.RaycastEndStop;
    }

    RaycastHit? RaycastForLayer(Layer layer)
    {
        int layerMask = 1 << (int)layer; // See Unity docs for mask formation
        Ray ray = viewCamera.ScreenPointToRay(Input.mousePosition);

        RaycastHit hit; // used as an out parameter
        bool hasHit = Physics.Raycast(ray, out hit, distanceToBackground, layerMask);
        if (hasHit)
        {
           // print("hit: " + layer);
            Debug.DrawLine(ray.origin, hit.point);
            return hit;
        }
        return null;
    }
}

The following part of the code always prints false even when I am pointing at an enemy

 if (layer == Layer.Enemy)
            {
                Debug.Log("hit ? " + hit.HasValue);
            }

#6

okay I figured it out. I forgot to add a collider to ethan. But for some reason mesh colliders do not work, I had to add a box collider. Thanks :smile:


#7

I was literally about to sit down and take a look at this for you, hehe, glad you’ve managed to resolve it :slight_smile:


#8

This topic was automatically closed 24 hours after the last reply. New replies are no longer allowed.