200 lines
5.7 KiB
C#
200 lines
5.7 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using System.Collections.ObjectModel;
|
|
using UnityEngine;
|
|
|
|
|
|
|
|
|
|
using System.Runtime.InteropServices;
|
|
|
|
|
|
|
|
public class Smooth3DCamera : MonoBehaviour
|
|
{
|
|
|
|
public GameObject donahua1, donahua2, donahua3, donahua4, donahua5, donahua6, donahua7, donahua8, donahua9, donahua10, donahua11, donahua12, donahua13, donahua14, donahua15, donahua16, donahua17, donahua18, donahua19;
|
|
public Transform pivot;
|
|
public float distance = 10.0f;
|
|
public float minDistance = 2f;
|
|
public float maxDistance = 15f;
|
|
public float zoomSpeed = 1f;
|
|
public float xSpeed = 250.0f;
|
|
public float ySpeed = 250.0f;
|
|
public bool allowYTilt = true;
|
|
public float yMinLimit = -90f;
|
|
public float yMaxLimit = 90f;
|
|
private float x = 0.0f;
|
|
private float y = 0.0f;
|
|
private float targetX = 0f;
|
|
private float targetY = 0f;
|
|
public float targetDistance = 0f;
|
|
private float xVelocity = 1f;
|
|
private float yVelocity = 1f;
|
|
private float zoomVelocity = 1f;
|
|
|
|
private void Start()
|
|
{
|
|
// donahua1.SetActive(false);
|
|
// donahua2.SetActive(false);
|
|
// donahua3.SetActive(false);
|
|
// donahua3.SetActive(false);
|
|
// donahua4.SetActive(false);
|
|
// donahua5.SetActive(false);
|
|
// donahua6.SetActive(false);
|
|
// donahua7.SetActive(false);
|
|
// donahua8.SetActive(false);
|
|
// donahua9.SetActive(false);
|
|
// donahua10.SetActive(false);
|
|
// donahua11.SetActive(false);
|
|
// donahua12.SetActive(false);
|
|
// donahua13.SetActive(false);
|
|
// donahua14.SetActive(false);
|
|
// donahua15.SetActive(false);
|
|
// donahua16.SetActive(false);
|
|
// donahua17.SetActive(false);
|
|
// donahua18.SetActive(false);
|
|
// donahua19.SetActive(false);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var angles = transform.eulerAngles;
|
|
targetX = x = angles.y;
|
|
targetY = y = angles.x;
|
|
targetDistance = distance;
|
|
}
|
|
|
|
|
|
public void Donghua(int a)
|
|
{
|
|
switch(a)
|
|
{
|
|
case 1 :
|
|
pivot = donahua1.transform;
|
|
donahua1.SetActive(true);
|
|
break;
|
|
case 2:
|
|
pivot = donahua2.transform;
|
|
donahua2.SetActive(true);
|
|
break;
|
|
case 3:
|
|
pivot = donahua3.transform;
|
|
donahua3.SetActive(true);
|
|
break;
|
|
case 4:
|
|
pivot = donahua4.transform;
|
|
donahua4.SetActive(true);
|
|
break;
|
|
case 5:
|
|
pivot = donahua5.transform;
|
|
donahua5.SetActive(true);
|
|
break;
|
|
case 6:
|
|
pivot = donahua6.transform;
|
|
donahua6.SetActive(true);
|
|
break;
|
|
case 7:
|
|
pivot = donahua7.transform;
|
|
donahua7.SetActive(true);
|
|
break;
|
|
case 8:
|
|
pivot = donahua8.transform;
|
|
donahua8.SetActive(true);
|
|
break;
|
|
case 9:
|
|
pivot = donahua9.transform;
|
|
donahua9.SetActive(true);
|
|
break;
|
|
case 10:
|
|
pivot = donahua10.transform;
|
|
donahua10.SetActive(true);
|
|
break;
|
|
case 11:
|
|
pivot = donahua11.transform;
|
|
donahua11.SetActive(true);
|
|
break;
|
|
case 12:
|
|
pivot = donahua12.transform;
|
|
donahua12.SetActive(true);
|
|
break;
|
|
case 13:
|
|
pivot = donahua13.transform;
|
|
donahua13.SetActive(true);
|
|
break;
|
|
case 14:
|
|
pivot = donahua14.transform;
|
|
donahua14.SetActive(true);
|
|
break;
|
|
case 15:
|
|
pivot = donahua15.transform;
|
|
donahua15.SetActive(true);
|
|
break;
|
|
case 16:
|
|
pivot = donahua16.transform;
|
|
donahua16.SetActive(true);
|
|
break;
|
|
case 17:
|
|
pivot = donahua17.transform;
|
|
donahua17.SetActive(true);
|
|
break;
|
|
case 18:
|
|
pivot = donahua18.transform;
|
|
donahua18.SetActive(true);
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
private void LateUpdate()
|
|
{
|
|
|
|
if (!pivot) return;
|
|
|
|
if (Input.GetAxis("Mouse ScrollWheel") > 0.0f)
|
|
{
|
|
targetDistance -= zoomSpeed;
|
|
}
|
|
else if (Input.GetAxis("Mouse ScrollWheel") < 0.0f)
|
|
{
|
|
targetDistance += zoomSpeed;
|
|
}
|
|
targetDistance = Mathf.Clamp(targetDistance, minDistance, maxDistance);
|
|
if (Input.GetMouseButton(0))
|
|
{
|
|
targetX += Input.GetAxis("Mouse X") * xSpeed * 0.02f;
|
|
if (allowYTilt)
|
|
{
|
|
targetY -= Input.GetAxis("Mouse Y") * ySpeed * 0.02f;
|
|
targetY = ClampAngle(targetY, yMinLimit, yMaxLimit);
|
|
}
|
|
}
|
|
x = Mathf.SmoothDampAngle(x, targetX, ref xVelocity, 0.3f);
|
|
y = allowYTilt ? Mathf.SmoothDampAngle(y, targetY, ref yVelocity, 0.3f) : targetY;
|
|
Quaternion rotation = Quaternion.Euler(y, x, 0);
|
|
//Debug.Log(rotation);
|
|
distance = Mathf.SmoothDamp(distance, targetDistance, ref zoomVelocity, 1f);
|
|
Vector3 position = rotation * new Vector3(0.0f, 0.0f, -distance) + pivot.position;
|
|
transform.rotation = rotation;
|
|
transform.position = position;
|
|
}
|
|
|
|
|
|
private static float ClampAngle(float angle, float min, float max)
|
|
{
|
|
if (angle < -360) angle += 360;
|
|
if (angle > 360) angle -= 360;
|
|
return Mathf.Clamp(angle, min, max);
|
|
}
|
|
}
|