2.添加了三个关卡的视差效果 3.添加了第一关的机枪兵的开枪时的火光 4.实装了第二关的挡板遮挡灯光效果 5.增加了第一关中的大型烟雾 6.实装了第二关的水面反射 (以上更改均有或多或少修改程序的代码) 7.增加了玩家脚底的跑动灰尘效果 8.增加了战场上时不时飘过的黑色烟雾(有时可能有些违和)
78 lines
2.3 KiB
C#
78 lines
2.3 KiB
C#
using System.Collections;
|
||
using System.Collections.Generic;
|
||
using UnityEngine;
|
||
/// <summary>
|
||
/// Weiva Parallax
|
||
/// 2D 视差效果
|
||
/// 本组件背景视差效果是根据背景对象的世界坐标z值来计算。默认参数中的背景数组第一个元素为最远平面,
|
||
/// 既与摄像机同步的平面,该对象之间的背景根据z值进行视差计算。也可以单独设置参数 synZ 强制设置最
|
||
/// 远平面。大于最远平面的 z 值将会反超摄像机移动。
|
||
/// weivain@qq.com
|
||
/// www.weiva.com
|
||
/// </summary>
|
||
public class WVParallax : MonoBehaviour {
|
||
|
||
[Header("背景图片对象,Element 0 为与摄像机同步的背景层")]
|
||
public Transform[] backgrounds;
|
||
|
||
// 主摄像机
|
||
private Transform cam;
|
||
// 上一帧摄像机的位置
|
||
private Vector3 previousCamPos;
|
||
// 摄像机同步背景层的 z 值
|
||
[Header("摄像机同步背景层Z值,若0为背景层0")]
|
||
public float synZ=0f;
|
||
[Header("偏移x系数")]
|
||
public float parallaxScaleX=1f;
|
||
[Header("偏移y系数")]
|
||
public float parallaxScaleY=1f;
|
||
|
||
public bool canParallax = true;
|
||
|
||
|
||
// 初始化
|
||
void Start ()
|
||
{
|
||
cam = Camera.main.transform;
|
||
// 上一帧摄像机的位置
|
||
previousCamPos = cam.position;
|
||
if(synZ == 0 && null != backgrounds[0])
|
||
{
|
||
synZ = backgrounds[0].position.z;
|
||
}
|
||
if(synZ == 0)
|
||
{
|
||
synZ = 100f;
|
||
}
|
||
|
||
}
|
||
|
||
// 每一帧执行
|
||
void Update ()
|
||
{
|
||
if (canParallax)
|
||
{
|
||
// 获得摄像机和上一帧的偏移值
|
||
float parallax = previousCamPos.x - cam.position.x;
|
||
|
||
//摄像机偏移矢量
|
||
Vector3 camMove = cam.position - previousCamPos;
|
||
camMove.x *= parallaxScaleX;
|
||
camMove.y *= parallaxScaleY;
|
||
|
||
//同步背景
|
||
for (int i = 0; i < backgrounds.Length; i++)
|
||
{
|
||
if (null == backgrounds[i]) continue;
|
||
|
||
Vector3 targetToMove = backgrounds[i].position + camMove * (backgrounds[i].position.z / synZ);
|
||
backgrounds[i].position = targetToMove;
|
||
|
||
}
|
||
|
||
// 更新上一帧摄像机的位置
|
||
previousCamPos = cam.position;
|
||
}
|
||
}
|
||
}
|