问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Unity新手必学:动态背景制作技巧

创作时间:
作者:
@小白创作中心

Unity新手必学:动态背景制作技巧

引用
CSDN
11
来源
1.
https://blog.csdn.net/qqrrjj2011/article/details/138558516
2.
https://blog.csdn.net/weixin_56457636/article/details/130096682
3.
https://blog.csdn.net/qq_35456617/article/details/142711767
4.
https://blog.csdn.net/qq_52772299/article/details/136204269
5.
https://blog.csdn.net/Yungoal/article/details/145303654
6.
https://blog.csdn.net/IT_Lightning/article/details/136679086
7.
https://cloud.baidu.com/article/3370625
8.
https://blog.csdn.net/qq_36917144/article/details/121412528
9.
https://www.cnblogs.com/apachecn/p/18352676
10.
https://unity.com/cn/how-to/2d-special-effects-vfx-graph-shader-graph
11.
https://unity.com/cn/how-to/getting-started-with-hdrp

在Unity游戏开发中,动态背景不仅能提升游戏的视觉效果,还能增强玩家的沉浸感。本文将从基础概念讲起,逐步深入到具体实现步骤,帮助Unity新手掌握动态背景制作技巧。

01

基础概念

在开始之前,让我们先了解几个核心概念:

  1. 空对象(GameObject):在Unity中,空对象是一个没有实际模型的容器,可以用来承载脚本、组件或作为其他游戏对象的父对象。在动态背景制作中,我们经常使用空对象来管理背景图层。

  2. 材质(Material):材质决定了游戏对象的外观,包括颜色、纹理等属性。通过更换材质,可以实现背景的动态效果。

  3. 图集(Atlas):图集是将多个图片整合到一张大纹理图中的技术,可以减少Draw Call,优化游戏性能。在制作复杂背景时,使用图集是一个好习惯。

02

视觉差效果

视觉差效果是通过调整不同背景层的移动速度,营造出近大远小的视觉感受。具体实现步骤如下:

  1. 准备素材:首先需要几张可以无缝衔接的背景图,例如天空、城市等。

  2. 创建背景对象:为每张背景图创建一个Sprite对象,并将其位置调整到合适的位置。

  3. 编写脚本:创建一个名为ParallaxBackground.cs的脚本,添加以下代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ParallaxBackground : MonoBehaviour
{
    private GameObject cam;
    public float parallaxEffect;  //视觉差强度

    private float xPosition;

    void Start()
    {
        cam = GameObject.Find("Main Camera");
        xPosition = transform.position.x;
    }

    private void FixedUpdate()
    {
        float distanceToMove = cam.transform.position.x * parallaxEffect;  
        transform.position = new Vector3(xPosition + distanceToMove, transform.position.y);
    }
}
  1. 设置参数:将脚本挂载到背景对象上,根据需要调整parallaxEffect的值。通常,远处的背景(如天空)设置为1,近处的背景(如城市)设置为0.9或更小。
03

无限滚动背景

无限滚动背景常用于跑酷类游戏,可以营造出持续前进的感觉。实现方法如下:

  1. 准备素材:需要一张可以无缝衔接的背景图。

  2. 创建背景对象:将背景图创建为Sprite对象,并复制两张,一张放在左边,一张放在右边,确保无缝衔接。

  3. 编写脚本:修改ParallaxBackground.cs脚本,添加无限滚动功能:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ParallaxBackground : MonoBehaviour
{
    private GameObject cam;
    public 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;
    }

    private void FixedUpdate()
    {
        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;
    }
}
  1. 设置参数:将脚本挂载到背景对象上,调整parallaxEffect的值,通常设置为1。
04

多材质切换

多材质切换可以实现背景的动态变化,例如天气变化、日夜交替等效果。

  1. 准备素材:准备需要切换的材质球,例如晴天和雨天的天空材质。

  2. 创建脚本:创建一个名为ChangeMaterial.cs的脚本:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class ChangeMaterial : MonoBehaviour
{
    public GameObject obj;    
    MeshRenderer meshRender;        
    public Button button;    

    public Material outsideMat;
    public Material insideMat;

    Material[] matArray;        
    Material[] setArray;      

    private void Awake()
    {
        meshRender = obj.GetComponent<MeshRenderer>();
        matArray = meshRender.materials;     
    }

    void Start()
    {
        setArray = new Material[matArray.Length];
        for (int i = 0; i < matArray.Length; i++)
        {
            setArray[i] = outsideMat; 
            i++;
            setArray[i] = insideMat;
        }

        button.onClick.AddListener(OnButtonClick);
    }

    public void OnButtonClick()
    {
        meshRender.materials = setArray;
    }
}
  1. 设置参数:将脚本挂载到需要切换材质的对象上,通过按钮点击触发切换效果。
05

实际案例

让我们通过一个简单的2D游戏场景,综合运用上述技术实现动态背景。

  1. 创建场景:新建一个Unity项目,导入所需的背景图片和角色模型。

  2. 设置相机:创建一个空对象作为MainCamera的父对象,并添加CameraFollow.cs脚本实现镜头跟随:

using UnityEngine;

public class CameraFollow : MonoBehaviour
{
    public Transform player; 

    void LateUpdate()
    {
        transform.position = new Vector3(player.position.x, player.position.y, player.position.z);
    }
}
  1. 添加背景:按照视觉差效果和无限滚动的步骤,创建多层背景,并设置不同的parallaxEffect值。

  2. 测试效果:运行场景,观察背景的动态效果是否符合预期。

通过以上步骤,你已经掌握了在Unity中制作动态背景的基本技巧。当然,实际项目中可能需要更复杂的特效和优化,但掌握了这些基础,你已经可以开始尝试制作自己的游戏场景了。继续实践和探索,相信你会创造出令人惊叹的游戏世界!

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号