- Home /
Moving objects with mouse button. raycast
I have a script that when the left mouse button is pressed over an object it moves it around the screen. it works fine, the only problem is it moves the terrain if the is clicked just like all the other objects.
is there a way to implement something in the script that tells it to ignore the terrain whens its clicked so it deosnt move it.
thanks
this is the script which is attached to the main camera
using UnityEngine; using System.Collections;
public class MouseDrag : MonoBehaviour { private RaycastHit rayHit; private GameObject collideObj; private float distance; private Vector3 postionObj;
void Start ()
{
}
void Update()
{
if (Input.GetMouseButton(1))
{
var ray = camera.ScreenPointToRay(Input.mousePosition);
var hit = Physics.Raycast(ray.origin, ray.direction, out rayHit);
if (hit && ! lockObj)
{
collideObj = rayHit.collider.gameObject;
distance = rayHit.distance; /
Debug.Log(collideObj.name);
lockObj = true;
postionObj = ray.origin + distance * ray.direction;
collideObj.transform.position = new Vector3 (postionObj.x, postionObj.y, collideObj.transform.position.z);
}
else
{
lockObj = false;
}
}
Answer by maccabbe · Mar 02, 2015 at 04:50 AM
Put the terrain on a layer called "Terrain" and raycast for all layers except the terrain using layermask, i.e.
var hit = Physics.Raycast(ray.origin, ray.direction, out rayHit, Mathf.Infinity,
~(1<<LayerMask.NameToLayer("Terrain")));
http://docs.unity3d.com/ScriptReference/Physics.Raycast.html http://docs.unity3d.com/ScriptReference/LayerMask.html
Thanks for the reply. Just tried your solution but i get an error saying
Scene::raycastClosestShape: The maximum distance must be greater than zero! UnityEngine.Physics:Raycast(Vector3,Vector3, RaycastHit&, Single)
Fixed. Physics.Raycast was overriding the default value for distance ins$$anonymous$$d of layermask so I just manually input the default value for distance.
Your answer
Follow this Question
Related Questions
Moving to mouse click, for player which floats. 0 Answers
Turn off the rendering of a child with raycasting 0 Answers
Raycast Not Casting Java Script 1 Answer
Object Selection with large number of objects 1 Answer
Mouse controlled Laserpointer 1 Answer