在创建游戏背景时,由三个部分组成,背景天空、背景草地、角色行走的陆地。
明确需求:需要让天空跟随摄影机移动,灌木丛比天空移动的缓慢0.5倍。
首先声明两个transform变量farBackground和middleBackground,然后在游戏运行前声明float变量lastXPos,并且赋予摄影机最开始的x轴位置。具体代码如下:
public Transform farBackground, middleBackground; // 声明两个变量
private float lastXPos;
void Start()
{
lastXPos = transform.position.x;
}
在上一篇文章,已经设置了摄影机随着角色的x轴移动的代码,现在,需要获得摄影机移动的距离,为当前摄影机的位置 transform.position减去最开始的摄影机的位置lastXPos。
float amountToMoveX = transform.position.x - lastXPos;
对于天空的移动,这里是在原有的基础之上加上了摄影机移动的位置;
对于灌木丛的移动,这里是在原有的基础之上加上了摄影机移动的一半的位置。
最后需要注意的问题是需要及时更新摄影机最新的位置也就是lastXPos值。
完整代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CameraController : MonoBehaviour
{
public Transform target;
public Transform farBackground, middleBackground; // 声明两个变量
private float lastXPos;
void Start()
{
lastXPos = transform.position.x;
}
void Update()
{
// 只获取目标物体的x轴位置移动,其余不变
transform.position = new Vector3(target.position.x, transform.position.y, transform.position.z);
// 最开始的摄影机的位置减去后来摄影机移动的位置
float amountToMoveX = transform.position.x - lastXPos;
farBackground.position = farBackground.position + new Vector3(amountToMoveX, 0f, 0f);
middleBackground.position += new Vector3(amountToMoveX * 0.5f, 0f, 0f);
// 更新摄影机的位置
lastXPos = transform.position.x;
}
}
之后别忘了给公共变量赋值。