Raycast + Collider + Mouse
Hi Everyone. A rookie is seeking for help concerning the following:
In my scene I have:
1. a Knob with a ParentScript attached.
2. a 3 selectable areas identified by 3 empty GameObjects (BoxCollider), each of them sending a variable to the ParentScript when hit by the Mouse.
3. each of the BoxColliders defines the relative rotation of the Parent (the Knob).
Now... the logic doesn't work...and I do not understand where is my mistake... since 1 month... I really appreciate a help to explain my error...
When the Mouse hits the OPEN Collider, the Knob goes to other position instead of remaining in OPEN; as well the functionality of the Mouse switches from OPEN to SHUT...
Ok, basically a rookie disaster...
Thanks in advance!
here is the code:
public class ParentScript: MonoBehaviour {
public int posCounter =1;
public void OnMouseDown (ChildScript childScript)
{}
}
public class ChildScript: MonoBehaviour
{
//public GameObject PackFlowKnob;
public Vector3 hiRotKnobAngleEnd = new Vector3 (0 ,0, -54.2f);
public Vector3 normRotKnobAngleEnd = new Vector3 (0 ,0, 0);
public Vector3 loRotKnobAngleEnd = new Vector3 (0 ,0, 54.2f);
public GameObject objectHit ;
public Camera main;
void OnMouseDown ()
{
transform.parent.GetComponent<ParentScript>().OnMouseDown(this);
RaycastHit hit= new RaycastHit ();
Ray ray = main.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast (ray, out hit)) {
Transform objectHit = hit.transform;
//Debug.Log ("objectHit name " + objectHit + " ... objectHit.tag " + objectHit.tag);
if ((objectHit.name == "Open") && (transform.parent.GetComponent<ParentScript>().posCounter != 2)) {
transform.parent.rotation = Quaternion.Euler (hiRotKnobAngleEnd);
//Debug.Log ("Open pos: " + objectHit);
//Debug.Log (transform.parent.GetComponent<ParentScript> ().posCounter);
//Debug.Log ("right " + transform.parent.rotation + " and ObjHit " + objectHit.name);
this.transform.parent.GetComponent<ParentScript>().posCounter = 2;
objectHit = null ;
return;
}
if ((objectHit.name == "Shut") && (transform.parent.GetComponent<ParentScript>().posCounter != 0)) {
transform.parent.rotation = Quaternion.Euler (loRotKnobAngleEnd);
//Debug.Log ("Shut pos: " + objectHit);
//Debug.Log ("Left " + transform.parent.rotation + " and ObjHit " + objectHit.name);
//Debug.Log (transform.parent.GetComponent<ParentScript> ().posCounter);
this.transform.parent.GetComponent<ParentScript>().posCounter = 0;
objectHit = null;
return;
}
if ((objectHit.name == "Auto") && (transform.parent.GetComponent<ParentScript>().posCounter == 1)) {
transform.parent.rotation = Quaternion.Euler (normRotKnobAngleEnd);
//Debug.Log ("Auto pos: " + objectHit);
//Debug.Log ("Center " + transform.parent.rotation + " and ObjHit " + objectHit.name);
//Debug.Log (transform.parent.GetComponent<ParentScript> ().posCounter);
this.transform.parent.GetComponent<ParentScript>().posCounter = 1;
objectHit = null ;
return;
}
}
}
}
Your answer
Follow this Question
Related Questions
Create a custom polygon collider based on overlapping ogjects 0 Answers
Raycast not detecting? 0 Answers
Laser Raycast collision point - invert collider 0 Answers
Resize a one child object with raycasting or collision 0 Answers
Collide with an infinite plane 0 Answers