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上,这 ...
随机推荐
- CXF调用webservice超时设置
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); factory.setServiceClass(Service1Soap.cl ...
- New library for Matlab - test
Thanks http://www.matlabsky.com/thread-120-1-1.html Install directory $MatlabRoot\toolbox or >&g ...
- IOS手动添加CoreData
手动添加coreData: 1.在target-build phrase-Link binary with libraries里增加CoreData Framework 2.加入数据模型:comman ...
- wp8.1 VS2013部署手机发生 DEP6100 6200错误
wp8.1 VS2013部署手机发生 DEP6100 6200错误 ,提示未发现手机. 可能是数据线有问题 建议更换 本人的电脑有很多次,提示DEP6100 6200错误,每一次都需要重做系统.. 然 ...
- jar包的MANIFEST.MF注意事项
1. 基本格式 属性名称:空格+属性值 2. 一行最多72个字符,换行继续必须以空格开头 3. 文件最后必须要有一个回车换行 4. Class-Path 当前路径是jar包所在目录,如果要引用当前目录 ...
- oracle里面base64加解密
1. base64 的解密函数select utl_raw.cast_to_varchar2(utl_encode.base64_decode(utl_raw.cast_to_raw('dGVzdA= ...
- JAVASE02-Unit04: 集合框架 、 集合操作 —— 线性表
Unit04: 集合框架 . 集合操作 -- 线性表 操作集合元素相关方法 package day04; import java.util.ArrayList; import java.util.Co ...
- nvm诡异的报错
安装:curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.0/install.sh | bash wget -qO- htt ...
- XML的一些事
XML文件的优缺点: 使用XML作为传输格式的优势: 1. 格式统一, 符合标准 2. 容易与其他系统进行远程交互, 数据共享比较方便 3.调用将 XML 用作传输的现有服务. 4.使用 XSLT 可 ...
- 在Sublime中编辑批处理并运行
在Sublime->Tool->Build System -> New Build System 复制如下代码名保存为 CMD.sublime-build { "cmd&q ...