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上,这 ...
随机推荐
- php token的生成
转载自:http://blog.snsgou.com/post-766.html --->非开放性平台 --->公司内部产品 接口特点汇总: 1.因为是非开放性的,所以所有的接口都是封闭的 ...
- [PCL]点云渐进形态学滤波
PCL支持点云的形态学滤波,四种操作:侵蚀.膨胀.开(先侵蚀后膨胀).闭(先膨胀后侵蚀) 在#include <pcl/filters/morphological_filter.h>中定义 ...
- 《机电传动控制》PLC仿真
1.红绿灯 经仿真,可以完成所设定的要求.对比普通的红绿灯,知识加了X25和X20的控制,来控制夜间模式 . 2.传送带 经仿真,可以完成所设定的要求. 总结:这两个仿真都是亲自完成,感觉难度有些大. ...
- java.util.ConcurrentModificationException --map
key:3-key key:/v1.02-key Exception in thread "main" java.util.ConcurrentModificationExcept ...
- 【转】Apache Digest验证
Apache默认使用basic模块验证,都是明文传输,不太安全,所以本文使用Digest来验证,以提高安全性. 1.Apache配置: A.目录权限配置 Alias /nagios "/us ...
- Eclipse中配置svn
1.打开eclipse,help--> Eclipse MarketPlace...,搜索输入“subclipse”,点击安装,一路按向导安装: 2.安装成功后,在Window --> S ...
- iOS 版 MWeb 发布到自建 Wordpress 和 Metaweblog API 使用指南
MWeb 的发布服务的使用方法是先增加发布服务,再使用.在 iOS 中,要增加发布服务,可以在首页中,点左上角的 "设置" 按钮,进入设置界面,并滑动到底部,就会看到增加发布服务的 ...
- ibatis输入多个参数
ibatis输入多个参数 在ibatis中,会发现其输入参数只能有一个,于是当出现需要进行多个输入参数的时候,就要想点办法了,我看到的有以下两种比较好的方法能够解决这个问题1) 用String ...
- c++模板函数实例化的偏序机制
一:废话 今天在stackoverflow上看到一个关于c++模板specialization的问题: http://stackoverflow.com/questions/18283851/temp ...
- linux------------centos防火墙
CentOS7默认的防火墙不是iptables,而是firewalle. 你可以用rpm -qa | grep iptables来查看,一般会出现两个一个是iptables 另一个是iptables. ...