Unity 3D学习之一Homework 1

本文介绍了Unity中的基本概念,如GameObject、Assets及Transform组件的作用,并通过代码示例展示了如何查找、添加子对象以及遍历对象树。此外还讨论了预制与对象克隆的区别,以及组合模式的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基础概念

  1. GameObjects:

    游戏对象,即游戏中的最基本单位,游戏中的每一个对象都是游戏对象。它相当于一个容器,本身并无太多属性,需添加各种组件,资源后才能达到设计者的所希望的游戏行为目的。

    Assets:

    指可应用于Unity上的各种资源,为游戏添加各种属性,从而实现目标效果;同时,一个Unity Project的Assets文件夹指存储于本地计算机中的各种图片,预制,script等文件的总和。一个Assets中可以包含多个GameObjectGameObject从逻辑上讲存储于Assets文件夹中。

  2. 游戏结构目录:

    Assets

    • Scene 保存游戏场景
    • Game 保存美术资源
      • Materials 保存材质球,用于调整颜色等
      • Prefabs 保存预制,即游戏对象的模板,方便克隆
      • Model 模型
      • Animations 保存动画文件
      • Audio 音频文件
      • Textures 贴图文件
      • UI UI文件
      • Scripts 脚本文件
    • Plugins 插件
      • Editor 保存编辑器类文件
  3. MonoBehaviour 基本行为触发条件:

    代码如下:

    // Use this for initialization
    void Start () {
       Debug.Log("init Start");
    }
    // Update is called once per frame
    void Update () {
       Debug.Log("init Update");
    }
    void Awake()
    {
       Debug.Log("init Awake");
    }
    void FixedUpdate()
    {
       Debug.Log("init FixedUpdate");
    }
    void LateUpdate()
    {
       Debug.Log("init LateUpdate");
    }
    void OnGUI()
    {
       Debug.Log("init OnGUI");
    }
    void OnDisable()
    {
       Debug.Log("init OnDisable");
    }
    void OnEnable()
    {
       Debug.Log("init OnEnable");
    }

    Start:

    start

    Per frame:

    per frame

    End:

    end

    结论:

    • Awake(): 当脚本实例被载入时调用;
    • Start(): 在Update()前被调用一次;
    • Update(): 行为启用时,每一帧被调用一次;
    • FixedUpdate(): 行为启用时,每一时间片被调用;
    • LateUpdate(): 行为启用时,Update()之后被调用;
    • OnGUI(): 每帧调用多次,响应GUI事件;
    • OnEnable(): 当对象变为启用并激活时,调用该函数;
    • OnDisable(): 当对象变为禁用或不活动时,调用该函数。
  4. 简单介绍GameObject, Transform 和 Component,并画出三者的UML图。
    • GameObject: Unity 场景中所有实体的基类。
    • Transform: 一个对象的位置,旋转和大小。
    • Component: 所有附加到游戏对象的属性的基类。

    • UML

      UML

  5. 简单代码
    • 查找对象

      新建项目,其中有 Sphere 游戏对象,代码如下:

      void Start()
       {
           Debug.Log("init start");
       }
      
       void FixedUpdate()
       {
           var x = GameObject.Find("Sphere");
           if (x.name != null)
           {
               Debug.Log("find the gameobject");
           }
           else
           {
               Debug.Log("Not found");
           }
       }
    • 添加子对象

      代码如下:

      void Start()
      {
       GameObject sph = GameObject.Find("Sphere");
       GameObject child = GameObject.CreatePrimitive(PrimitiveType.Cube);
       child.transform.parent = sph.transform;
       Debug.Log("Success");
      }
    • 遍历对象树

      代码如下:

       GameObject obj = GameObject.Find("Sphere");
       print("父对象名称为:" + obj.name + " 有" + obj.transform.childCount + "个子对象");
       int i = 0;
       while (i < obj.transform.childCount)
       {
           Transform child = obj.transform.GetChild(i);
           print("这是第: " + i + " 个子对象, 名称为: " + child.name);
           i++;
       }
    • 清除所有子对象

      代码如下:

       GameObject obj = GameObject.Find("Sphere");
       print("父对象名称为:" + obj.name + " 有" + obj.transform.childCount + "个子对象");
       int i = 0;
       while (i < obj.transform.childCount)
       {
           Transform child = obj.transform.GetChild(i);
           print("这是第: " + i+1 + " 个子对象, 名称为: " + child.name);
           GameObject pchild = GameObject.Find(child.name);
           GameObject.Destroy(pchild);
           i++;
       }
  6. 预设与对象克隆
    • Prefabs:

      预制可以存储一个带有组件和属性的 GameObject 作为模板,当想创建新的实例时,可以直接拖动模板进行创建。对预制做的修改可以应用到由该模板生成的所有实例中,也可以单独编辑每一个实例。

    • 总的来说,预设和对象克隆都能生成新的对象实例,但相比较而言,由 clone 生成的实例,编辑原对象时,就不能应用到所有实例中。

    • 预制 table :

      public GameObject prefab;
      void Start()
      {
       Instantiate(prefab, new Vector3(2.0F, 0, 0), Quaternion.identity);
      }
  7. 组合模式
    • 组合模式:

      定义:

      组合模式,将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对组合对象和单个对象的使用具有一致性。

      包含三个部分:抽象构件,叶子构件和容器构件。

      目的即是使得对根节点的调用方法对叶子节点同样适用,使得工作效率更高。

    • 代码

      ​ 有三种发送消息的函数,其中BroadcastMessage()由父类发送给子类,括号里面:第一个参数为回应的函数,第二个参数为传递给回应函数的参数。

      void Start () {
       gameObject.BroadcastMessage("MySon","I am your father");
      }
      void MySon(string ss)
      {
       Debug.Log("I am your son");
      }
内容概要:本文详细介绍了扫描单分子定位显微镜(scanSMLM)技术及其在三维超分辨体积成像中的应用。scanSMLM通过电调透镜(ETL)实现快速轴向扫描,结合4f检测系统将不同焦平面的荧光信号聚焦到固定成像面,从而实现快速、大视场的三维超分辨成像。文章不仅涵盖了系统硬件的设计与实现,还提供了详细的软件代码实现,包括ETL控制、3D样本模拟、体积扫描、单分子定位、3D重建和分子聚类分析等功能。此外,文章还比较了循环扫描与常规扫描模式,展示了前者在光漂白效应上的优势,并通过荧光珠校准、肌动蛋白丝、线粒体网络和流感A病毒血凝素(HA)蛋白聚类的三维成像实验,验证了系统的性能和应用潜力。最后,文章深入探讨了HA蛋白聚类与病毒感染的关系,模拟了24小时内HA聚类的动态变化,提供了从分子到细胞尺度的多尺度分析能力。 适合人群:具备生物学、物理学或工程学背景,对超分辨显微成像技术感兴趣的科研人员,尤其是从事细胞生物学、病毒学或光学成像研究的科学家和技术人员。 使用场景及目标:①理解和掌握scanSMLM技术的工作原理及其在三维超分辨成像中的应用;②学习如何通过Python代码实现完整的scanSMLM系统,包括硬件控制、图像采集、3D重建和数据分析;③应用于单分子水平研究细胞内结构和动态过程,如病毒入侵机制、蛋白质聚类等。 其他说明:本文提供的代码不仅实现了scanSMLM系统的完整工作流程,还涵盖了多种超分辨成像技术的模拟和比较,如STED、GSDIM等。此外,文章还强调了系统在硬件改动小、成像速度快等方面的优势,为研究人员提供了从理论到实践的全面指导。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值