OnMouseDown() isn’t working for me.
Here’s some info related to things I’ve read could cause this problem.
- I have two cameras (one renders to a
target texture, the other acts as the
- Both are orthographic.
- Their clipping planes are not negative
- Their z is -100
- I have things I’m trying to click
- They have BoxCollider2Ds.
- They are the only things with
colliders, so there should be
shouldn’t be any colliders between
them and the camera.
- Their z is 30
Ok, are those objects with coliders children of someone? I had problems once with coliders of children of a parent with collider
Turns out my problem was because of some things I did when following Pushy Pixel’s Pixel Perfect tutorial that basically resulted in camera/screen things being slightly wonky – and by extension, the mouse. My solution was to create a custom mouse object, and then using its location henceforth. I also had to use a Box Collider instead of a Box Collider 2D.
Attach this to your mouse object. CharController is just the object I wanted to click on, and MouseEnter, MouseDrag, etc, are custom functions within that object
Vector3 lastPosition; // Where the mouse position was last
const int z = 0;
Cursor.visible = false; // hide OS cursor
lastPosition = Input.mousePosition;
Vector3 mousePos = Input.mousePosition;
// If the mouse has moved since the last update
if (mousePos != lastPosition)
lastPosition = mousePos;
Vector3 tempPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
tempPos.z = z; // preserve z
transform.position = tempPos;
public void CheckMouse()
Ray ray = new Ray (transform.position, new Vector3(0, 0, GlobConsts.maxDepth)); // ray from mouse directly downwards
if (Physics.Raycast(ray, out hit))
currentChar = hit.collider.GetComponent<CharController>();
if (currentChar != lastChar)
lastChar = currentChar;
else if(lastChar != null)
lastChar = null;