- Home /
Not firing a ray (C#)
Hello, I have a script in which a left click sends out a ray to select the object. It works fine, but the one for my right click doesn't. I can't seem to figure out why. Here's the code:
using UnityEngine;
using System.Collections;
/*ISSUE SECT:
AT THE MOMENT, PLAYER IS MOVING IN THE DIRECTION OF THE POINTER NOT **TO** THE POINTER
*/
public class Control : MonoBehaviour
{
//Variable Declaration
//public Vector3 rayPoint;
public GameObject player;
public bool rayFired = false;
public bool selected = false;
// Raybased Variables
public RaycastHit hit = new RaycastHit ();
public Ray thisRay;
void Start ()
{
}
//Selected checks to see if you have selected "Player".
void Selected ()
{
//Using my Ray variable. Tying it to the screenpoint of the main camera.
thisRay = Camera.main.ScreenPointToRay (Input.mousePosition);
//So if it doesn't hit anything, return (early leave from function)
if (!Physics.Raycast (thisRay, out hit))
return;
//If the collider/rigidbody hit reads "Player"
if (hit.transform.CompareTag ("Player")) {
selected = true;
hit.transform.renderer.material.color = Color.blue;
}
}
void MovePlayer ()
{
if (selected == true) {
Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out hit);
}
}
//Update will deal with inputs.
void Update ()
{
//If left click access Select Method.
if (Input.GetMouseButtonDown (0))
{
Selected ();
}
if (Input.GetMouseButtonDown (1))
{
MovePlayer ();
}
Debug.DrawLine (thisRay.origin, hit.point, Color.red);
}
}
The issue occurs within the MovePlayer() method imo.
Answer by JeffreyD · Apr 05, 2014 at 03:43 PM
It looks to me as if your code is working. See my debug additions below.
Not sure what your trying to do. Do you want to lerp the selected object from the selected left mouse position to the right mouse position? or "glue" the object to the mouse on left mouse selection and drag the object on the right mouse selection?
using UnityEngine;
using System.Collections;
/*ISSUE SECT:
AT THE MOMENT, PLAYER IS MOVING IN THE DIRECTION OF THE POINTER NOT **TO** THE POINTER
*/
public class RayCastMouse : MonoBehaviour
{
//Variable Declaration
//public Vector3 rayPoint;
public GameObject player;
public bool rayFired = false;
public bool selected = false;
// Raybased Variables
public RaycastHit hit = new RaycastHit ();
public Ray thisRay;
void Start ()
{
}
//Selected checks to see if you have selected "Player".
void Selected ()
{
//Using my Ray variable. Tying it to the screenpoint of the main camera.
thisRay = Camera.main.ScreenPointToRay (Input.mousePosition);
//So if it doesn't hit anything, return (early leave from function)
if (!Physics.Raycast (thisRay, out hit))
return;
//If the collider/rigidbody hit reads "Player"
if (hit.transform.CompareTag ("Player"))
{
Debug.Log ("Selected hit is " + hit);
selected = true;
hit.transform.renderer.material.color = Color.blue;
}
}
void MovePlayer ()
{
Debug.Log ("MovePlayer check Selected is " + selected);
//if (selected == true)
//{
Debug.Log ("MovePlayer do RayCast");
Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out hit);
Debug.DrawLine (Camera.main.ScreenPointToRay(Input.mousePosition).origin, hit.point, Color.green);
Debug.Log ("MovePlayer hit is " + hit);
if (hit.transform.CompareTag ("Player"))
{
hit.transform.renderer.material.color = Color.red;
}
//}
}
//Update will deal with inputs.
void Update ()
{
//If left click access Select Method.
if (Input.GetMouseButtonDown (0))
{
Selected ();
Debug.DrawLine (thisRay.origin, hit.point, Color.red);
}
if (Input.GetMouseButtonDown (1))
{
MovePlayer ();
//Debug.DrawLine (thisRay.origin, hit.point, Color.green);
}
}
}
PS. You will see a NULL error if you run this code and right mouse off of the object after having selected it with the left mouse. I was only trying to proof out the ray cast.
Your answer
Follow this Question
Related Questions
Multiple Cars not working 1 Answer
RAYCAST KNOWLEDGE HELP!!! 1 Answer
Raycast length must be equal to the target distance 2 Answers
Can I fake physics? 1 Answer
Melee-like function? 1 Answer