Drag Camera only when raycasting Terrain

Hey! I have a Simple Draggable Camera Script

using UnityEngine;
using System.Collections;

public class ViewDrag : MonoBehaviour {
	Vector3 hit_position = Vector3.zero;
	Vector3 current_position = Vector3.zero;
	Vector3 camera_position = Vector3.zero;
	float z = 0.0f;
	
	// Use this for initialization
	void Start () {
		
	}
	
	void Update(){
		if(Input.GetMouseButtonDown(0)){
			hit_position = Input.mousePosition;
			camera_position = transform.position;
			
		}
		if(Input.GetMouseButton(0)){
			current_position = Input.mousePosition;
			LeftMouseDrag();        
		}
	}
	
	void LeftMouseDrag(){
		current_position.z = hit_position.z = camera_position.y;

		Vector3 direction = Camera.main.ScreenToWorldPoint(current_position) - Camera.main.ScreenToWorldPoint(hit_position);
		
		// Invert direction to that terrain appears to move with the mouse.
		direction = direction * -1;
		
		Vector3 position = camera_position + direction;
		
		transform.position = position;
	}
}

and i wanted to ask, how can i change the script in a way, that it is only reacting, when the mouse is hitting the layer “Floor”?

my problem is that i have this draggable camera script and a NGUI scroll panel in my game. so every time i drag the scroll panel, the whole world/camera is also dragging

I believe the function you seek is Physics.Raycast

One of the variables you can use in the RayCast statement is filtering it through layers…

So from a design perspective, I would:

–put my UI on a new layer called “UI”

–put my Terrain on a new layer called “Terrain”

–Determine if mousebuttondown(0) == true

–if it is true, then use the physics.raycast to cast a ray from the camera to the 3dworld space, but also using the filter settings to check for BOTH: UI and Terrain

Now define it a little further…

–if the out HitInfo.collider.gameObject.layer was the UI layer - then only adjust the scrolling UI

–if the out HitInfo.collider.gameObject.layer was the terrain layer - then use your camera dragging code

Let me know if you have confusion in setting up LayerMask or the Physics.Raycast code…