【Unity2D】背景分层实现
2D游戏如果只有一层背景显得比较单调,为了提现更强的空间感,可以通过添加多个背景层,并且让背景层随着角色的移动而缓慢移动,距离近的背景层移动较快,反之移动较慢。代码实现如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class LayeringBackground : MonoBehaviour
{
private void Awake()
{
_cam = Camera.main.transform;
}
void Start()
{
_preCamPos = _cam.position;
_parralaxScales = new float[_backgrounds.Length];
for(int i = 0; i < _parralaxScales.Length; ++i)
{
_parralaxScales[i] = Mathf.Pow(_bgMoveScaleFactor, i + 1);
}
// 判断背景是否作为了相机的子物体
_bFollowCamera = new bool[_backgrounds.Length];
for(int i = 0; i < _backgrounds.Length; ++i)
{
if (_cam == _backgrounds[i].parent)
_bFollowCamera[i] = true;
else
_bFollowCamera[i] = false;
}
}
void Update()
{
for(int i = 0; i < _backgrounds.Length; ++i)
{
float offsetX = (_preCamPos.x - _cam.position.x) * _parralaxScales[i];
Vector3 offset2Camera = _cam.position - _preCamPos;
var targetPos = _backgrounds[i].position;
// 背景跟随相机移动
if (!_bFollowCamera[i])
{
targetPos += offset2Camera;
}
targetPos.x += offsetX;
_backgrounds[i].position = targetPos;
}
_preCamPos = _cam.position;
}
[Header("前面的移动快,后面的移动慢")]
public Transform[] _backgrounds;
public float _bgMoveScaleFactor = 0.25f;
float[] _parralaxScales;
private Transform _cam;
private Vector3 _preCamPos;
bool[] _bFollowCamera;
}
效果图:
不同背景层的移动速度不同。
本文作者:香菇0_0
本文链接:https://www.cnblogs.com/Xiang-gu/p/16900597.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步