using UnityEngine;
|
|
using System.Collections;
|
|
using UnityEngine.UI;
|
|
|
|
public class magnetGun2 : MonoBehaviour {
|
|
|
|
public Camera camera;
|
|
public GameObject crossHair;
|
|
public GameObject gravityWell;
|
|
public thirdPersonController playerController;
|
|
|
|
public float magnetMaxRange;
|
|
public float magnetMinRange;
|
|
|
|
private Collider gravityTarget;
|
|
|
|
|
|
// Use this for initialization
|
|
void Start () {
|
|
magnetMinRange += playerController.cameraDistance;
|
|
magnetMaxRange += playerController.cameraDistance;
|
|
|
|
|
|
|
|
}
|
|
|
|
// Update is called once per frame
|
|
void Update () {
|
|
|
|
RaycastHit target = testItem ();
|
|
|
|
if (gravityTarget != null)
|
|
pickUpItem (target);
|
|
|
|
}
|
|
|
|
//test to see if player can move item
|
|
private RaycastHit testItem(){
|
|
RaycastHit hit;
|
|
|
|
//resets cross hair to white
|
|
crossHair.GetComponent<RawImage> ().color = Color.white;
|
|
|
|
//cast ray from camera through the crosshair on screen
|
|
Ray ray = camera.ScreenPointToRay (crossHair.transform.position);
|
|
Debug.DrawRay (ray.origin, ray.direction*magnetMaxRange, Color.green);
|
|
|
|
// if player can pickup object turn crosshair red
|
|
// if object is close enougth to move with it turn blue;
|
|
if (Physics.Raycast (ray, out hit, magnetMaxRange)) {
|
|
if (hit.collider.tag == "moveable"){
|
|
gravityTarget = hit.collider;
|
|
Debug.DrawRay (ray.origin,ray.direction*magnetMaxRange, Color.red);
|
|
crossHair.GetComponent<RawImage>().color = Color.red;
|
|
if (Vector3.Distance (hit.point, camera.transform.position) <= magnetMinRange) {
|
|
crossHair.GetComponent<RawImage>().color = Color.blue;
|
|
}//end blue
|
|
}//end red
|
|
}//end raycast
|
|
return hit;
|
|
}// end testItem()
|
|
|
|
|
|
private void pickUpItem(RaycastHit hit){
|
|
Collider item = hit.collider;
|
|
|
|
//prepares item to be lifted
|
|
item.attachedRigidbody.useGravity = false;
|
|
item.attachedRigidbody.drag = 3.0f;
|
|
item.attachedRigidbody.constraints = RigidbodyConstraints.FreezeRotation;
|
|
|
|
gravityWell.transform.position = item.transform.position;
|
|
|
|
transform.LookAt (gravityWell.transform.position, Vector3.up);
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|