菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
258
0

【unity3D】鼠标控制camera的移动、放大(俯视浏览效果、LOL摄像机移动效果)

原创
05/13 14:22
阅读数 50703

在Unity开发中,用鼠标滚轮来实现摄像机的视野范围,鼠标左键拖拉控制摄像机的移动,代码如下:

 1.俯视浏览效果

 1 using UnityEngine;
 2 using System.Collections;
 3 
 4 public class CameraCol : MonoBehaviour {
 5     //控制视野缩放的速率
 6     public float view_value;
 7     //控制摄像机移动的速率
 8     public float move_speed;
 9     void Update () {
10         //放大、缩小
11         if( Input.GetAxis("Mouse ScrollWheel") != 0 )
12         {
13             this.gameObject.transform.Translate(new Vector3(0,0,Input.GetAxis("Mouse ScrollWheel")*Time.deltaTime*view_value));
14         }
15         //移动视角
16         if (Input.GetMouseButton (2)) {
17             transform.Translate (Vector3.left * Input.GetAxis ("Mouse X") * move_speed);
18             transform.Translate(Vector3.up * Input.GetAxis("Mouse Y") * -move_speed);
19         }
20     }
21 }

 2.LOL摄像机效果

  鼠标移至屏幕边控向相应位置移动

 1 //整体移动速度
 2 var speed=5; 
 3 
 4 //关于鼠标滑轮的参数
 5 var MouseWheelSensitivity = 0.0001f; 
 6 var MouseZoomMin = -2.4f; 
 7 var MouseZoomMax = 1.0f;
 8 var normalDistance = -1.1; 
 9 
10 //水平和垂直的移动速度
11 var horizontalMoveSpeed = 0.1; 
12 var verticalMoveSpeed = 0.1; 
13 
14 //上左下右的标记
15 var topTag = 8; 
16 var leftTag = 4; 
17 var botTag = 2; 
18 var rightTag = 1;
19 
20 function Start () {
21     
22 }
23 
24 function Update () {
25     if( Input.GetAxis("Mouse ScrollWheel") != 0 )
26         {
27             this.gameObject.transform.Translate(new Vector3(0,0,Input.GetAxis("Mouse ScrollWheel")*Time.deltaTime*500));
28         }
29     //获取cursor坐标
30     var msPos = Input.mousePosition;
31     
32     //边界最小值
33     var widthBorder = Screen.width/50; 
34     var heightBorder = Screen.height/50; 
35     
36     var x = 0.0f; 
37     var y = 0.0f; 
38     
39     //当前鼠标位置标记
40     var posTag = 0; 
41     
42     if(widthBorder<=msPos.x && msPos.x<=Screen.width-widthBorder &&
43         heightBorder<=msPos.y && msPos.y<=Screen.height-heightBorder)
44     {
45         transform.Translate(x,y,y); 
46         Debug.Log("asd"+msPos.x+" "+msPos.y);
47     }
48     else 
49     {
50     //  posTag
51     //
52     // 1100 | 1000 | 1001
53     // 0100 | 0000 | 0001
54     // 0110 | 0010 | 0011
55     //
56     // 12   |  8   |  9
57     // 4    |  0   |  1
58     // 6    |  2   |  3
59     //
60         if(msPos.y>Screen.height-heightBorder)
61             posTag = posTag | topTag; 
62         if(msPos.x<widthBorder)
63             posTag = posTag | leftTag;
64         if(msPos.y<heightBorder) 
65             posTag = posTag | botTag;
66         if(msPos.x>Screen.width-widthBorder)
67             posTag = posTag | rightTag;
68             
69         switch(posTag)
70         {
71         case 0: break; 
72         case 1: x = horizontalMoveSpeed; break; 
73         case 2: y = -verticalMoveSpeed; break; 
74         case 3: x = horizontalMoveSpeed; y = -verticalMoveSpeed; break; 
75         case 4: x = -horizontalMoveSpeed; break;
76         case 6: x = -horizontalMoveSpeed; y = -verticalMoveSpeed; break;
77         case 8: y = verticalMoveSpeed; break;
78         case 9: x = horizontalMoveSpeed; y = verticalMoveSpeed; break;
79         case 12:x = -horizontalMoveSpeed;y = verticalMoveSpeed; break;
80         default: break; 
81         }
82         
83         x *= speed*Time.deltaTime;
84         y *= speed*Time.deltaTime;
85         
86         //
87         transform.Translate(x, y, y); 
88     }
89         
90     
91 }

 

发表评论

0/200
258 点赞
0 评论
收藏