Unity 通过摄像机移动实现连续滚动的背景
2014-04-20 00:28
701 查看
第一篇技术博客,请大家多多关照。
最近从 Web转型做 Unity开发,当初接触Unity主要也是因为它里面应用到了一个我比较感兴趣的 开源项目--Mono,俗称“开源的DotNet”,就是你可以使用 C#做跨平台的应用开发。我也是去年这个时候初步了解了一下 使用C#开发Android项目,以后等有时间了再把相关的技术博客给补上吧。其实Unity在跨平台的发不上也很大程度借助了Mono,虽然脚本只是Unity开发中的一部分。
言归正传,我们还是说Unity。学习Unity也有一段时间了,总感觉什么地方都学了那么点,但高阶技术点用的也不是那么很熟。所以决定经常性的把自己的所学都总结出来,和大家分享一下,大家一起进步,让我们共同进步。
学习Luffy的一句话“Unity主程,我当定啦!”
第一篇博客打算讲一下如何实现一个类似于 横版跑酷类游戏的背景的不断移动的效果。因为像背景这样的元素如果把它做成每一个关卡用一张完整的贴图是不太符合实际情况的。我们可以用几张风格相同的图片的不规则切换来实现我们的背景效果,而且当我们的主角移动到一个位置的时候,他走过的路的背景就已经没有必要去显示了,我们就可以把之前的贴图给移除掉。
大致的原理:我们通过 从边缘发出的射线来判断 当前摄像机在这一帧和上一帧拍到的是不是同一张贴图,如果不是的话就说明刚才那个贴图的地方,摄像机已经移动过去了,就可以把它删除了。
首先我们需要把 Camera 设置为 Orthographic正交投影
在场景刚加载的时候,我们先实例化3个一次的背景出来·,将其位置分别摆正
然后在 Camera 不断的移动中,通过Camera中心点和边缘发出的设想来判断是否将 上一个贴图给删除。Bingo,So easy
代码其实很简单,代码中的一些常量也是根据图片大小调整出来的。
来看一下简单的效果:Chopper
最近从 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
相关文章推荐
- [cocos2d-x][游戏开发]通过cocos2d-x实现简易飞机大战 03.游戏界面 背景层实现滚动
- unity 安卓端通过滑动屏幕实现对物体的移动以及缩放
- unity 通过摄像机模拟实现小地图
- 【unity3d学习笔记】Shader-通过Shader实现2D游戏中无限滚动的背景Shader
- unity 通过点击游戏小地图,来移动主相机功能实现
- 通过ScrollView控制元素滚动效果以及背景图片平铺实现
- windows通过StretchBlt实现动态背景移动
- 【Unity快速实现小功能】实现摄像机跟随角色移动功能
- 【Unity快速实现小功能】动画系统学习小技巧篇(二)——摄像机跟随角色移动
- 通过鼠标的移动来实现层的隐藏与显示
- Unity3D里实现物体移动到目标点,并且摄像机跟着移动的简单方案
- 【Unity3D自学记录】Unity3D游戏开发之连续滚动背景
- iPhone开发之UIScrollView滚动组件的使用(三) 拖线实现按钮控制大图移动之contentInsets增加内容边距
- C#——实现物体的移动(unity)
- CSS---前端通过 css如何实现overflow:auto滚动超出部分的同时隐藏滚动条?
- 【Unity】NGUI自制 Scroll View实现触摸滚动相册效果
- 自定义Adapter,通过复写getView方法,实现ListView中item背景颜色变化
- Android中通过ViewHelper.setTranslationY实现View移动控制(NineOldAndroids开源项目)
- 安卓与IOS通过hessian接口实现用友系统移动手机订单1JAVA连接sql2005数据库
- Unity中让一个物体通过方向键来移动的操作