全方位观看物体《Camera》

/**
 * Camera orbit controls.
 */

using UnityEngine;
using System.Collections;

namespace ProBuilder2.Examples
{
	public class CameraControls : MonoBehaviour
	{
		const string INPUT_MOUSE_SCROLLWHEEL = "Mouse ScrollWheel";
		const string INPUT_MOUSE_X = "Mouse X";
		const string INPUT_MOUSE_Y = "Mouse Y";
		const float MIN_CAM_DISTANCE = 10f;
		const float MAX_CAM_DISTANCE = 40f;

		// how fast the camera orbits
		[Range(2f, 15f)]
		public float orbitSpeed = 6f;

		// how fast the camera zooms in and out
		[Range(.3f,2f)]
		public float zoomSpeed = .8f;

		// the current distance from pivot point (locked to Vector3.zero)
		float distance = 0f;

		// how fast the idle camera movement is
		public float idleRotation = 1f;

		private Vector2 dir = new Vector2(.8f, .2f);

		void Start()
		{
			distance = Vector3.Distance(transform.position, Vector3.zero);
		}

		void LateUpdate()
		{
			Vector3 eulerRotation = transform.localRotation.eulerAngles;
			eulerRotation.z = 0f;

			// orbits
			if( Input.GetMouseButton(0) )
			{
				float rot_x = Input.GetAxis(INPUT_MOUSE_X);
				float rot_y = -Input.GetAxis(INPUT_MOUSE_Y);

				eulerRotation.x += rot_y * orbitSpeed;
				eulerRotation.y += rot_x * orbitSpeed;

				// idle direction is derived from last user input.
				dir.x = rot_x;
				dir.y = rot_y;
				dir.Normalize();
			}
			else
			{
				eulerRotation.y += Time.deltaTime * idleRotation * dir.x;
				eulerRotation.x += Time.deltaTime * Mathf.PerlinNoise(Time.time, 0f) * idleRotation * dir.y;
			}

			transform.localRotation = Quaternion.Euler( eulerRotation );
			transform.position = transform.localRotation * (Vector3.forward * -distance);

			if( Input.GetAxis(INPUT_MOUSE_SCROLLWHEEL) != 0f )
			{
				float delta = Input.GetAxis(INPUT_MOUSE_SCROLLWHEEL);

				distance -= delta * (distance/MAX_CAM_DISTANCE) * (zoomSpeed * 1000) * Time.deltaTime;
				distance = Mathf.Clamp(distance, MIN_CAM_DISTANCE, MAX_CAM_DISTANCE);
				transform.position = transform.localRotation * (Vector3.forward * -distance);
			}
		}
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值