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上,这 ...
随机推荐
- 【iOS测试】【随笔】帧率FPS评测
◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/5943263.html 背景 我们的新版App对首页的列 ...
- Servlet 3.0
Servlet 3.0 作为 Java EE 6 规范体系中一员,随着 Java EE 6 规范一起发布.该版本在前一版本(Servlet 2.5)的基础上提供了若干新特性用于简化 Web 应用的开发 ...
- QFileSystemModel
#include "dialog.h" #include "ui_dialog.h" Dialog::Dialog(QWidget *parent) : QDi ...
- bash小技巧
Linux 下shell基本上默认是 bash, 下面是我总结的一些技巧. & 后台运行程序 ,注意退出当前shell后 程序也会退出() 使用子shell, 比如 (cd ../../ ...
- C# out Keyword
In C#, out keyword 是argument传值变成passed by reference. out keyword 在同时返回多个值时很有用. 与ref keyword 相似. 若是使用 ...
- Mysql查看版本,端口命令
有一段时间没有鼓捣TP了,今天又再复习一下.在Model获取数据的时候提示'MySQL server has gone away'错误,一开始以为是TP问题,还查了半天,后来才发现是配置mysql的时 ...
- JFinal学习
1 jfinal-1.9-bin.jar 2 继承Controller编写控制器 public void sendJPushToXXX() { String userId = getPara(&quo ...
- 解决Office互操作错误"检索COML类工厂中 CLSID为 {xxx}的组件时失败,原因是出现以下错误: 80070005"
Excel为例(其他如Word也适用)文件数据导入时报出以下错误: 检索COML类工厂中 CLSID为 {00024500-0000-0000-C000-000000000046}的组件时失败,原因是 ...
- Nodejs的Express完成安装指导
一.安装 官网http://expressjs.com/ express4.X的有一些变化,4.x版本中将命令工具单独分出来了(https://github.com/expressjs/generat ...
- sort
sort -n -k2 filename 按第二列,按顺序排列 sort -nr -k2 filename 按第二列,按反向顺序排列