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上,这 ...
随机推荐
- 《Linux内核设计与实现》CHAPTER17阅读梳理
<Linux内核设计与实现>CHAPTER17阅读梳理 [学习时间:3.5hours] [学习内容:设备类型,模块,内核对象,sysfs] 个人思考部分见[]标出的部分 一.课堂讲解整理& ...
- BitTorrent DHT 协议中文翻译
前言 做了一个磁力链接和BT种子的搜索引擎 {Magnet & Torrent},因此把 DHT 协议重新看了一遍. BitTorrent 使用"分布式哈希表"(DHT)来 ...
- 带阈值的平滑l0范数加速稀疏恢复——同名英文论文翻译
原文链接:Thresholded Smoothed l0 Norm for Accelerated Sparse Recovery http://ieeexplore.ieee.org/documen ...
- java://Comparator、Comparable的用法(按照要求将map集合的键值对进行顺序输出)
import java.util.*; public class Person implements Comparable<Person>//使Person的属性具有比较性 { priva ...
- Android中如何查看内存
文章参照自:http://stackoverflow.com/questions/2298208/how-to-discover-memory-usage-of-my-application-in-a ...
- jQuery 跨域访问的三种方式 No 'Access-Control-Allow-Origin' header is present on the reque
问题: XMLHttpRequest cannot load http://v.xxx.com. No 'Access-Control-Allow-Origin' header is present ...
- SQL Server中Rowcount与@@Rowcount的用法 和set nocount on 也会更新@@Rowcount
rowcount的用法: rowcount的作用就是用来限定后面的sql在返回指定的行数之后便停止处理,比如下面的示例, set rowcount 10select * from 表A 这样的查询只会 ...
- nyist 78 圈水池
http://acm.nyist.net/JudgeOnline/problem.php?pid=78 圈水池 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 有一个 ...
- ArcGis for Android 工作与学习
ArcGis安装 需求 windows7(32/64) Eclipse3.6以上版本 Android Sdk 2.2以上 Jdk 7 安装步骤 Eclipse安装 下载ArcGis插件 在Eclips ...
- js基础练习三之数码时钟
这章节有两个实例,1,定时器的使用; 2,数码时钟; 用到的js知识:定时器,Date对象. >>>>>定时器 开启定时器: setInterval 间隔型 setTim ...