C++:世界上唯一能让程序员在配置环境上比写代码还累的语言 😅|

香菇0_0

园龄:2年7个月粉丝:10关注:1

【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 中国大陆许可协议进行许可。

posted @   香菇0_0  阅读(154)  评论(0编辑  收藏  举报
评论
收藏
关注
推荐
深色
回顶
收起
点击右上角即可分享
微信分享提示
  1. 1 404 not found REOL
404 not found - REOL
00:00 / 00:00
An audio error has occurred.