unity5 2d游戏教程怎么固定角度

> 博客详情
摘要: unity2d
类似泡泡龙炮台的效果
&在2D游戏中,类似泡泡龙炮台发射、敌人飞机永远指向PLAYER、愤怒小鸟弹弓发射等效果,都需要用到物体跟随鼠标绕一个点旋转的效果,在unity中实现代码很简单,但是在理解上有一定障碍,因为unity是3D界面,他的旋转并不是2D世界中那么简单。
实现这种效果,可以使用两种方法,一种是采用角度计算,一种是采用向量运算;
1,角度运算容易理解,但是代码较为繁琐,可以参考
2,向量运算实现
1),向量运算简单复习
向量指具有大小和方向的几何对象,可以形象化地表示为带箭头的线段。
也就是说,向量不但具有大小,还有方向,我们这里就是利用向量的方向,来实现物体永远指向鼠标的。
向量相加:
向量相加遵循平行四边形法则,OA+OB=OC,相加为四边形长边,相减就为四边形短边,且方向是由被减方指向减方
2),UNITY中向量的运用
在unity中是三维坐标,绿色代表Y轴,红色代表X轴,蓝色代表Z轴。
如果需要只在平面进行旋转,就将Z轴永远等于0,XY轴变换即可。
A代表鼠标坐标,B代表物体坐标,OA-OB=BA,BA就是黄线,指向A点,使用unity提供的&transform.up指向A点,就达到目的了。&transform.up在unity的API上只有一句话:&transform.up的绿色轴,如图所示(绿色线条),其实是物体自身的Y轴坐标方向,加入Y轴方向等于黄色箭头方向,就达到旋转物体指向A点的目的了。
3),代码实现
using&UnityE
using&System.C
public&class&arrow&:&MonoBehaviour&{
&&&&void&Update()
&&&&&&&&if&(Input.GetMouseButton(0))&{
&&&&&&&&&&&&//获取鼠标的坐标,鼠标是屏幕坐标,Z轴为0,这里不做转换
&&&&&&&&&&&&Vector3&mouse&=&Input.mouseP
&&&&&&&&&&&&//获取物体坐标,物体坐标是世界坐标,将其转换成屏幕坐标,和鼠标一直
&&&&&&&&&&&&Vector3&obj=Camera.main.WorldToScreenPoint(transform.position);
&&&&&&&&&&&&//屏幕坐标向量相减,得到指向鼠标点的目标向量,即黄色线段
&&&&&&&&&&&&Vector3&direction&=&mouse&-&
&&&&&&&&&&&&//将Z轴置0,保持在2D平面内
&&&&&&&&&&&&direction.z&=&0f;
&&&&&&&&&&&&//将目标向量长度变成1,即单位向量,这里的目的是只使用向量的方向,不需要长度,所以变成1
&&&&&&&&&&&&direction&=&direction.
&&&&&&&&&&&&//当目标向量的Y轴大于等于0.4F时候,这里是用于限制角度,可以自己条件
&&&&&&&&&&&&if&(direction.y&&=&0.4f)
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&//物体自身的Y轴和目标向量保持一直,这个过程XY轴都会变化数值
&&&&&&&&&&&&&&&&transform.up&=&
&&&&&&&&&&&&}
人打赏支持
码字总数 78750
支付宝支付
微信扫码支付
打赏金额: ¥
已支付成功
打赏金额: ¥给我们留言
地址:福建省晋江市青阳街道洪山路国际工业设计园纳金网
电话: 400-067-3919
(周一到周五, 周六周日休息)
设计师入口
1 第1页 | 共33 页
查看: 67101|回复: 321
最后登录注册时间阅读权限100积分71677
纳金币59371 精华22
本帖集合了Unity 5.x的专用插件,如果是使用 4.6.x 的伙伴们切勿下载安装。
DCG Water Shaders 1.2 - 超拟真水面特效
EasyRoads3D Pro 2.5.7 - 强大的道路制作插件(Unity5专用版)
Against Gravity Racer - Quantum - 反重力飞船(量子号)
Against Gravity Racer - Hurricane 1.0 - 反重力飞船(飓风)
Snow System PRO 1.31 - 制作雪景的专用插件
X-Racer 1.2 - X战机游戏模板(无限场景)
Crazy Rotate 2.01 - 一个小游戏的案例
Scion - Filmic Post Processing - 高质量的电影画面制作
Race N Kill 1.0 - 无尽僵尸公路
Titan Town 1.0 - 泰坦之城场景资源
Inventory Pro 2.3.1 - Unity 5专用的背包系统
Android Native Plugin 7.2 - 安卓开发者必备的强力工具(5.x专用版)
EleganT Third Person Shooter Mechanics 1.04 - 超强的射击游戏模板
plyGame 2.7.0 - 可视化的RPG开发插件(Unity5专用版)
Stellar Sprites 1.2 - 星际游戏专用图集(5.x版本)
MCS Male - 多变化的男用角色模型
MCS Female - 多变化的女用角色模型
Shmup Starter Kit for Playmaker 1.7.8.3 - 外星战役游戏开发包
Complete Physics Platformer Kit v1.5.1 - 物理特性类游戏开发包
Weapon HQ #1 v1.1 - 高质量的FPS武器模型
Easy Threading 3.3 - 程序猿的小帮手
Top-Down Caves 1.0 - 高大上的魔幻洞穴场景资源
Closing Credits 2.0 -&&制作滚动字幕的专用插件(5.x)
Full Game Kit - Hammer 2 v1.1.1 - 极道杀戮游戏源码
Curved World 2.1.2 - 创建神奇的游戏空间
Ikari Vertex Painter 1.41 - 网格顶点绘制插件
ICE Creature Control 1.0 - 强大的人工智能系统
Curvy 2.02 - 各种曲面模型生成专用插件
Touch Controls Kit - Pro 1.4 - 触控设置专用插件
Paragon Shooter AI 1.0 - FPS专用的AI系统
Chronos - Time Control 2.2 - 时光机插件(Unity 5.2.1专用版)
Alloy Physical Shader Framework 3.2.7
2D Platformer Corgi Engine 1.7 - 卡通风格横版游戏专用模板
Colorful - Image Effects v4.1 - 相机调色插件(5.x专用插件)
SVGAssets 1.3.5 - 图集品质自动转换的专用插件
Third Person Controller Template 1.0 - 第三人称的角色控制模板
Gesture Recognizer 2.1 - 屏幕绘图的专用插件
Easy Roads Mesh Gen - 快速创建道路的插件
plyGame 2.6.7 - 可视化的RPG开发插件(Unity5专用版)
Realistic Car Controller 2.8 - 极速赛场游戏开发包
Deftly: Top Down Shooter 0.6 - 火线冲锋游戏模板
Smart Footstep System 1.01 - 智能化的脚步声制作
DirectX 11 Grass Shader 1.1.0 - 提升草地渲染的专用插件
IOS Native 8.0.4 - IOS游戏开发必备插件(Unity 5.x专用版)
Final IK 1.1 - 反向动力控制插件(5.x专用版)
Stylized Nature Pack 1.2 - 风格独特的自然景观资源包
UniWebView 2 v2.21 - 把网页内容整到游戏内的专用插件
Sweet Halloween Bubble Shooter - 55个关卡的万圣节消除游戏模板
UBER - Standard Shader Ultra 1.03 - 高质量的材质制作插件
Sprite Color FX 2.0 - 像素特效
Honey Hex Framework 1.5.2 - 蜂巢式地形制作插件(Unity5专用版)
Candela SSRR V2 - 各种超强的反射效果(Unity 5专用版)
Simple Trigger 2.0 - 快速设置触发器的插件
Tower Defense and MOBA 1.21 - 塔防游戏资源包
Particle Shaders Vol. 1.01 - 超牛的粒子Shader专用插件
Pro Audio Player 1.0 - 专业的音源播放器
UGallery Flow 1.0 - 滑动菜单的制作插件
UGUI MiniMap 1.3 - uGUI专用的小地图插件(5.x专用版)
Advanced Foliage Shader&&4.01 - 强化植物Shader的专用插件
Panoramic Framework 1.3 - Unity的全景制作工具
TPSA - Third Person Shooter Template 1.3 - 射击游戏模板
Pool, Trigger, Constrain Bundle 6.3 - 三合一插件礼包(Unity5专用版)
Highlighting System 4.0 - 物件高亮特效插件(5.0专用版)
S-Quest (C# & JS) 1.0.7 - 无需代码的访客与任务系统
UFE Bundle 1.6.0 - 格斗机器游戏模板 + AI战斗功能
2D Platformer Corgi Engine 1.5.2 - 卡通风格横版游戏专用模板
UMenu Pro 1.2 - 快速制作UI的插件(Unity5.x 专用版)
Pixel Tower Defense Prototyper 1.0 - 像素塔防(5.x专用版)
UniStorm 2.0 - 暴风与天候制作
uSky: Skybox-Based Lighting Shader 1.15 - Unity 5专用的天光系统
One Minute GUI 1.0 - 一分钟搞定你的游戏GUI
Action RPG Framework 0.99 - ARPG游戏框架
2D Wave Shooter 1.1 - 2D设计游戏模板
Ultimate Isometric Toolkit 1.2.2
Concave Collider 1.23 - 网格外形碰撞器强化版(Unity5 专用)
最后登录注册时间阅读权限20积分302
设计实习生, 积分 302, 距离下一级还需 198 积分
纳金币110 精华0
来聚聚人气哈
&支持支持&
&支持支持&
最后登录注册时间阅读权限90积分5805
高级设计师, 积分 5805, 距离下一级还需 4195 积分
纳金币2872 精华3
哈,绝对支持啊
&支持支持&
&支持支持&
最后登录注册时间阅读权限20积分246
设计实习生, 积分 246, 距离下一级还需 254 积分
纳金币1 精华0
&支持支持&
&支持支持&
最后登录注册时间阅读权限100积分2308
纳金币1828 精华1
这个好!版本已经升为5.0了 希望多些5.0的整理~
&支持支持&
最后登录注册时间阅读权限50积分1741
助理设计师, 积分 1741, 距离下一级还需 259 积分
纳金币1 精华0
这个帖子很不错,多谢。
&支持支持&
最后登录注册时间阅读权限20积分246
设计实习生, 积分 246, 距离下一级还需 254 积分
纳金币1 精华0
&支持支持&
最后登录注册时间阅读权限70积分3667
中级设计师, 积分 3667, 距离下一级还需 1333 积分
纳金币105 精华0
&支持支持&
最后登录注册时间阅读权限90积分32051
资深设计师, 积分 32051, 距离下一级还需 17949 积分
纳金币33042 精华80
支持艾西版主的分享!
&支持支持&
最后登录注册时间阅读权限50积分1928
助理设计师, 积分 1928, 距离下一级还需 72 积分
纳金币521 精华1
蛮好的 现在unity更新也超快 5.1.0了。。。
&支持支持&
1 第1页 | 共33 页
活跃且尽责职守的版主
站长推荐 /1
纳金名模第142期现代台灯3d模型:数量93个,大小为415MB。完全免费下载哦!这样的福利我和我的小伙伴们都惊呆了!!下载地址:
Powered by - X2.5
Narkii Inc.下面的类主要作用是根据不同的值来改变摄像头的位置,从而达到不同的视角满足各种不同的需求,基本原理:角度的4元数乘以一个位移向量,得到一个旋转过后的最终向量,然后把最终向量赋值给摄像头,就得到摄像头的位置。还是看DEMO吧。
可以按下鼠标右键来操作angleX、angleY 的值,达到操作摄像头围绕着正方形X轴旋转,Y轴旋转。
根据绕x、y、z轴的旋转得到摄像头的旋转。
根据向量的x、y、z的值来确定上下左右坐标。
还有旋转速度 以及鼠标滚轮缩放的速度设置。
自己操作一下DEMO,再看看代码,什么都明白了。其实核心的东西就是 UpdateCarema 这个方法。
This movie requires Flash Player 9
CameraControl.cs
using UnityE
using System.C
//如果要贴代码自己建立项目,请先创建一个CUBE,
//并且将CUBE放大3倍(当然可以根据你的喜好自己调节大小。我DEMO的大小是3倍),
//然后将代码挂到摄像机上就可以运行了。切记要挂到摄像机上。
public class CameraControl : MonoBehaviour
// 观测对象
private GameO
public float distanceX = 0f;
public float distanceY = 0f;
public float distanceZ = -5f;
public float maxDistance = -50f;
public float minDistance = -5f;
public float angleX = 30f;
public float angleY = 0f;
public float angleZ = 0f;
public float anglespeed = 5f;
public float scrollSpeed = 250f;
void Start()
target = GameObject.Find("Cube");
void Update()
UpdateCarema();
void OnGUI()
float y = 0;
float dis = 20;
GUI.Label(new Rect(0, 0, 90, 30), "distanceX : ");
distanceX = GUI.HorizontalSlider(new Rect(90, 0, 100, 10), distanceX, -30.0F, 30.0F);
text = GUI.TextField(new Rect(190, 0, 50, 20), distanceX.ToString(), 6);
distanceX = float.Parse(text == "" ? "0" : text);
GUI.Label(new Rect(0, y, 90, 30), "distanceY : ");
distanceY = GUI.HorizontalSlider(new Rect(90, y, 100, 10), distanceY, -30.0F, 30.0F);
text = GUI.TextField(new Rect(190, y, 50, 20), distanceY.ToString(), 6);
distanceY = float.Parse(text == "" ? "0" : text);
GUI.Label(new Rect(0, y, 90, 30), "distanceZ : ");
distanceZ = GUI.HorizontalSlider(new Rect(90, y, 100, 10), distanceZ, maxDistance, minDistance);
text = GUI.TextField(new Rect(190, y, 50, 20), distanceZ.ToString(), 6);
distanceZ = float.Parse(text == "" ? "0" : text);
GUI.Label(new Rect(0, y, 90, 30), "maxDistance : ");
maxDistance = GUI.HorizontalSlider(new Rect(90, y, 100, 10), maxDistance, -100, 100.0F);
text = GUI.TextField(new Rect(190, y, 50, 20), maxDistance.ToString(), 6);
maxDistance = float.Parse(text == "" ? "0" : text);
GUI.Label(new Rect(0, y, 90, 30), "minDistance : ");
minDistance = GUI.HorizontalSlider(new Rect(90, y, 100, 10), minDistance, -100, 100.0F);
text = GUI.TextField(new Rect(190, y, 50, 20), minDistance.ToString(), 6);
minDistance = float.Parse(text == "" ? "0" : text);
GUI.Label(new Rect(0, y, 90, 30), "angleX : ");
angleX = GUI.HorizontalSlider(new Rect(90, y, 100, 10), angleX, -360.0F, 360.0F);
text = GUI.TextField(new Rect(190, y, 50, 20), angleX.ToString(), 6);
angleX = float.Parse(text == "" ? "0" : text);
GUI.Label(new Rect(0, y, 90, 30), "angleY : ");
angleY = GUI.HorizontalSlider(new Rect(90, y, 100, 10), angleY, -360.0F, 360.0F);
text = GUI.TextField(new Rect(190, y, 50, 20), angleY.ToString(), 6);
angleY = float.Parse(text == "" ? "0" : text);
GUI.Label(new Rect(0, y, 90, 30), "angleZ : ");
angleZ = GUI.HorizontalSlider(new Rect(90, y, 100, 10), angleZ, -360.0F, 360.0F);
text = GUI.TextField(new Rect(190, y, 50, 20), angleZ.ToString(), 6);
angleZ = float.Parse(text == "" ? "0" : text);
GUI.Label(new Rect(0, y, 90, 30), "speed : ");
anglespeed = GUI.HorizontalSlider(new Rect(90, y, 100, 10), anglespeed, 100.0F, 0.0F);
text = GUI.TextField(new Rect(190, y, 50, 20), anglespeed.ToString(), 6);
anglespeed = float.Parse(text == "" ? "0" : text);
GUI.Label(new Rect(0, y, 90, 30), "scrollSpeed : ");
scrollSpeed = GUI.HorizontalSlider(new Rect(90, y, 100, 10), scrollSpeed, 500.0F, 0.0F);
text = GUI.TextField(new Rect(190, y, 50, 20), scrollSpeed.ToString(), 6);
scrollSpeed = float.Parse(text == "" ? "0" : text);
private void Mouse()
if (Input.GetMouseButton(1))
angleY += Input.GetAxis("Mouse X") *
angleX -= Input.GetAxis("Mouse Y") *
if (Input.GetAxis("Mouse ScrollWheel") != 0)
//根据鼠标滚轮都值计算出这一帧应该移动都距离。
distanceZ += Mathf.Lerp(0, Input.GetAxis("Mouse ScrollWheel") * scrollSpeed, Time.deltaTime);
//判断是否超过最大范围
distanceZ = Mathf.Clamp(distanceZ, maxDistance, minDistance);
private void UpdateCarema()
//通过围绕x、y、z轴都角度创建一个四元数
Quaternion rotation = Quaternion.Euler(angleX, angleY, angleZ);
//创建一个位移向量。
Vector3 Pos = new Vector3(distanceX, distanceY, distanceZ);
//将上面都向量选择对应四元数所表示都角度。
Vector3 move = rotation * P
//从目标点进行move向量的移动。得到一个新都位置。
Vector3 pos = move + target.transform.
//赋值给摄像机新的位置
transform.position =
//赋值给摄像机新都旋转
transform.rotation =
<div class="crayon-num" data-line="crayon-58cf8f<div class="crayon-num crayon-striped-num" data-line="crayon-58cf8f<div class="crayon-num" data-line="crayon-58cf8f<div class="crayon-num crayon-striped-num" data-line="crayon-58cf8f<div class="crayon-num" data-line="crayon-58cf8f<div class="crayon-num crayon-striped-num" data-line="crayon-58cf8f<div class="crayon-num" data-line="crayon-58cf8f<div class="crayon-num crayon-striped-num" data-line="crayon-58cf8f<div class="crayon-num" data-line="crayon-58cf8f<div class="crayon-num crayon-striped-num" data-line="crayon-58cf8f<div class="crayon-num" data-line="crayon-58cf8f<div class="crayon-num crayon-striped-num" data-line="crayon-58cf8f<div class="crayon-num" data-line="crayon-58cf8f<div class="crayon-num crayon-striped-num" data-line="crayon-58cf8f<div class="crayon-num" data-line="crayon-58cf8f<div class="crayon-num crayon-striped-num" data-line="crayon-58cf8f<div class="crayon-num" data-line="crayon-58cf8f<div class="crayon-num crayon-striped-num" data-line="crayon-58cf8f<div class="crayon-num" data-line="crayon-58cf8f<div class="crayon-num crayon-striped-num" data-line="crayon-58cf8f<div class="crayon-num" data-line="crayon-58cf8f<div class="crayon-num crayon-striped-num" data-line="crayon-58cf8f<div class="crayon-num" data-line="crayon-58cf8f<div class="crayon-num crayon-striped-num" data-line="crayon-58cf8f<div class="crayon-num" data-line="crayon-58cf8f<div class="crayon-num crayon-striped-num" data-line="crayon-58cf8f<div class="crayon-num" data-line="crayon-58cf8f<div class="crayon-num crayon-striped-num" data-line="crayon-58cf8f<div class="crayon-num" data-line="crayon-58cf8f<div class="crayon-num crayon-striped-num" data-line="crayon-58cf8f<div class="crayon-num" data-line="crayon-58cf8f<div class="crayon-num crayon-striped-num" data-line="crayon-58cf8f<div class="crayon-num" data-line="crayon-58cf8f<div class="crayon-num crayon-striped-num" data-line="crayon-58cf8f<div class="crayon-num" data-line="crayon-58cf8f<div class="crayon-num crayon-striped-num" data-line="crayon-58cf8f<div class="crayon-num" data-line="crayon-58cf8f<div class="crayon-num crayon-striped-num" data-line="crayon-58cf8f<div class="crayon-num" data-line="crayon-58cf8f<div class="crayon-num crayon-striped-num" data-line="crayon-58cf8f<div class="crayon-num" data-line="crayon-58cf8f<div class="crayon-num crayon-striped-num" data-line="crayon-58cf8f<div class="crayon-num" data-line="crayon-58cf8f<div class="crayon-num crayon-striped-num" data-line="crayon-58cf8f<div class="crayon-num" data-line="crayon-58cf8f<div class="crayon-num crayon-striped-num" data-line="crayon-58cf8f<div class="crayon-num" data-line="crayon-58cf8f<div class="crayon-num crayon-striped-num" data-line="crayon-58cf8f<div class="crayon-num" data-line="crayon-58cf8f<div class="crayon-num crayon-striped-num" data-line="crayon-58cf8f<div class="crayon-num" data-line="crayon-58cf8f<div class="crayon-num crayon-striped-num" data-line="crayon-58cf8f<div class="crayon-num" data-line="crayon-58cf8f<div class="crayon-num crayon-striped-num" data-line="crayon-58cf8f<div class="crayon-num" data-line="crayon-58cf8f<div class="crayon-num crayon-striped-num" data-line="crayon-58cf8f<div class="crayon-num" data-line="crayon-58cf8f<div class="crayon-num crayon-striped-num" data-line="crayon-58cf8f<div class="crayon-num" data-line="crayon-58cf8f<div class="crayon-num crayon-striped-num" data-line="crayon-58cf8f<div class="crayon-num" data-line="crayon-58cf8f<div class="crayon-num crayon-striped-num" data-line="crayon-58cf8f<div class="crayon-num" data-line="crayon-58cf8f<div class="crayon-num crayon-striped-num" data-line="crayon-58cf8f<div class="crayon-num" data-line="crayon-58cf8f<div class="crayon-num crayon-striped-num" data-line="crayon-58cf8f<div class="crayon-num" data-line="crayon-58cf8f<div class="crayon-num crayon-striped-num" data-line="crayon-58cf8f<div class="crayon-num" data-line="crayon-58cf8f<div class="crayon-num crayon-striped-num" data-line="crayon-58cf8f<div class="crayon-num" data-line="crayon-58cf8f<div class="crayon-num crayon-striped-num" data-line="crayon-58cf8f<div class="crayon-num" data-line="crayon-58cf8f<div class="crayon-num crayon-striped-num" data-line="crayon-58cf8f<div class="crayon-num" data-line="crayon-58cf8f<div class="crayon-num crayon-striped-num" data-line="crayon-58cf8f<div class="crayon-num" data-line="crayon-58cf8f<div class="crayon-num crayon-striped-num" data-line="crayon-58cf8f<div class="crayon-num" data-line="crayon-58cf8f<div class="crayon-num crayon-striped-num" data-line="crayon-58cf8f<div class="crayon-num" data-line="crayon-58cf8f<div class="crayon-num crayon-striped-num" data-line="crayon-58cf8f<div class="crayon-num" data-line="crayon-58cf8f<div class="crayon-num crayon-striped-num" data-line="crayon-58cf8f<div class="crayon-num" data-line="crayon-58cf8f<div class="crayon-num crayon-striped-num" data-line="crayon-58cf8f<div class="crayon-num" data-line="crayon-58cf8f<div class="crayon-num crayon-striped-num" data-line="crayon-58cf8f<div class="crayon-num" data-line="crayon-58cf8f<div class="crayon-num crayon-striped-num" data-line="crayon-58cf8f<div class="crayon-num" data-line="crayon-58cf8f<div class="crayon-num crayon-striped-num" data-line="crayon-58cf8f<div class="crayon-num" data-line="crayon-58cf8f<div class="crayon-num crayon-striped-num" data-line="crayon-58cf8f<div class="crayon-num" data-line="crayon-58cf8f<div class="crayon-num crayon-striped-num" data-line="crayon-58cf8f<div class="crayon-num" data-line="crayon-58cf8f<div class="crayon-num crayon-striped-num" data-line="crayon-58cf8f<div class="crayon-num" data-line="crayon-58cf8f<div class="crayon-num crayon-striped-num" data-line="crayon-58cf8f0<div class="crayon-num" data-line="crayon-58cf8f1<div class="crayon-num crayon-striped-num" data-line="crayon-58cf8f2<div class="crayon-num" data-line="crayon-58cf8f3<div class="crayon-num crayon-striped-num" data-line="crayon-58cf8f4<div class="crayon-num" data-line="crayon-58cf8f5<div class="crayon-num crayon-striped-num" data-line="crayon-58cf8f6<div class="crayon-num" data-line="crayon-58cf8f7<div class="crayon-num crayon-striped-num" data-line="crayon-58cf8f8<div class="crayon-num" data-line="crayon-58cf8f9<div class="crayon-num crayon-striped-num" data-line="crayon-58cf8f0<div class="crayon-num" data-line="crayon-58cf8f1<div class="crayon-num crayon-striped-num" data-line="crayon-58cf8f2<div class="crayon-num" data-line="crayon-58cf8f3<div class="crayon-num crayon-striped-num" data-line="crayon-58cf8f4<div class="crayon-num" data-line="crayon-58cf8f5<div class="crayon-num crayon-striped-num" data-line="crayon-58cf8f6<div class="crayon-num" data-line="crayon-58cf8f7<div class="crayon-num crayon-striped-num" data-line="crayon-58cf8f8<div class="crayon-num" data-line="crayon-58cf8f9<div class="crayon-num crayon-striped-num" data-line="crayon-58cf8f0<div class="crayon-num" data-line="crayon-58cf8f1<div class="crayon-num crayon-striped-num" data-line="crayon-58cf8f2<div class="crayon-num" data-line="crayon-58cf8f3<div class="crayon-num crayon-striped-num" data-line="crayon-58cf8f4<div class="crayon-num" data-line="crayon-58cf8f5<div class="crayon-num crayon-striped-num" data-line="crayon-58cf8f6<div class="crayon-num" data-line="crayon-58cf8f7<div class="crayon-num crayon-striped-num" data-line="crayon-58cf8f8<div class="crayon-num" data-line="crayon-58cf8f9<div class="crayon-num crayon-striped-num" data-line="crayon-58cf8f0<div class="crayon-num" data-line="crayon-58cf8f1<div class="crayon-num crayon-striped-num" data-line="crayon-58cf8f2<div class="crayon-num" data-line="crayon-58cf8f3<div class="crayon-num crayon-striped-num" data-line="crayon-58cf8f4<div class="crayon-num" data-line="crayon-58cf8f5<div class="crayon-num crayon-striped-num" data-line="crayon-58cf8f6<div class="crayon-num" data-line="crayon-58cf8f7<div class="crayon-num crayon-striped-num" data-line="crayon-58cf8f8<div class="crayon-num" data-line="crayon-58cf8f9<div class="crayon-num crayon-striped-num" data-line="crayon-58cf8f0
using UnityEngine;using System.Collections;//如果要贴代码自己建立项目,请先创建一个CUBE,//并且将CUBE放大3倍(当然可以根据你的喜好自己调节大小。我DEMO的大小是3倍),//然后将代码挂到摄像机上就可以运行了。切记要挂到摄像机上。public class CameraControl : MonoBehaviour{&&&&// 观测对象&&&&private GameObject target;&&&&&//距离&&&&public float distanceX = 0f;&&&&public float distanceY = 0f;&&&&public float distanceZ = -5f;&&&&public float maxDistance = -50f;&&&&public float minDistance = -5f;&&&&&//角度&&&&public float angleX = 30f;&&&&public float angleY = 0f;&&&&public float angleZ = 0f;&&&&public float anglespeed = 5f;&&&&public float scrollSpeed = 250f;&&&&&&&void Start()&&&&{&&&&&&&&target = GameObject.Find("Cube");&&&&}&&&&&void Update()&&&&{&&&&&&&&Mouse();&&&&&&&&&UpdateCarema();&&&&}&&&&&void OnGUI()&&&&{&&&&&&&&string text;&&&&&&&&float y = 0;&&&&&&&&float dis = 20;&&&&&&&&GUI.Label(new Rect(0, 0, 90, 30), "distanceX : ");&&&&&&&&distanceX = GUI.HorizontalSlider(new Rect(90, 0, 100, 10), distanceX, -30.0F, 30.0F);&&&&&&&&text = GUI.TextField(new Rect(190, 0, 50, 20), distanceX.ToString(), 6);&&&&&&&&distanceX = float.Parse(text == "" ? "0" : text);&&&&&&&&&y += dis;&&&&&&&&GUI.Label(new Rect(0, y, 90, 30), "distanceY : ");&&&&&&&&distanceY = GUI.HorizontalSlider(new Rect(90, y, 100, 10), distanceY, -30.0F, 30.0F);&&&&&&&&text = GUI.TextField(new Rect(190, y, 50, 20), distanceY.ToString(), 6);&&&&&&&&distanceY = float.Parse(text == "" ? "0" : text);&&&&&&&&&y += dis;&&&&&&&&GUI.Label(new Rect(0, y, 90, 30), "distanceZ : ");&&&&&&&&distanceZ = GUI.HorizontalSlider(new Rect(90, y, 100, 10), distanceZ, maxDistance, minDistance);&&&&&&&&text = GUI.TextField(new Rect(190, y, 50, 20), distanceZ.ToString(), 6);&&&&&&&&distanceZ = float.Parse(text == "" ? "0" : text);&&&&&&&&&y += dis;&&&&&&&&GUI.Label(new Rect(0, y, 90, 30), "maxDistance : ");&&&&&&&&maxDistance = GUI.HorizontalSlider(new Rect(90, y, 100, 10), maxDistance, -100, 100.0F);&&&&&&&&text = GUI.TextField(new Rect(190, y, 50, 20), maxDistance.ToString(), 6);&&&&&&&&maxDistance = float.Parse(text == "" ? "0" : text);&&&&&&&&&y += dis;&&&&&&&&GUI.Label(new Rect(0, y, 90, 30), "minDistance : ");&&&&&&&&minDistance = GUI.HorizontalSlider(new Rect(90, y, 100, 10), minDistance, -100, 100.0F);&&&&&&&&text = GUI.TextField(new Rect(190, y, 50, 20), minDistance.ToString(), 6);&&&&&&&&minDistance = float.Parse(text == "" ? "0" : text);&&&&&&&&&y += dis;&&&&&&&&GUI.Label(new Rect(0, y, 90, 30), "angleX : ");&&&&&&&&angleX = GUI.HorizontalSlider(new Rect(90, y, 100, 10), angleX, -360.0F, 360.0F);&&&&&&&&text = GUI.TextField(new Rect(190, y, 50, 20), angleX.ToString(), 6);&&&&&&&&angleX = float.Parse(text == "" ? "0" : text);&&&&&&&&&y += dis;&&&&&&&&GUI.Label(new Rect(0, y, 90, 30), "angleY : ");&&&&&&&&angleY = GUI.HorizontalSlider(new Rect(90, y, 100, 10), angleY, -360.0F, 360.0F);&&&&&&&&text = GUI.TextField(new Rect(190, y, 50, 20), angleY.ToString(), 6);&&&&&&&&angleY = float.Parse(text == "" ? "0" : text);&&&&&&&&&y += dis;&&&&&&&&GUI.Label(new Rect(0, y, 90, 30), "angleZ : ");&&&&&&&&angleZ = GUI.HorizontalSlider(new Rect(90, y, 100, 10), angleZ, -360.0F, 360.0F);&&&&&&&&text = GUI.TextField(new Rect(190, y, 50, 20), angleZ.ToString(), 6);&&&&&&&&angleZ = float.Parse(text == "" ? "0" : text);&&&&&&&&&y += dis;&&&&&&&&GUI.Label(new Rect(0, y, 90, 30), "speed : ");&&&&&&&&anglespeed = GUI.HorizontalSlider(new Rect(90, y, 100, 10), anglespeed, 100.0F, 0.0F);&&&&&&&&text = GUI.TextField(new Rect(190, y, 50, 20), anglespeed.ToString(), 6);&&&&&&&&anglespeed = float.Parse(text == "" ? "0" : text);&&&&&&&&&y += dis;&&&&&&&&GUI.Label(new Rect(0, y, 90, 30), "scrollSpeed : ");&&&&&&&&scrollSpeed = GUI.HorizontalSlider(new Rect(90, y, 100, 10), scrollSpeed, 500.0F, 0.0F);&&&&&&&&text = GUI.TextField(new Rect(190, y, 50, 20), scrollSpeed.ToString(), 6);&&&&&&&&scrollSpeed = float.Parse(text == "" ? "0" : text);&&&&&}&&&&&private void Mouse()&&&&{&&&&&&&&if (Input.GetMouseButton(1))&&&&&&&&{&&&&&&&&&&&&angleY += Input.GetAxis("Mouse X") * anglespeed;&&&&&&&&&&&&angleX -= Input.GetAxis("Mouse Y") * anglespeed;&&&&&&&&}&&&&&&&&&if (Input.GetAxis("Mouse ScrollWheel") != 0)&&&&&&&&{&&&&&&&&&&&&//根据鼠标滚轮都值计算出这一帧应该移动都距离。&&&&&&&&&&&&distanceZ += Mathf.Lerp(0, Input.GetAxis("Mouse ScrollWheel") * scrollSpeed, Time.deltaTime);&&&&&&&&&&&&//判断是否超过最大范围&&&&&&&&&&&&distanceZ = Mathf.Clamp(distanceZ, maxDistance, minDistance);&&&&&&&&}&&&&}&&&&&&private void UpdateCarema()&&&&{&&&&&&&&//通过围绕x、y、z轴都角度创建一个四元数&&&&&&&&Quaternion rotation = Quaternion.Euler(angleX, angleY, angleZ);&&&&&&&&//创建一个位移向量。&&&&&&&&Vector3 Pos = new Vector3(distanceX, distanceY, distanceZ);&&&&&&&&//将上面都向量选择对应四元数所表示都角度。&&&&&&&&Vector3 move = rotation * Pos;&&&&&&&&//从目标点进行move向量的移动。得到一个新都位置。&&&&&&&&Vector3 pos = move + target.transform.position;&&&&&&&&&//赋值给摄像机新的位置&&&&&&&&transform.position = pos;&&&&&&&&//赋值给摄像机新都旋转&&&&&&&&transform.rotation = rotation;&&&&&}}
目前对向量、点、角度的一些概念在Unity中的使用还是不熟悉。Unity还在入门阶段。}

我要回帖

更多关于 unity5 2d游戏源代码 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信