Unity 通过摄像机移动实现连续滚动的背景
来源:互联网 发布:淘宝新店活动方案 编辑:程序博客网 时间:2024/05/09 12:28
第一篇技术博客,请大家多多关照。
最近从 Web转型做 Unity开发,当初接触Unity主要也是因为它里面应用到了一个我比较感兴趣的 开源项目--Mono,俗称“开源的DotNet”,就是你可以使用 C#做跨平台的应用开发。我也是去年这个时候初步了解了一下 使用C#开发Android项目,以后等有时间了再把相关的技术博客给补上吧。其实Unity在跨平台的发不上也很大程度借助了Mono,虽然脚本只是Unity开发中的一部分。
言归正传,我们还是说Unity。学习Unity也有一段时间了,总感觉什么地方都学了那么点,但高阶技术点用的也不是那么很熟。所以决定经常性的把自己的所学都总结出来,和大家分享一下,大家一起进步,让我们共同进步。
学习Luffy的一句话“Unity主程,我当定啦!”
第一篇博客打算讲一下如何实现一个类似于 横版跑酷类游戏的背景的不断移动的效果。因为像背景这样的元素如果把它做成每一个关卡用一张完整的贴图是不太符合实际情况的。我们可以用几张风格相同的图片的不规则切换来实现我们的背景效果,而且当我们的主角移动到一个位置的时候,他走过的路的背景就已经没有必要去显示了,我们就可以把之前的贴图给移除掉。
大致的原理:我们通过 从边缘发出的射线来判断 当前摄像机在这一帧和上一帧拍到的是不是同一张贴图,如果不是的话就说明刚才那个贴图的地方,摄像机已经移动过去了,就可以把它删除了。
首先我们需要把 Camera 设置为 Orthographic正交投影
在场景刚加载的时候,我们先实例化3个一次的背景出来·,将其位置分别摆正
然后在 Camera 不断的移动中,通过Camera中心点和边缘发出的设想来判断是否将 上一个贴图给删除。Bingo,So easy
void Update() { transform.Translate(new Vector3(moveSpeed * Time.deltaTime, 0, 0)); RaycastHit hit; if (Physics.Raycast(transform.position, Vector3.forward, out hit, 20)) { float x = hit.point.x; RaycastHit otherHit; Vector3 v1 = new Vector3(x - 10, transform.position.y, transform.position.z); Vector3 v2 = v1 + Vector3.forward * 20; Debug.DrawLine(v1, v2, Color.red); if (Physics.Raycast(new Vector3(x - 10, transform.position.y, transform.position.z), Vector3.forward, out otherHit, 20)) { if (lastPlane.GetInstanceID()!=otherHit.collider.gameObject.GetInstanceID()) { if (lastPlane!=null) { Destroy(lastPlane); GameObject planeClone1 = (GameObject)Instantiate(plane.gameObject); planeClone1.transform.position = new Vector3(transform.position.x +15, 0, 0); } lastPlane = otherHit.collider.gameObject; } } } }
代码其实很简单,代码中的一些常量也是根据图片大小调整出来的。
来看一下简单的效果:Chopper
- Unity 通过摄像机移动实现连续滚动的背景
- 【Unity3D】连续滚动的背景
- unity 通过摄像机模拟实现小地图
- unity中摄像机的跟随移动
- Unity学习记录-摄像机的移动
- 滚动背景的实现
- Unity实例.001无限滚动的背景
- Unity 移动摄像机的脚本(类似于魔兽争霸, LOL的摄像机移动方式)
- Unity 移动摄像机的脚本(类似于魔兽争霸, LOL的摄像机移动方式)
- unity实现简单的摄像机切换
- Unity 摄像机按照中心点移动
- Unity摄像机跟随角色移动
- windows通过StretchBlt实现动态背景移动
- Unity 2D战棋类 摄像机的局部移动控制
- unity 2D摄像机移动导致FPS骤降的大坑
- 固定背景实现的背景滚动特效
- unity摄像机的切换
- 【unity3d学习笔记】Shader-通过Shader实现2D游戏中无限滚动的背景Shader
- 奇数阶幻方的经典方法-罗伯法
- 第一个Linux字符设备驱动
- 《30天自制操作系统》笔记一二
- 第六周作业1——利用哈夫曼编码英文字母表
- Spring
- Unity 通过摄像机移动实现连续滚动的背景
- IOS CoreData 多表查询demo解析(三)--查询
- 十道海量数据处理面试题与十个方法大总结
- 设计模式之九 单例模式
- 第六周作业——利用哈夫曼编码英文字母表
- [LeetCode] Reverse Linked List II
- ExtJs设置cookie两种方式
- 不能更改map 中key的属性
- opennms操作顺序