最近实习项目中要求用2D项目实现3D效果,我这技术美术还是太菜不能弄出PBR模型,也只能帮他们做做视差地图了,平面级的模版如下,也就是相对于每一帧摄像机的移动再根据远近关系做偏移罢了。
using UnityEngine;
public class MAPmoveManager : MonoBehaviour
{
public Transform bacKGrond;
public Transform frontCloud;
public float offsetFrontSpeed;
public float offsetBackSpeed;//拿到前中后景的坐标组件,把偏移参数暴露出来。
private Transform cam;
private Vector3 preCamPos;
// Use this for initialization
void Awake()
{
cam = Camera.main.transform;
}
void Start ()
{
preCamPos = cam.position;//要拿到第一帧的位置,不然有一个值
}
// Update is called once per frame
void Update ()
{
Vector2 cammove = (preCamPos - cam.position);//拿到每一帧摄像机的偏移
backgroundMove(cammove);//对各个层级做偏移
CloudgroudMove(cammove);
preCamPos = cam.position;//更新摄像机位置
}
void backgroundMove(Vector2 target)
{
bacKGrond.position = new Vector3(bacKGrond.position.x + target.x * offsetBackSpeed,
bacKGrond.position.y + target.y * offsetBackSpeed, bacKGrond.position.z);
}
void CloudgroudMove(Vector2 target)
{
frontCloud.position = new Vector3(frontCloud.position.x + target.x * offsetFrontSpeed,
frontCloud.position.y + target.y * offsetFrontSpeed, frontCloud.position.z);
}
}
后续考虑做平滑,加上弹力效果等,有更好的表现。