查看: 1806|回复: 3
打印 上一主题 下一主题

[其他] 鼠标拉近旋转拖拽模型的给力脚本(转载)

[复制链接]

2722

主题

42

听众

3万

积分

资深设计师

Rank: 7Rank: 7Rank: 7

纳金币
38268
精华
111

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

跳转到指定楼层
楼主
发表于 2014-6-25 00:48:20 |只看该作者 |倒序浏览
  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. }
  80. }
复制代码
分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

hyui    

1

主题

2

听众

6671

积分

高级设计师

Rank: 6Rank: 6

纳金币
2715
精华
0

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

沙发
发表于 2014-6-25 02:13:40 |只看该作者
It's always better to learn from code! Thanks!
回复

使用道具 举报

wucnj    

1

主题

1

听众

3160

积分

中级设计师

Rank: 5Rank: 5

纳金币
1065
精华
0

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

板凳
发表于 2014-6-25 09:11:27 |只看该作者
感谢分享!!!
回复

使用道具 举报

3

主题

1

听众

6189

积分

高级设计师

Rank: 6Rank: 6

纳金币
370
精华
0

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

地板
发表于 2014-6-25 09:17:56 |只看该作者
MARK THIS CONTENT
回复

使用道具 举报

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

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2024-11-17 16:03 , Processed in 0.437058 second(s), 32 queries .

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

© 2008-2019 Narkii Inc.

回顶部