unity随机生成乱码图片并保存本地,各项参数均可调整

4 篇文章 0 订阅


前言

最近有个小需求,要生成随机的乱码图片,用于ar的识别,于是我写了这个小demo,有需要的小伙伴可以拿去用,我也是借此留个备份。


一、基础元素库的随机

二、生成位置、生成数量的随机

三、遮挡块位置的随机

注意

图片存放位置是Application.persistentDataPath;
按下快捷键F1,即可随机生成一张图片,图片的大小和game视窗的大小是一样的。


总结:最后上全部代码

完整的unitypackage包也可以自行下载,环境是用的unity2019.4
下载package包,点击这里https://download.csdn.net/download/Wrinkle2017/16635247

/*生成图片的大小等于game视窗的大小*/
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
using Random = UnityEngine.Random;

/// <summary>
/// 随机生成唯一特征码图片
/// </summary>
public class SetIDUINormalBig : MonoBehaviour
{
    /// <summary>
    /// 特征元素的集合
    /// </summary>
    public List<GameObject> UiList;

    /// <summary>
    /// 中间用于遮挡的方块
    /// </summary>
    public GameObject wardImages;
    /// <summary>
    /// 随机遮挡的方块
    /// </summary>
    public Transform randomImage;
    public GameObject canvas;
    private GameObject setTargets;
    private List<Vector3> setTransformList, nowTranspformList;
    private List<GameObject> instantiateList;
    private int nameNum = 0, listCount;
    private bool ifCreat, ifScreen;
    /// <summary>
    /// 生成图片的数量
    /// </summary>
    private int creatPictureNum;
    private float nowTime;

    private void Start()
    {
        ifCreat = false;
        ifScreen = false;
        creatPictureNum = 0;
        CreatPositionList();
        listCount = setTransformList.Count;
    }

    private void Update()
    {
        //按下F1键,随机创建一张图片
        if (Input.GetKeyDown(KeyCode.F1))
        {
            ifCreat = true;
            creatPictureNum = 0;
        }

        if (ifCreat)
        {
            nowTime += Time.deltaTime;
            if (nowTime >= 0.2 && !ifScreen)
            {
                //随机遮挡的方块位置
                randomImage.localPosition=new Vector3(Random.Range(-360,360),Random.Range(-200,200),0);
                //开始生成
                CreatPositionList();
                listCount = setTransformList.Count;
                nowTranspformList = setTransformList;
                listCount = nowTranspformList.Count;
                if (nameNum > 0)
                {
                    int num = instantiateList.Count;
                    for (int i = 0; i < num; i++)
                    {
                        Destroy(instantiateList[i]);
                    }
                }

                instantiateList = new List<GameObject>();

                //生成特征点数量
                for (int i = 0; i < Random.Range(30,50); i++)
                {
                    nowTranspformList = setTransformList;
                    listCount--;
                    setTargets = Instantiate(UiList[Random.Range(0, UiList.Count)]);
                    setTargets.transform.eulerAngles=new Vector3(0,0,setTargets.transform.eulerAngles.z+Random.Range(-15,15));
                    setTargets.transform.parent = canvas.transform;
                    RandomVector3();
                    instantiateList.Add(setTargets);
                    wardImages.transform.SetAsLastSibling();
                }

                // int num2 = instantiateList.Count;
                // for (int i = 0; i < num2; i++)
                // {
                //     if (instantiateList[i].transform.localPosition.x > -200 && instantiateList[i].transform.localPosition.x < 200 &&
                //         instantiateList[i].transform.localPosition.y > -60 && instantiateList[i].transform.localPosition.y < 60)
                //     {
                //         Debug.Log(instantiateList[i].transform.position.x + "+++" + instantiateList[i].transform.position.y);
                //     }
                // }

                ifScreen = true;
            }

            if (nowTime >= 0.4)
            {
                ScreenCapture.CaptureScreenshot(Application.persistentDataPath + "/000" + nameNum + ".jpg");
                Debug.Log("生成的图片存放的位置:"+Application.persistentDataPath);
                nameNum++;
                nowTime = 0;
                ifScreen = false;
                creatPictureNum++;
                //生成图片数量
                if (creatPictureNum > 0)
                {
                    ifCreat = false;
                }
            }
        }
    }

    /// <summary>
    /// 创建位置库
    /// </summary>
    public void CreatPositionList()
    {
        setTransformList = new List<Vector3>();
        for (int i = 0; i < 15; i++)
        {
            for (int j = 0; j < 8; j++)
            {
                setTransformList.Add(new Vector3(-300 + i * Random.Range(40,55), -150 + j * Random.Range(40,50), 0));
            }
        }
    }

    /// <summary>
    /// 随机vector3
    /// </summary>
    public void RandomVector3()
    {
        int randomNum = Random.Range(0, listCount + 1);
        Vector3 randomPos = setTransformList[randomNum];
        setTargets.transform.localPosition = randomPos;
        setTransformList.Remove(randomPos);
    }
}

欢迎大佬多多来给萌新指正,欢迎大家来共同探讨。
如果各位看官觉得文章有点点帮助,跪求各位给点个“一键三连”,谢啦~

声明一下:本博文章若非特殊注明皆为原创原文链接
https://blog.csdn.net/Wrinkle2017/article/details/115631010
————————————————————————————————

版权声明

版权声明:本博客为非营利性个人原创
所刊登的所有作品的著作权均为本人所拥有
本人保留所有法定权利,违者必究!
对于需要复制、转载、链接和传播博客文章或内容的
请及时和本博主进行联系
对于经本博主明确授权和许可使用文章及内容的
使用时请注明文章或内容出处并注明网址
转载请附上原文出处链接及本声明

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值