• Unity入门04——Unity重要组件和API(1)


    1.最小单位GameObject

    1.GameObject中的成员变量

    1. //名字
    2. print(this.gameObject.name);
    3. this.gameObject.name = "Lesson4改名";
    4. print(this.gameObject.name);
    5. //是否激活
    6. print(this.gameObject.activeSelf);
    7. //是否是静态
    8. print(this.gameObject.isStatic);
    9. //层级
    10. print(this.gameObject.layer);
    11. //标签
    12. print(this.gameObject.tag);
    13. //transform
    14. //this.transform 上一节课讲解的 通过Mono去得到的依附对象的GameObject的位置信息
    15. //他们得到的信息是一样的 都是依附的GameObject的位置信息
    16. print(this.gameObject.transform.position);

    2.GameObject中的静态方法

    1.创建自带几何体

    1. //只要得到了一个GmeObject对象 我就可以得到它身上挂载的任何脚本信息
    2. //通过obj.GetComponent来得取
    3. GameObject obj=GameObject.CreatePrimitive(PrimitiveType.Cube);
    4. obj.name = "立方体";

    2.查找对象相关的知识 

    两种找单个对象的相同点:

    1.无法找到失活的对象,只能找到激活的对象

    2.如果场景中 存在多个满足条件的对象,我们无法准确确定找到的是谁

    1.查找单个对象

    1. //通过对象名查找
    2. //这个查找效率比较低下 因为他会在场景中的所有对象去查找
    3. //没有找到 就会返回null
    4. GameObject obj2 = GameObject.Find("立方体");
    5. if (obj2 != null)
    6. {
    7. print(obj2.name);
    8. }
    9. //通过tag来查找对象
    10. //GameObject obj3 = GameObject.FindWithTag("Player");
    11. //该方法和上面这个方法 效果一样 只是名字不一样而已
    12. GameObject obj3 = GameObject.FindGameObjectWithTag("Player");
    13. if (obj3 != null)
    14. {
    15. print("根据tag找的对象" + obj3.name);
    16. }
    17. else
    18. {
    19. print("根据tag没有找到对应对象");
    20. }

    得到某一个单个对象 目前有两种方式了

    1. 是 public 从外部面板拖 进行关联
    2. 通过API去找

    2.查找多个对象 

    找多个对象的API 只能是通过tag去找多个 通过名字 是没有找多个的方法的 

    1. //通过tag找到多个对象
    2. //它也是 只能找到 激活对象 无法找到失活对象
    3. GameObject[] objs = GameObject.FindGameObjectsWithTag("Player");
    4. print("找到tag为Player对象的个数" + objs.Length);
    5. //还有几个查找对象相关是用的比较少的方法 是GameObject父类 Object提供的方法
    6. //引出额外知识点 Unity中的Object和C#中的万物之父的区别
    7. //Unity里面的Object 不是指的万物之父object
    8. //Unity里的Object 命名空间在UnityEngine中的 Object类 也是集成万物之父的一个自定义类
    9. //C#中的Object 命名空间是在System中的
    10. //它可以找到场景中挂载的某一个脚本对象
    11. //效率更低 上面的GameObject.Find和通过FindWithTag找 只是遍历对象
    12. //这个方法 不仅要遍历对象 还要遍历对象上挂载的脚本
    13. lesson4 o= GameObject.FindObjectOfType();
    14. print(o.gameObject.name);

    3.实例化对象(克隆对象)的方法

    1.   //实例化(克隆)对象,它的作用是根据一个GameObject对象创建出一个和它一模一样的对象
    2.         GameObject obj5= GameObject.Instantiate(myObj);
    3.         //以后学了更多知识点 就可以在这操作obj5
    4.         //如果你继承了 MonoBehavior 其实可以不用写GameObject一样可以使用
    5.         //因为 这个方法是Unity里面的 Object基类提供给我们的 所有可以直接使用
    6.         //Instantiate(myObj);

     4.删除对象的方法

    1. GameObject.Destroy(myObj2);
    2. //第二个参数 代表延迟多少秒就会删除
    3. GameObject.Destroy(obj5, 5);
    4. //Destroy 不仅可以删除对象 还可以删除脚本
    5. //GameObject.Destroy(this);

     删除对象有两种作用:
    1.是删除指定的一个游戏对象
    2.是删除一个指定的脚本对象
    注意:这个Destroy方法 不会马上移除对象 只是给这个对象jail一个移除标识
            一般情况下 它会在下一帧时吧这个对象移除并从内存中移除

    1. //如果没有特殊需求 就是一定要马上移除一个对象的话
    2. //建议使用上面的 Destroy方法 因为是异步的 降低卡顿的几率
    3. //下面这个方法 就是立即把对象 从内存中移除了
    4. GameObject.DestroyImmediate(myObj);
    5. //如果是继承MonoBehavior的类 不用写GameObject
    6. //Destroy(myObj);
    7. //DestroyImmediate(myObj);

    5. 过场景不移除

    1.         //默认情况 在切换场景时 场景中对象都会被自动删除掉
    2.         //如果你希望某个对象 过场景不被移除
    3.         //下面这句代码 就是不想谁过场景被移除 就传谁
    4.         //一般都是传 依附的GameObject对
    5.         //比如下面这句代码的意思 就是自己依附的GameObject对象 过场景不被删除
    6.         GameObject.DontDestroyOnLoad(this.gameObject);
    7.         //如果继承MonoBehavior也可以直接写
    8.         //DontDestroyOnLoad(this.gameObject);

    3.GameObject中的成员方法

    1.创建空物体 

    1. //new一个GameObject就是在创建一个空物体
    2. GameObject obj6 = new GameObject();
    3. GameObject obj7 = new GameObject("空物体");
    4. GameObject obj8 = new GameObject("加脚本的空物体",typeof(lesson2),typeof(lesson1));

    2.为对象添加脚本

    1. //继承MonoBehavior的脚本 是不能够去new
    2. //如果想要动态的添加继承MonoBehavior的脚本 在某一个对象上
    3. //直接使用GameObject提供的方法即可
    4. lesson1 lesson1 = obj6.AddComponent(typeof(lesson1)) as lesson1;
    5. //用泛型更方便
    6. lesson2 lesson2 = obj6.AddComponent();
    7. //通过返回值 可以得到加入的脚本信息
    8. //来进行一些处理

    3.得到脚本的成员方法 和继承Mono的类得到脚本的方法一模一样

    4. 标签比较

    1. //下面两种比较的方法 是一样的
    2. if (this.gameObject.CompareTag("Player"))
    3. {
    4. print("对象的标签是Player");
    5. }
    6. if (this.gameObject.tag == "Player")
    7. {
    8. print("对象的标签是Player");
    9. }

    5.设置激活失活

    1. //false失活
    2. //true激活
    3. obj6.SetActive(false);
    4. obj7.SetActive(false);
    5. obj8.SetActive(false);

     6.次要的成员方法 了解即可 不建议使用

    1. //强调
    2. //下面讲的方法 都不建议大家使用 效率比较低
    3. //通过广播或者发送消息的形式 让自己或者别人 执行某些行为方法
    4. //通知自己 执行上面行为
    5. //命令自己 去执行这个TestFun这个函数 会在自己身上挂载的所有脚本去找这个名字的函数
    6. //它会去找到 自己身上所有的脚本 有这个名字的函数去执行
    7. this.gameObject.SendMessage("TestFun");
    8. this.gameObject.SendMessage("TestFun2",199);
    9. //广播行为 让自己和自己的子对象执行
    10. //this.gameObject.BroadcastMessage("函数名");
    11. //向父对象和自己发送消息 并执行
    12. //this.gameObject.SendMessageUpwards("函数名");

    4.总结

    GameObject的常用内容

    基本成员变量:名字 失活激活状态 标签 层级 等等

    静态方法相关:创建自带几何体、查找场景中对象、实例化对象、删除对象、过场景不移除

    成员方法:为对象动态添加指定脚本、设置失活激活的状态、和MonoBehavior中相同的 得到脚本相关的方法

    2.时间相关Time 

    1.Time相关内容主要用来干啥 

    时间相关内容 主要 用于游戏中参与唯一、计时、时间暂停等 

    2.时间缩放比例 

    1. //时间停止
    2. //Time.timeScale = 0;
    3. //恢复正常
    4. //Time.timeScale = 1;
    5. //2倍速
    6. //Time.timeScale = 2;

     3.帧间隔时间

    帧间隔时间 主要是用来计算位移

    路程=时间*速度

    根据需求选择参与计算的间隔时间

    如果希望 游戏暂停时就不动的 那就使用 deltaTime

    如果希望 不受暂停影响 unscaledDeltaTime

    帧间隔时间:最近的一帧 用了多少时间(秒)

    1. //受scale影响
    2. print("帧间隔时间:"+Time.deltaTime);
    3. //不受scale影响的帧间隔时间
    4. print("不受scale影响的帧间隔时间:" + Time.unscaledDeltaTime);

     4.游戏开始到现在的时间

    它主要用来计时 单机游戏中计时 

    1. //受scale影响
    2. print("游戏开始到现在的时间"+Time.time);
    3. //不受scale影响
    4. print("不受scale影响的游戏开始到现在的时间" + Time.unscaledTime);

     5.帧数

    开始到现在游戏跑了多少帧(次循环)

    print(Time.frameCount);

    6.物理帧间隔时间 FixedUpdate 

    1. private void FixedUpdate()
    2. {
    3. //受scale影响
    4. print(Time.fixedDeltaTime);
    5. //不受scale影响
    6. print(Time.fixedUnscaledDeltaTime);
    7. }

     7.总结

    Time相关的内容

    最常用的 就是我们的

    1.帧间隔时间 就用来计算位移相关内容

    2.时间缩放比例 用来暂停 或者倍速等等

    3.帧数(帧同步

  • 相关阅读:
    ES 客户端 RestHighLevelClient Connection reset by peer 亲测有效 2022-11-05
    GEE——利用Sentinel-5p 二氧化硫SO2数据如何进行单位转化(mol/m2 、 µg/m3)
    C高级 Day2
    [Springboot]统一响应和异常处理配置
    C++ 11 lamdba表达式详解
    html结构
    [support2022@cock.li].faust、[tsai.shen@mailfence.com].faust勒索病毒数据怎么处理|数据解密恢复
    django系列之事务操作
    ❋JQuery的快速入门2 jq鼠标滚轮
    v-bind绑定
  • 原文地址:https://blog.csdn.net/weixin_45274937/article/details/126689614