unity3d 2d游戏之鼠标拉近旋转拖拽模型

  unity3d 2d游戏之鼠标拉近旋转拖拽模型

今天帮一个朋友看了个虚拟现实的项目,他希望实现鼠标滚动拉近模型、鼠标右键旋转模型、鼠标中键拖拽模型,部分功能网上已经有答案、但是合在一起的没有找到,哪么我就加以总结把把功能都写在这个demo中吧。

  把如下代码直接挂在摄像机对象上。

  view source001using UnityEngine;

  002using System.Collections;

  003

  004public class Script_07_11 : MonoBehaviour

  005{

  006

  007 public Transform target;

  008 private int MouseWheelSensitivity = 1;

  009 private int MouseZoomMin = 1;

  010 private int MouseZoomMax = 5;

  011 private float normalDistance = 3;

  012

  013 private Vector3 normalized;

  014

  015 private float xSpeed = 250.0f;

  016 private float ySpeed = 120.0f;

  017

  018 private int yMinLimit = -20;

  019 private int yMaxLimit = 80;

  020

  021 private float x = 0.0f;

  022 private float y = 0.0f;

  023

  024 private Vector3 screenPoint;

  025 private Vector3 offset;

  026

  027 private Quaternion rotation = Quaternion.Euler(new Vector3(30f,0f,0f));

  028 private Vector3 CameraTarget;

  029 void Start ()

  030 {

  031

  032 CameraTarget = target.position;

  033

  034 float z = target.transform.position.z - normalDistance;

  035 transform.position = rotation * new Vector3(transform.position.x,transform.position.y,z);

  036

  037 transform.LookAt(target);

  038

  039 var angles = transform.eulerAngles;

  040 x = angles.y;

  041 y = angles.x;

  042 }

  043

  044 void Update ()

  045 {

  046

  047 if(Input.GetMouseButton(1))

  048 {

  049 x += Input.GetAxis("Mouse X") * xSpeed * 0.02f;

  050 y -= Input.GetAxis("Mouse Y") * ySpeed * 0.02f;

  051

  052 y = ClampAngle(y, yMinLimit, yMaxLimit);

  053

  054 var rotation = Quaternion.Euler(y, x, 0);

  055 var position = rotation * new Vector3(0.0f, 0.0f, -normalDistance) + CameraTarget;

  056

  057 transform.rotation = rotation;

  058 transform.position = position;

  059

  060 }else if (Input.GetAxis("Mouse ScrollWheel") != 0)

  061 {

  062 normalized = (transform.position - CameraTarget).normalized;

  063

  064 if (normalDistance >= MouseZoomMin && normalDistance <= MouseZoomMax)

  065 {

  066 normalDistance -= Input.GetAxis("Mouse ScrollWheel") * MouseWheelSensitivity;

  067 }

  068 if (normalDistance < MouseZoomMin)

  069 {

  070 normalDistance = MouseZoomMin;

  071 }

  072 if (normalDistance > MouseZoomMax)

  073 {

  074 normalDistance = MouseZoomMax;

  075 }

  076 transform.position = normalized * normalDistance;

  077

  078 }else if(Input.GetMouseButtonDown(2))

  079 {

  080 screenPoint = Camera.main.WorldToScreenPoint(target.transform.position);

  081 offset = target.transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z));

  082 }

  083

  084 if(Input.GetMouseButton(2))

  085 {

  086 Vector3 curScreenPoint = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z);

  087

  088 Vector3 curPosition = Camera.main.ScreenToWorldPoint(curScreenPoint) + offset;

  089 target.transform.position = curPosition;

  090 }

  091 transform.LookAt(CameraTarget);

  092

  093 }

  094

  095 static float ClampAngle (float angle , float min ,float max)

  096 {

  097 if (angle < -360)

  098 angle += 360;

  099 if (angle > 360)

  100 angle -= 360;

  101 return Mathf.Clamp (angle, min, max);

  102 }

  103}

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值