Unity2D 里的场景缩放实现
闲时以 Unity2D 练手时想实现端游里的场景缩放功能,而网上的代码几乎全是 3D 场景缩放相关,所以我自己编写了个 2D 场景缩放脚本(C#)。
代码如下:
using UnityEngine;
using System.Collections; public class SceneScaleController : MonoBehaviour { private float normalCameraSize;
private float minCameraSize;
private float maxCameraSize; private const float cScaleRange = 0.8f;
private const float cScaleFactor = 0.05f; private enum SceneScaleType {sstNone, sstShrink, sstEnlarge};
private SceneScaleType scaleType = SceneScaleType.sstNone; private enum SceneScaleState {sssNormal, sssShrinked, sstEnlarged};
private SceneScaleState scaleState = SceneScaleState.sssNormal; void Start() {
normalCameraSize = Camera.main.orthographicSize;
minCameraSize = normalCameraSize - cScaleRange;
maxCameraSize = normalCameraSize + cScaleRange;
} void Update() {
if (scaleType == SceneScaleType.sstNone) {
float factor = Input.GetAxis("Mouse ScrollWheel");
if ((factor > ) && (scaleState != SceneScaleState.sssShrinked)) {
scaleType = SceneScaleType.sstShrink;
} else if ((factor < ) && (scaleState != SceneScaleState.sstEnlarged)) {
scaleType = SceneScaleType.sstEnlarge;
}
} else if (scaleType == SceneScaleType.sstEnlarge) {
float sz = Camera.main.orthographicSize;
sz += cScaleFactor; if (scaleState == SceneScaleState.sssNormal) {
if (sz >= maxCameraSize) {
sz = maxCameraSize;
scaleType = SceneScaleType.sstNone;
scaleState = SceneScaleState.sstEnlarged;
}
Camera.main.orthographicSize = sz;
} else if (scaleState == SceneScaleState.sssShrinked) {
if (sz >= normalCameraSize) {
sz = normalCameraSize;
scaleType = SceneScaleType.sstNone;
scaleState = SceneScaleState.sssNormal;
}
Camera.main.orthographicSize = sz;
}
} else if (scaleType == SceneScaleType.sstShrink) {
float sz = Camera.main.orthographicSize;
sz -= cScaleFactor; if (scaleState == SceneScaleState.sssNormal) {
if (sz <= minCameraSize) {
sz = minCameraSize;
scaleType = SceneScaleType.sstNone;
scaleState = SceneScaleState.sssShrinked;
}
Camera.main.orthographicSize = sz;
} else if (scaleState == SceneScaleState.sstEnlarged) {
if (sz <= normalCameraSize) {
sz = normalCameraSize;
scaleType = SceneScaleType.sstNone;
scaleState = SceneScaleState.sssNormal;
}
Camera.main.orthographicSize = sz;
}
}
}
}
将脚本挂到 Main Camera 上,滚动鼠标滚轮,场景即发生缩放了。
Unity2D 里的场景缩放实现的更多相关文章
- Cocos2d-X3.0 刨根问底(九)----- 场景切换(TransitionScene)源码分析
上一章我们分析了Scene与Layer相关类的源码,对Cocos2d-x的场景有了初步了解,这章我们来分析一下场景变换TransitionScene源码. 直接看TransitionScene的定义 ...
- Cocos2d-X3.0 刨根问底(九)----- 场景切换(TransitionScene)源代码分析
上一章我们分析了Scene与Layer相关类的源代码,对Cocos2d-x的场景有了初步了解,这章我们来分析一下场景变换TransitionScene源代码. 直接看TransitionScene的定 ...
- [Cocos2d-x For WP8]Scene场景
场景(CCScene) 在游戏里,场景就是关卡. CCScene是app工作流程上独立块,一个app可能拥有多个scene,但是在任何时候只能有一个是激活状态的.一个CCScene对象由一个 ...
- camera render texture 游戏里的监控视角
Camera里: 新建render texture并拖入到target texture里 新建材质球 拖入render texture camera里的视角会在材质球上出现 新建一个pla ...
- Loadrunner 运行场景时:missing newline in XXX.dat 错误解决
脚本参数化类型为file,在controller里运行场景的时候,报了个missing newline的错误,查了一下,将参数化的dat文件中的最后一行补上一个空行就解决啦!! 如果遇到此错误,需检查 ...
- AndroidTv Home界面实现原理(二)——Leanback 库的主页卡位缩放动画源码解析
先看个效果图: 上一篇中,我们留了问题,在 Tv Home 界面这种很常见聚焦卡位放大动画效果,我们这一篇就来看看 Leanback 库是怎么实现的. 如果要我们自己实现的话,思路应该不难,就是写个放 ...
- cocos2d 场景切换和弹出场景、收回场景
场景弹出收回很简单 用以下代码在任意一个地方显示“设置场景”: [[CCDirector sharedDirector] pushScene:[Settings scene]]; 如果你身处“设置场景 ...
- 在WPF里面实现以鼠标位置为中心缩放移动图片
原文:在WPF里面实现以鼠标位置为中心缩放移动图片 在以前的文章使用WPF Resource以及Transform等技术实现鼠标控制图片缩放和移动的效果里面,介绍了如何在WPF里面移动和放大缩小图片, ...
- Cocos2d-x 学习笔记(3.1) Scene 场景与场景切换
1. Scene 简介 游戏中我们看到/看不到的所有元素都是展示在场景之Scene上. 我们可以把场景比作放在地上的没盖纸箱,层Layer是纸箱里堆放的玻璃,Sprite等元素画在玻璃Layer上,这 ...
随机推荐
- iphone状态栏高度?
设备分辨率 状态栏高度 导航栏高度 标签栏高度 iPhone6 plus 1242×2208 px 60px ...
- sublime text3配置node.js开发环境
今天配置sublime下node.js网上搜索很多方法. 首先:传统的方法是 1.GIT方法 可直接输入 Git clone https://github.com/tanepiper/SublimeT ...
- Linux基本操作命令
Linux基本操作命令 首先介绍一个名词“控制台(console)”,它就是我们通常见到的使用字符操作界面的人机接口,例如dos.我们说控制台命令,就是指通过字符界面输入的可以操作系统的命令,例如do ...
- Oracle merge into
Oracle中Merge into用法总结 文件来源:(http://blog.csdn.net/yuzhic/article/details/1896878) 有一个表T,有两个字段a.b,我们想在 ...
- Python学习【第三篇】Python变量
变量 声明变量 #!/usr/bin/env python name = "Bourbon" 上述代码声明了一个变量,变量名为:name,变量的值为:"Bourbon&q ...
- C++学习笔记 指针与引用
指针与引用 1. 指针 (1) 指针是一个变量(实体),存储的是一个地址,指向内存的一个存储单元,指针可以为空 (2) 指针可以为空,在声明定义时可以不初始化 (3) 指针在初始化之后可以重新指向其 ...
- vim 命令加解密文件
加密文件 vim file :X (大写X,是加密 ,小写x是保存) 输入密码: 确认密码: 解除密码: vim file :set key= :wq 命令模式下,输入 /word 后回车,即查找w ...
- Java提高篇——理解String 及 String.intern() 在实际中的应用
1. 首先String不属于8种基本数据类型,String是一个对象. 因为对象的默认值是null,所以String的默认值也是null:但它又是一种特殊的对象,有其它对象没有的一些特性. 2. ...
- Trace-如何跟踪某个Job的开销
1.背景 下面是从以往Profiler收集的跟踪文件中提取Job有关数据 ;with cte as( Duration_ms ,CPU CPU_ms,Reads,Writes,StartTime,En ...
- python之面向对象编程
1.面向对象介绍: 世界万物,皆可分类 世界万物,皆为对象 只要是对象,就肯定属于某种类 只要是对象,就肯定有属性 2. 面向对象的几个特性: class类: 一个类即对一类拥有相同属性的对象的抽象, ...