总目录https://blog.csdn.net/qq_54263076/category_11900070.html?spm=1001.2014.3001.5482
效果图如下:
1.先在背景空物体下拖入所需要的空物体,并添加Sprite渲染器,将图片放入里面(也可以直接拖动精灵图作为背景空物体子物体,会自动完成渲染器添加)
注意调整好各个背景的遮盖关系
我的一些图层顺序排序
注意需要将这些子物体的绘制模式全改成平铺,这样修改它的宽度后会自动贴下一张图片。宽度要设置成大于本来宽度的三倍以上(如果不这样,在后面脚本完成的时候,当角色移动超过背景的时候会瞬间填充移动,宽度过小的时候移动会直接闪现在屏幕上,而我们需要在屏幕外刷新背景)
2.为各个子物体添加BgkControl脚本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BgkControl : MonoBehaviour
{
//摄像机
private Transform cameraT;//前一帧摄像机位置
private Vector3 lastCameraPoi;//后一帧摄像机位置
//子物体移动倍速
public Vector2 SpeedTime = new Vector2(1f,1f);
//纹理图宽度
private float textUnitSizex;//textUnitSizex
// Start is called before the first frame update
void Start()
{
cameraT = Camera.main.transform;
lastCameraPoi = cameraT.position;
//获取纹理图及宽度
Sprite sprite = transform.GetComponent<SpriteRenderer>().sprite;
Texture2D texture = sprite.texture;
textUnitSizex = texture.width / sprite.pixelsPerUnit;//纹理图宽度除像素宽度
}
// Update is called once per frame
void Update()
{
Vector3 delMovement = cameraT.position - lastCameraPoi;
transform. position += new Vector3(delMovement.x * SpeedTime.x,delMovement.y* SpeedTime.y,0);
lastCameraPoi = cameraT.position;//更新后一帧摄像机位置
//背景图无限
if (Mathf.Abs(cameraT.position.x - transform.position.x )> textUnitSizex)
{
//偏移量
float offsetPositionX = (cameraT.position.x - transform.position.x)%textUnitSizex;
//移动背景图
transform.position = new Vector3(cameraT.position.x+ offsetPositionX, transform.position.y);
}
}
}
为每个物体加好小本之后就可以在unity中每个物体下面脚本下面改成自己的x,y倍速。一般而言,远处物体的x倍速为0-0.2之间(云,雾),中间物体x倍速在0.2-0.4之间(山),近物体倍速在0.4-0.6之间(树木),前景物体(遮挡角色的背景)移动与摄像机移动方向相反,且距离最近x倍速在(-1.5到-2之间)。y倍速越远的物体越大,越近的物体越小,可以形成一种让上跳之后显现后面物体的效果(前景为负值)
这样就完成了!!!
下一篇