- Home /
Raycasting vs. Input.GetMouseButtonDown
Hi,
I have the following script on a scrolling menu:
var delay : float = 0.3;
private var clickTime : float = 0.0;
function Update () {
if(Input.GetMouseButtonDown(0)){
clickTime = Time.time;
}
if(Input.GetMouseButtonUp(0)){
if(Time.time - clickTime <= delay){
print("click");
Application.LoadLevel("MyLevel");
}
}
if(Input.GetMouseButton(0)){
if(Time.time - clickTime > delay){
print("move");
}
}
}
However, wherever I click it loads that level as opposed to only clicking where the box collider sits.
I tend to use raycasting where you can specify if "this" is hit, it does "that":
if(Input.GetMouseButtonDown(0)){
ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if(Physics.Raycast(ray, hit)){
if(hit.transform.name == "Icon"){
Application.LoadLevel("MyLevel");
Is there any way of achieving a similar result using the top script?
Answer by hollym16 · Dec 04, 2013 at 11:20 AM
Thanks for the help GameVortex. As reference for anyone else with the same problem, here's what I ended up with:
var delay : float = 0.3;
var hit : RaycastHit;
private var ray: Ray;
private var clickTime : float = 0.0;
function Update () {
if(Input.GetMouseButtonDown(0)){
clickTime = Time.time;
}
if(Input.GetMouseButtonUp(0)){
if(Time.time - clickTime <= delay){
ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast (ray, hit)) {
if(hit.transform.name == "MyLevel"){
Application.LoadLevel("MyLevel");
}
ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast (ray, hit)) {
if(hit.transform.name == "NextLevel"){
Application.LoadLevel("NextLevel");
}
}
if(Input.GetMouseButton(0)){
if(Time.time - clickTime > delay){
}
}
}
}
}
}
Answer by GameVortex · Dec 03, 2013 at 01:00 PM
You can easily detect if a collider has been clicked on with the mouse using the function OnMouseUpAsButton() of monobehaviour. This function will be called if the mouse is released on the same collider it was pressed. Just insert it into your script.
function OnMouseUpAsButton () {
Application.LoadLevel ("MyLevel");
}
If you need it do check for the time it has been pressed down, you can use the functions OnMouseUp() and OnMouseDown() as well.
Thanks for the reply. Is there a .JS equivalent for this as On$$anonymous$$ouse functions dont work on Android devices
There is no equivalent on android. You would have to use the raycast version ins$$anonymous$$d.