2d平台跳跃游戏当相机移动的时候背景跟随进行微调移动,从而使得玩家获得3d的错觉

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class BackGroundParallax : MonoBehaviour {

public Transform[] backgrounds;//所有的背景层,这里,离玩家最近的背景的下标i最小,当i足够大时,背景和相机是一起位移的,比如真实世界里,人走动的时候,周围的房屋都向后移动,而天空中的星星却看起来没有移动过
public float parallaxScale;//相对相机的移动补偿的比例值
public float parallaxScaleReductionFactor;//对于不同的背景层的移动补偿的差值比例
public float smoothing;

private Transform cam;
private Vector3 previousCamPos;//相机在上一帧的位置

// Use this for initialization
void Start () {
cam = Camera.main.transform;
previousCamPos = cam.position;
}

// Update is called once per frame
void Update () {
float parallax = (previousCamPos.x - cam.position.x) * parallaxScale;//根据相机的单帧位移获得补偿值大小

for (int i = 0; i < backgrounds.Length; i++) {
//获得位移的x值,i*parallaxScaleReductionFactor得到不同背景层的补偿差
float backgroundTargetPosX = backgrounds[i].position.x + parallax * (i*parallaxScaleReductionFactor+1);

Vector3 backgroundTargetPos = new Vector3(backgroundTargetPosX, backgrounds[i].position.y, backgrounds[i].position.z);
backgrounds[i].position = Vector3.Lerp(backgrounds[i].position,backgroundTargetPos, smoothing * Time.deltaTime);
}
previousCamPos = cam.position;
}
}

最新文章

  1. C#之数组篇
  2. inline--行内元素
  3. javascript文件夹选择框的两种解决方案
  4. js实现选项卡
  5. hdu 1576 A/B (扩展欧几里德简单运用)
  6. 在GridView控件里面绑定DropDownList控件
  7. atexit模块解析
  8. unsupported major.minor version 52.0,错误
  9. Redux源码分析之compose
  10. springmvc图片上传(兼容ie8以上,实时预览)
  11. Deap Learning (吴恩达) 第一章深度学习概论 学习笔记
  12. jsonp跨域获取数据小解
  13. [Swift]LeetCode950. 按递增顺序显示卡牌 | Reveal Cards In Increasing Order
  14. 【深度学习】吴恩达网易公开课练习(class2 week1)
  15. MapperScan和ComponentScan同时使用问题
  16. 各种“地”—— 各种“GND”
  17. CSS opacity的兼容写法
  18. 设置Redis最大占用内存
  19. 【OpenGL】glsl、glew、glfw
  20. 图片链接转成base64

热门文章

  1. [Redis_1] Redis 介绍 &amp;&amp; 安装
  2. Linux运维之系统性能---vmstat工具分析内存的瓶颈
  3. Apache的权限设置与构建虚拟web主机
  4. 软件架构方面基础-ESB \SOA \GEO-ESB
  5. 设计模式_享元设计模式(flyweight)
  6. HP-UX平台安装Oracle11gR2数据库
  7. Android开发之jdk安装及环境变量配置
  8. java 计算百分数方法
  9. VC++编译错误error C2065: “HANDLE”: 未声明的标识符及添加winbase.h后提示winbase.h(243): error C2146: 语法错误: 缺少“;”(在标识符“Internal”的前面)的解决办法
  10. leetcode338&mdash;Counting Bits