首页 > 其他分享 >unity随机生成乱码图片并保存本地,各项参数均可调整

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

时间:2023-05-31 18:34:24浏览次数:46  
标签:参数均 instantiateList int Random transform private 乱码 unity setTransformList


@TOC

<hr style=" border:solid; width:100px; height:1px;" color=#000000 size=1">

前言

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

<hr style=" border:solid; width:100px; height:1px;" color=#000000 size=1">


一、基础元素库的随机

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

三、遮挡块位置的随机

注意

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

<hr style=" border:solid; width:100px; height:1px;" color=#000000 size=1">

总结:最后上全部代码

完整的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);
    }
}

欢迎大佬多多来给萌新指正,欢迎大家来共同探讨。


标签:参数均,instantiateList,int,Random,transform,private,乱码,unity,setTransformList
From: https://blog.51cto.com/u_16023649/6388837

相关文章

  • 【Unity】记录一下:自定义组件的InspectorGUI面板,修改数据不保存问题
    使用target修改之后需要使用EditorUtility.SetDirty设置为脏,但是要注意的是应该设置target所指代的组件,而非是对.gameObject设置为脏,这是没有用的。[CustomEditor(typeof(MerryGoRound))]publicclassMerryGoRoundEditor:Editor{publicoverridevoidOnInspectorGUI(......
  • unity3d 不销毁物品
    在游戏中,经常需要用到一个类似于static的功能,想要一个参数一直使用,如生命值、登陆状态等。方案一使用static,如在gamemanager脚本中设置publicstaticboolis_login=false;在其他脚本中,不需要gameobject,直接调用脚本即可boolget=gamemanager.is_login;但是缺点是,只......
  • Unity框架与.NET, Mono框架的关系
    什么是C#C#是一种面向对象的编程语言。什么是.NET.NET是一个开发框架,它遵循并采用CIL(CommonIntermediateLanguage)和CLR(CommonLanguageRuntime)两种约定,CIL标准为一种编译标准:将不同编程语言(C#,JS,VB等)使用各自的编译器,按照统一的标准编译成语义一致的CIL中间码,......
  • Unity_Photon
    PhotonPhoton搭建(2条消息)【Unity3D】Photon环境搭建_photon框架_little_fat_sheep的博客-CSDN博客连接云服务器主要代码:PhotonNetwork.ConnectUsingSettings();usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;usingPhoton.Pun;using......
  • Unity中根据平面的多边形点的数据,生成简单的立体网格
    todo 最近需要一个功能,就是根据给定的多边形顶点(按照顺时针或者逆时针这样的顺序),然后生成一个具有高度,投影与多边形一样的一个Mesh。效果如下,比如给定以下的一些顶点的位置         https://blog.csdn.net/lxbhahaha/article/details/111687476......
  • Unity发布IOS发布Android版本出现屏幕问题 UGUI半屏被压缩 另一半黑屏
    项目场景:用Unity做的app发布的ios和Android版本,ui做屏幕自适应,来适配多机型,unity版本是2019.4,用的UGUI。问题描述:极个别机型有个偶发的问题,就是在app息屏,再开屏的时候,会出现半边屏幕被压缩,半边屏幕黑屏的问题,但是ui交互的位置还是正常的,bug效果图如下:跟这张图一样的<hrstyle="bor......
  • springboot-解决项目编译后resources下文件生成乱码问题
    SpringBoot项目下resources文件项目编译之后resources下文件会生成乱码,是说明maven打包的时候出现问题缺少一个插件<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-resources-plugin</artifactId>......
  • 终于解决了cplex12.8中文报错乱码的问题
     最终通过把系统语言改成英文解决,报错变成英语,就能看懂了。上面那条以前试过,没成功,把下面那条一起改了,终于成功了,其他软件确实出现了一点问题,但可以忍受,大不了再改回去,找到办法就好。实在是不想重新安装这个软件了。  尝试过其他方法:配置外部OPL,在控制器里看报错失败:我......
  • Unity3d安装教程
    一、下载UnityHubUnityhub是一个Unity项目管理工具,可以装多个版本的unity编辑器Unity实时内容开发平台-实时3D引擎、2D、VR&AR可视化数据|Unity中国官网点击下载此时需要登录才可以下载这里我们可以使用我们熟悉的微信登录登录好以后,这里会有微信头像,再次点击下载......
  • Unity 对多边形进行矩形分割和查找最大内接矩形
     花了点时间实现了对任意多边形进行矩形分割的功能,有需要的小伙伴可以点这里查看源码 一、实现效果:1、对图片里的内容进行矩形分割     2、对多边形顶点数据进行矩形分割    3、查找图片里内容的最大内接矩形    4、查找多边形顶点数据内的最大内......