Unity2D 如何实现游戏背景画面具有层次的移动(学习自用)

本文介绍了如何在Unity游戏中,通过编程让背景天空和灌木丛跟随摄像机移动,同时控制移动速度。作者详细展示了如何声明和使用transform变量,以及在Update()函数中更新背景的位置以实现效果。
摘要由CSDN通过智能技术生成

在创建游戏背景时,由三个部分组成,背景天空、背景草地、角色行走的陆地。

明确需求:需要让天空跟随摄影机移动,灌木丛比天空移动的缓慢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;
    }
}

之后别忘了给公共变量赋值。

  • 11
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值