概述
2D游戏中设置有视差效果的背景实现一种伪3D的效果
实现过程
固定摄像头版本
一个gameobject设置sprite renderer设置图片。复制一份放在游戏场景前进的方向。(按住V键拖动图片的边角可使两张图片无缝的拼在一起)
设置移动脚本,当超出边界后重置位置。
重复上述操作给不同的背景设置不同的移动速度即可实现视差效果。
对应脚本脚本
using UnityEngine;
public class Parallax : MonoBehaviour
{
[SerializeField] private float parallaxSpeed;
private float spriteHeight;
private Vector3 startPos;
void Start()
{
startPos = transform.position;
spriteHeight = GetComponent<SpriteRenderer>().bounds.size.y;
}
// Update is called once per frame
void Update()
{
transform.Translate(Vector3.down*parallaxSpeed*Time.deltaTime);
if (transform.position.y < startPos.y - spriteHeight)
{
transform.position = startPos;
}
}
}
移动摄像头版本(常用于2D横板游戏中)
在背景图片左右各复制一张图片
代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ParallaxBackground : MonoBehaviour
{
private GameObject cam;
[SerializeField] private float parallaxEffect;
private float xPosition;
private float length;
void Start()
{
cam = GameObject.Find("Main Camera");
length = GetComponent<SpriteRenderer>().bounds.size.x;
xPosition = transform.position.x;
}
void Update()
{
float distanceMoved = cam.transform.position.x * (1 - parallaxEffect);
float distanceToMove = cam.transform.position.x * parallaxEffect;
transform.position = new Vector3(xPosition + distanceToMove, transform.position.y);
if (distanceMoved > xPosition + length)
xPosition = xPosition + length;
else if (distanceMoved < xPosition - length)
xPosition = xPosition - length;
}
}