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.
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);
}
}
}