using System;
using UnityEngine;
public class FreeCamera : MonoBehaviour
{
private const float DragFactor = 30;
//跟随相机的物体
private GameObject _cameraFollowObj, _cameraFollowObj2;
public float _factorX = 0.5f, _factorY = 0.5f;
private Camera _localCamera;
[SerializeField]
private float _mouseSensitivity = 20.0f;
private GameObject _moveToPath;
public Vector3 _pos;
private float _scrollRate = 600;
[SerializeField]
private float _speed = 30.0f;
public float _www = 10;
public float _zzz = 2;
//public Vector3 ttt = new Vector3(0, -1, 0);
private void Awake()
{
_localCamera = GetComponent<Camera>();
_cameraFollowObj = GameObject.Find("Sphere_FollowCamera");
_cameraFollowObj2 = GameObject.Find("Sphere_FollowCamera (1)");
_moveToPath = GameObject.Find("MoveOnPath");
// var rd = gameObject.AddComponent<LineRenderer>();
// rd.SetVertexCount(2);
// rd.SetWidth(_zzz, _zzz);
// rd.SetColors(Color.red, Color.red);
}
private void UpdateFollowSphere()
{
#if false
RaycastHit hit;
Ray ray = new Ray(_cameraFollowObj.transform.position, Vector3.down);
if (Physics.Raycast(ray, out hit, _www))
{
// var rd = gameObject.GetComponent<LineRenderer>();
// rd.SetPosition(0, _cameraFollowObj.transform.position);
// rd.SetPosition(1, new Vector3(_cameraFollowObj.transform.position.x, hit.transform.position.y, _cameraFollowObj.transform.position.z));
// rd.SetWidth(_zzz, _zzz);
// Debug.Log(hit.transform.gameObject.name);
// Debug.Log(hit.transform.position);
// _cameraFollowObj2.transform.position = new Vector3(_cameraFollowObj2.transform.position.x,
// hit.transform.position.y,
// _cameraFollowObj2.transform.position.z);
Vector3 pos = _cameraFollowObj.transform.position;
Debug.Log(hit.transform.position.y + ", " + hit.point.y);
//_cameraFollowObj2.transform.rotation = _cameraFollowObj.transform.rotation;
_cameraFollowObj2.transform.position = new Vector3(pos.x, hit.point.y, pos.z);
}
#endif
// Vector3 centerPos = new Vector3(Screen.width * .5f, Screen.height * .5f, 0);
// Vector3 pos = Camera.main.ScreenToWorldPoint(centerPos);
// Ray ray = new Ray(_cameraFollowObj.transform.position, Vector3.down);
// RaycastHit hit;
//
// if (Physics.Raycast(ray, out hit))
// {
// _cameraFollowObj2.transform.position = hit.point;
// Debug.Log(hit.point);
// }
}
private void Update()
{
// UpdateFollowSphere();
if (Input.GetMouseButton(0))
{
float deltaX = Input.GetAxis("Mouse X")*Time.deltaTime*60;
float deltaY = Input.GetAxis("Mouse Y")*Time.deltaTime*60;
if (Mathf.Abs(deltaX) > Mathf.Abs(deltaY))
transform.RotateAround(_cameraFollowObj.transform.position, Vector3.up, deltaX);
else transform.RotateAround(_cameraFollowObj.transform.position, transform.right, -deltaY);
}
if (Input.GetMouseButton(2))
{
float deltaX = Input.GetAxis("Mouse X")*Time.deltaTime*DragFactor;
float deltaY = Input.GetAxis("Mouse Y")*Time.deltaTime*DragFactor;
transform.position += transform.right*deltaX;
transform.position += Quaternion.AngleAxis(-90, Vector3.up)*transform.right*deltaY;
}
if (Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift))
{
_speed = 40;
_mouseSensitivity = 80;
_scrollRate = 3000;
}
else if (Input.GetKey(KeyCode.LeftAlt) || Input.GetKey(KeyCode.RightAlt))
{
_speed = 0.5f;
_mouseSensitivity = 10;
_scrollRate = 100;
}
else
{
_speed = 10;
_mouseSensitivity = 50;
_scrollRate = 600;
}
float scrollWheel = Input.GetAxis("Mouse ScrollWheel")*_scrollRate*Time.deltaTime;
if (Math.Abs(scrollWheel) > 0.00001)
{
transform.position = Vector3.LerpUnclamped(transform.position, _cameraFollowObj.transform.position,
scrollWheel);
}
if (Input.GetKey(KeyCode.W))
{
transform.position += Quaternion.AngleAxis(-90, Vector3.up)*transform.right*_speed*Time.deltaTime;
}
if (Input.GetKey(KeyCode.S))
{
transform.position -= Quaternion.AngleAxis(-90, Vector3.up)*transform.right*_speed*Time.deltaTime;
}
if (Input.GetKey(KeyCode.A))
{
transform.position -= transform.right*_speed*Time.deltaTime;
}
if (Input.GetKey(KeyCode.D))
{
transform.position += transform.right*_speed*Time.deltaTime;
}
if (Input.GetKey(KeyCode.UpArrow))
{
transform.position += Vector3.up*_speed*Time.deltaTime * 0.6f;
}
if (Input.GetKey(KeyCode.DownArrow))
{
transform.position -= Vector3.up*_speed*Time.deltaTime * 0.6f;
}
//旋转
if (Input.GetKey(KeyCode.Q))
{
transform.RotateAround(_cameraFollowObj.transform.position, transform.right, -_mouseSensitivity*Time.deltaTime);
}
if (Input.GetKey(KeyCode.E))
{
transform.RotateAround(_cameraFollowObj.transform.position, transform.right, _mouseSensitivity*Time.deltaTime);
}
#if false
if (Input.GetKey(KeyCode.Z))
{
transform.RotateAround(cameraFollowObj.transform.position, transform.forward, -mouseSensitivity * Time.deltaTime);
}
if (Input.GetKey(KeyCode.X) || Input.GetKey(KeyCode.C))
{
transform.RotateAround(cameraFollowObj.transform.position, transform.forward, mouseSensitivity * Time.deltaTime);
}
#endif
if (Input.GetKey(KeyCode.LeftArrow))
{
transform.RotateAround(_cameraFollowObj.transform.position, Vector3.up, _mouseSensitivity*Time.deltaTime);
}
if (Input.GetKey(KeyCode.RightArrow))
{
transform.RotateAround(_cameraFollowObj.transform.position, Vector3.up, -_mouseSensitivity*Time.deltaTime);
}
}
}
unity相机操作
最新推荐文章于 2024-05-16 21:45:02 发布