- Home /
Picking up / using an item via raycast click
Hey all,
I'm making a 1st person RPG with Grid movement (like old school Dungeon Master or Black Crypt), and am having a problem with the input. I'm using raycasting for all of this. Basically, you click on any item present in the world (clothes, armour, switches, doors, etc), it checks what tag that item has and then does whatever appropriate action (flip switch, pick up item..).
Problem with the raycast is that it's only working on a very specific part of the screen, the item needs to be dead centre, straight ahead. I've tried spherecasting but that doesn't seem to work either — an item to the right of the item you've clicked on gets picked up instead.
I've various versions of it working (but not great, the item can be at different places on the screen, but it seems arbitrary, it works sometimes, other times not) and not working at all — I'm trying to make a relatively self contained set up so I can try it with a few different levels. It seems to have something to do with the camera and ScreenPointToRay, as well as scale, but I'm not really sure to be honest. Any help or a point in the right direction is welcome.
Code is below. If the problem seems bit a too vague then let me know and I can clarify or move it to the forums.
if( (Input.GetMouseButtonDown(0)) && (!ignoreRaycast) ) {
var ray = Camera.main.ScreenPointToRay(Input.mousePosition);
var hit: RaycastHit;
if (Physics.Raycast(ray, hit,clickDistance)) {
if (hit.transform.tag == "Item"){
Debug.Log(hit.transform.name);
hit.transform.GetComponent(Item).PickUp();
return;
}
if (itemBeingDragged){
itemBeingDragged.DropItem (this.transform, playerMove.facing, hit.point); // drop item (what,direction,where)
return;
}
if (hit.transform.tag == "Switch"){
Debug.Log(hit.transform.name);
hit.transform.GetComponent(DoorSwitch).FlipSwitch();
return;
}
}
}
Your answer
Follow this Question
Related Questions
Move player with mouse help 0 Answers
How to get UI element into HMD Unity 5.3.4p1 - Oculus Utilities 1.3 0 Answers
Using RayCast to Get Mouse Input 1 Answer
Raycast Ignoring Distance 1 Answer
Simple (?) touch-command on iPhone 2 Answers