• Unity 预制体放在场景中可见,通过代码复制出来不可见的处理


    首先我制作了一个预制体,在场景中是可见的,如下图

    无论是Scene视图,还是Game视图都正常。

    我把预制体放到Resources里面,然后我通过如下代码复制到同个父物体下。

    1. GameObject obj1 = Instantiate(Resources.Load("Butcon")) as GameObject;
    2. obj1.transform.SetParent(tran);
    3. obj1.transform.localScale = Vector3.one;

    代码没有什么问题,我设置好了它的父物体,然后钳制了它的Scale跟原来一样。

    还有一点我通过Grid Layout Group钳制了复制的预制体的宽度跟原来一样。如下图,

    一切看起来都没有什么问题,然后运行,就出现了如下效果:

    Scene视图是正常的,位置正常,但是Game视图却不见了。

    这就怪了,我代码设置了父物体,父物体通过Grid Layout Group钳制了宽高,然后可以看到Scene视图是正常的,最主要我场景里什么都没有,就复制一个预制体,所以遮挡也排除了。

    然后我检查下是不是摄像头的设置,层级啊,或者渲染什么的因素影响了,我都一一仔细检查确实没什么异样。

    真是百思不得其解。

    后来我沉下来想,还是应该从摄像头入手。

    因为我实际应用中渲染的模式是通过摄像头,问题应该跟摄像头有关。

    仔细一看,突然发现由于当时开发的是2D项目,使用的是2D视图,转念一想,是不是应该切换成3D视图看看,会不会发现什么。

    2D视图

    果然,当我转成3D视图时,一下子就发现了问题所在!

    原来复制的UI预制体并没有在摄像头之下。这样一排查就发现即使我用Grid Layout Group钳制了宽高,并且我的预制体的Z坐标是0,但是我通过代码复制出来的Z坐标却变成了-2308.644了。

    原来使用Instantiate复制出的物体,它的坐标是会根据某种规律变的,它并不是你预制体本身的坐标复制出来。正如它的Scale也是!

    所以当我们使用代码生成物体时,发现异常,首先就要检查下是否创建的时候把Scale和Position都重置一遍。

    如使用下面代码再运行程序就正常了:

    1. GameObject obj1 = Instantiate(Resources.Load("Butcon")) as GameObject;
    2. obj1.transform.SetParent(tran);
    3. obj1.transform.localScale = Vector3.one;
    4. obj1.transform.localPosition = Vector3.zero;

  • 相关阅读:
    M1 安装CentOS 8安装完成后无法联网怎么办?
    《OpenDRIVE1.6规格文档》2
    没有基础适合学习java吗?
    解决删除凭据管理器后仍然可以访问问题
    Transformers入门:实战Ubuntu使用huggingface上的语句情感分类模型+配环境(2024.02.20)
    2022赛氪 秋季赛 补题 (鼠鼠输麻了)
    ImageSharp.Web实战:轻松搭建高效图片服务
    粒子滤波 PF——在机动目标跟踪中的应用(粒子滤波VS扩展卡尔曼滤波)
    Linux-多路转接-epoll
    外包干了一个月,技术明显进步。。。。。
  • 原文地址:https://blog.csdn.net/mr_five55/article/details/134471034