gpt4 book ai didi

android - Unity创建移动图案背景

转载 作者:行者123 更新时间:2023-12-05 00:13:43 24 4
gpt4 key购买 nike

我是 unity 的新手,需要一些帮助来创建一个看起来像这样的背景(有点紧张,因为它是一个 gif),我希望它像填满每个屏幕大小一样,大小是屏幕的 1/8屏幕(黑匣子):enter image description here

box

最佳答案

您可以使用以下设置:

  1. 首先,图像应该有这样的边框,并将其环绕模式设置为在 import settings 中重复

    enter image description here

  2. 你的背景应该是一个ScreenSpace Overlay Canvas (当然取决于你的设置)

  3. 在该 Canvas 中有一个 RawImage 对象,将您的图像用作 Texture 并将此组件添加到它

    [RequireComponent(typeof(RawImage))]
    public class BackgroundController : MonoBehaviour
    {
    [Header("References")]
    [SerializeField] private RectTransform _rectTransform;
    [SerializeField] private RectTransform _parentRectTransform;
    [SerializeField] private RawImage _image;
    [Header("Settings")]
    [SerializeField] private Vector2 repeatCount;
    [SerializeField] private Vector2 scroll;
    [SerializeField] private Vector2 offset;

    private void Awake()
    {
    if (!_image) _image = GetComponent<RawImage>();

    _image.uvRect = new Rect(offset, repeatCount);
    }

    // Start is called before the first frame update
    private void Start()
    {
    if (!_rectTransform) _rectTransform = GetComponent<RectTransform>();
    if (!_parentRectTransform) _parentRectTransform = GetComponentInParent<RectTransform>();

    SetScale();
    }

    // Update is called once per frame
    private void Update()
    {
    #if UNITY_EDITOR
    // Only done in the Unity editor since later it is unlikely that your screensize changes
    SetScale();
    #endif
    offset += scroll * Time.deltaTime;
    _image.uvRect = new Rect(offset, repeatCount);
    }

    private void SetScale()
    {
    // get the diagonal size of the screen since the parent is the Canvas with
    // ScreenSpace overlay it is always fiting the screensize
    var parentCorners = new Vector3[4];
    _parentRectTransform.GetLocalCorners(parentCorners);
    var diagonal = Vector3.Distance(parentCorners[0], parentCorners[2]);

    // set width and height to at least the diagonal
    _rectTransform.sizeDelta = new Vector2(diagonal, diagonal);
    }
    }

这首先缩放 RawImage 以适应父级的对角线大小。由于它已经适合屏幕,因此我们得到了屏幕尺寸 => 始终填满整个屏幕,无论比例或旋转是什么(当然,只要您的 RawImage 在屏幕中心)。

使用 repeatCount,您可以定义纹理在背景上出现的频率。

然后使用 scroll 可以定义背景滚动的速度和方向。该脚本基本上只是更新 RawImage.uvRect每一帧。

最后,您只需旋转 RawImage,这样滚动就会朝您想要的最终方向移动

enter image description here

关于android - Unity创建移动图案背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59746985/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com