111
This commit is contained in:
164
Assets/ThirdParty/Ciconia Studio/_Shared Files/Scripts/Demo/SuperCamera.cs
vendored
Normal file
164
Assets/ThirdParty/Ciconia Studio/_Shared Files/Scripts/Demo/SuperCamera.cs
vendored
Normal file
@@ -0,0 +1,164 @@
|
||||
using UnityEngine;
|
||||
using System.Collections;
|
||||
|
||||
public class SuperCamera : MonoBehaviour {
|
||||
|
||||
public GameObject pivot;
|
||||
|
||||
public KeyCode resetShortcut = KeyCode.Space;
|
||||
|
||||
[Range(0f, 100f)]
|
||||
public float rotationSensibility = 10f;
|
||||
public bool invertRotationX = false;
|
||||
public bool invertRotationY = false;
|
||||
|
||||
[Range(0f, 100f)]
|
||||
public float translationSensibility = 10f;
|
||||
public bool invertTranslationX = false;
|
||||
public bool invertTranslationY = false;
|
||||
|
||||
public float zoomMax = 2f;
|
||||
public float zoomMin = 20f;
|
||||
|
||||
[Range(0f, 100f)]
|
||||
public float wheelSensibility = 10;
|
||||
|
||||
|
||||
private float delayDoubleClic = 0.2f;
|
||||
|
||||
|
||||
private Vector3 oldCamPos;
|
||||
private Quaternion oldCamRot;
|
||||
private Vector3 oldMousePos;
|
||||
private float timeDoubleClic;
|
||||
private bool firstClic = false;
|
||||
private Vector3 pivotPos;
|
||||
|
||||
// Use this for initialization
|
||||
void Start () {
|
||||
pivotPos = pivot.transform.position;
|
||||
oldCamPos = Camera.main.transform.position;
|
||||
oldCamRot = Camera.main.transform.rotation;
|
||||
}
|
||||
|
||||
// Update is called once per frame
|
||||
void Update () {
|
||||
|
||||
Debug.DrawRay(pivotPos, Vector3.up, Color.red);
|
||||
Debug.DrawRay(pivotPos, Camera.main.transform.right, Color.green);
|
||||
|
||||
if (Input.GetKeyDown(resetShortcut))
|
||||
{
|
||||
Camera.main.transform.position = oldCamPos;
|
||||
Camera.main.transform.rotation = oldCamRot;
|
||||
}
|
||||
|
||||
float wheel = Input.GetAxis("Mouse ScrollWheel");
|
||||
if (wheel != 0f)
|
||||
{
|
||||
Vector3 movVec = (pivotPos - Camera.main.transform.position);
|
||||
movVec.Normalize();
|
||||
movVec *= wheel/ 20 * wheelSensibility;
|
||||
Vector3 newPos = Camera.main.transform.position + movVec;
|
||||
if ((newPos - pivotPos).magnitude >= zoomMax && (newPos - pivotPos).magnitude <= zoomMin)
|
||||
{
|
||||
Camera.main.transform.position = newPos;
|
||||
}
|
||||
}
|
||||
|
||||
bool doubleClic = false;
|
||||
|
||||
if (Input.GetMouseButtonDown(0))
|
||||
{
|
||||
if (firstClic)
|
||||
{
|
||||
doubleClic = true;
|
||||
firstClic = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
firstClic = true;
|
||||
timeDoubleClic = Time.time;
|
||||
}
|
||||
}
|
||||
|
||||
if (firstClic && Time.time - timeDoubleClic > delayDoubleClic)
|
||||
{
|
||||
firstClic = false;
|
||||
}
|
||||
|
||||
|
||||
if (doubleClic)
|
||||
{
|
||||
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
|
||||
RaycastHit hit;
|
||||
if (Physics.Raycast(ray, out hit))
|
||||
{
|
||||
pivotPos = hit.point;
|
||||
Debug.Log(hit.point);
|
||||
}
|
||||
else
|
||||
{
|
||||
pivotPos = pivot.transform.position;
|
||||
Debug.Log("reset Pivot");
|
||||
}
|
||||
}
|
||||
|
||||
if (!Input.GetMouseButton(0) && !Input.GetMouseButton(2))
|
||||
{
|
||||
//Cursor.lockState = CursorLockMode.Locked;
|
||||
Cursor.visible = true;
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
Cursor.visible = false;
|
||||
}
|
||||
|
||||
Vector3 mousePos = Input.mousePosition;
|
||||
|
||||
if (Input.GetMouseButtonDown(0) || Input.GetMouseButtonDown(2))
|
||||
{
|
||||
oldMousePos = mousePos;
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if (Input.GetMouseButton(2))
|
||||
{
|
||||
int factor = -1;
|
||||
if (invertTranslationX)
|
||||
{
|
||||
factor = 1;
|
||||
}
|
||||
gameObject.transform.Translate(new Vector3(factor * translationSensibility * (mousePos.x - oldMousePos.x) / 100f,0, 0));
|
||||
factor = -1;
|
||||
if (invertTranslationY)
|
||||
{
|
||||
factor = 1;
|
||||
}
|
||||
gameObject.transform.Translate(new Vector3(0, factor * translationSensibility * (mousePos.y - oldMousePos.y) / 100f, 0));
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
int factor = 1;
|
||||
if (invertRotationX)
|
||||
{
|
||||
factor = -1;
|
||||
}
|
||||
gameObject.transform.RotateAround(pivotPos, Vector3.up, factor * rotationSensibility * (mousePos.x - oldMousePos.x)/100f);
|
||||
factor = 1;
|
||||
if (invertRotationY)
|
||||
{
|
||||
factor = -1;
|
||||
}
|
||||
gameObject.transform.RotateAround(pivotPos, Camera.main.transform.right, factor * - rotationSensibility * (mousePos.y - oldMousePos.y)/100f);
|
||||
|
||||
}
|
||||
|
||||
|
||||
oldMousePos = mousePos;
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user