查看: 869|回复: 1
打印 上一主题 下一主题

[其他] 实现鼠标拖拽缩放功能代码

[复制链接]

2317

主题

54

听众

2万

积分

资深设计师

Rank: 7Rank: 7Rank: 7

纳金币
20645
精华
62

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

跳转到指定楼层
楼主
发表于 2014-12-31 21:27:57 |只看该作者 |倒序浏览
  1. using UnityEngine;

  2. using System.Collections;

  3. public class Script_07_11 : MonoBehaviour

  4. {

  5. public Transform target;

  6. private int MouseWheelSensitivity = 1;

  7. private int MouseZoomMin = 1;

  8. private int MouseZoomMax = 5;

  9. private float normalDistance = 3;

  10. private Vector3 normalized;

  11. private float xSpeed = 250.0f;

  12. private float ySpeed = 120.0f;

  13. private int yMinLimit = -20;

  14. private int yMaxLimit = 80;

  15. private float x = 0.0f;

  16. private float y = 0.0f;

  17. private Vector3 screenPoint;

  18. private Vector3 offset;

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

  20. private Vector3 CameraTarget;

  21. void Start ()

  22. {

  23. CameraTarget = target.position;

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

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

  26. transform.LookAt(target);

  27. var angles = transform.eulerAngles;

  28. x = angles.y;

  29. y = angles.x;

  30. }

  31. void Update ()

  32. {

  33. if(Input.GetMouseButton(1))

  34. {

  35. x += Input.GetAxis(“Mouse X”) * xSpeed * 0.02f;

  36. y -= Input.GetAxis(“Mouse Y”) * ySpeed * 0.02f;

  37. y = ClampAngle(y, yMinLimit, yMaxLimit);

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

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

  40. transform.rotation = rotation;

  41. transform.position = position;

  42. }else if (Input.GetAxis(“Mouse ScrollWheel”) != 0)

  43. {

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

  45. if (normalDistance >= MouseZoomMin && normalDistance <= MouseZoomMax)

  46. {

  47. normalDistance -= Input.GetAxis(“Mouse ScrollWheel”) * MouseWheelSensitivity;

  48. }

  49. if (normalDistance < MouseZoomMin)

  50. {

  51. normalDistance = MouseZoomMin;

  52. }

  53. if (normalDistance > MouseZoomMax)

  54. {

  55. normalDistance = MouseZoomMax;

  56. }

  57. transform.position =    normalized * normalDistance;

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

  59. {

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

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

  62. }

  63. //unity3d:http://www.unitymanual.com/

  64. if(Input.GetMouseButton(2))

  65. {

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

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

  68. target.transform.position = curPosition;

  69. }

  70. transform.LookAt(CameraTarget);

  71. }

  72. static float ClampAngle (float angle , float min ,float  max)

  73. {

  74. if (angle < -360)

  75. angle += 360;

  76. if (angle > 360)

  77. angle -= 360;

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

  79. }
复制代码
分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

16

主题

1

听众

1万

积分

资深设计师

Rank: 7Rank: 7Rank: 7

纳金币
3
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

沙发
发表于 2015-1-3 11:12:01 |只看该作者
不错, 学习了!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

关闭

站长推荐上一条 /1 下一条

手机版|纳金网 ( 闽ICP备08008928号

GMT+8, 2024-4-29 05:20 , Processed in 0.084427 second(s), 32 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部