UnityAPI学习之游戏物体的方法使用

目录

游戏物体

创建游戏物体的三种方式

组建的获取和查找

游戏物体的方法与其他成员变量

游戏物体的生成

游戏物体的激活状态/标签(tag)/层级(layer)

游戏物体的激活与失活

游戏物体的查找

1. 名称查找(Find)

2. 通过标签查找游戏物体(FindGameObjectWithTag/FindGameObjectsWithTag())

FindGameObjectWithTag

FindGameObjectsWithTag()

3. 通过类型查找游戏物体(FindObjectOfType(Type type))


游戏物体

创建游戏物体的三种方式

1.使用构造函数(声明+实例化) 创建一个空的游戏对象

2.根据现有的预制体(游戏物体)资源或者游戏场景已有的游戏物体

3.使用特别的API创建一些基本的游戏物体类型

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class NO3_GameObject : MonoBehaviour
{
    public GameObject grisGo;
    // Start is called before the first frame update
    void Start()
    {
        //1.使用构造函数(声明+实例化) 创建一个空的游戏对象
        GameObject myGo = new GameObject("MyGameobject");
        //2.根据现有的预制体(游戏物体)资源或者游戏场景已有的游戏物体
        Instantiate(grisGo);
        //3.使用特别的API创建一些基本的游戏物体类型
        GameObject.CreatePrimitive(PrimitiveType.Plane);

    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

组建的获取和查找

this关键指的是当前代码中的游戏物体

现在要通过this关键字访问Gris物体的名字

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class NO3_GameObject : MonoBehaviour
{
    public GameObject grisGo;
    // Start is called before the first frame update
    void Start()
    {
        /*//1.使用构造函数(声明+实例化) 创建一个空的游戏对象
        GameObject myGo = new GameObject("MyGameobject");
        //2.根据现有的预制体(游戏物体)资源或者游戏场景已有的游戏物体
        Instantiate(grisGo);
        //3.使用特别的API创建一些基本的游戏物体类型
        GameObject.CreatePrimitive(PrimitiveType.Plane);*/
        Debug.Log(this.grisGo.name);


    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

游戏物体的方法与其他成员变量

游戏物体的生成

GameObject.Instantiate(可以生成任何已经存在的游戏物体)

GameObject.CreatePrimitive(用于生成Unity中一些基本的UI物体)

游戏物体的激活状态/标签(tag)/层级(layer)

游戏物体的激活与失活

gameobject.SetActive()

查看当前游戏物体的激活状态/标签/层级

//查看游戏物体标签
        Debug.Log(gameObject.tag);
        //查看游戏物体层级
        Debug.Log(gameObject.layer);
        //查看游戏物体的激活状态
        Debug.Log(gameObject.activeInHierarchy);
        Debug.Log(gameObject.activeSelf);

游戏物体的查找

1. 名称查找(Find)

示例:查找名为Main Camera的游戏物体并将其放在创建的容器里,输出其激活状态

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class NO3_GameObject : MonoBehaviour
{
    public GameObject grisGo;
    // Start is called before the first frame update
    void Start()
    {
        /*//1.使用构造函数(声明+实例化) 创建一个空的游戏对象
        GameObject myGo = new GameObject("MyGameobject");
        //2.根据现有的预制体(游戏物体)资源或者游戏场景已有的游戏物体
        Instantiate(grisGo);
        //3.使用特别的API创建一些基本的游戏物体类型
        GameObject.CreatePrimitive(PrimitiveType.Plane);*//*
        Debug.Log(this.grisGo.name);
        //查看游戏物体标签
        Debug.Log(gameObject.tag);
        //查看游戏物体层级
        Debug.Log(gameObject.layer);
        //查看游戏物体的激活状态
        Debug.Log(gameObject.activeInHierarchy);
        Debug.Log(gameObject.activeSelf);*/
        GameObject MainCamera = GameObject.Find("Main Camera");
        Debug.Log(MainCamera.activeSelf);
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

总结

1)函数的返回值是一个被查找到的对象(GameObject类),如果存在多个同名的物体,也只是返回其中一个。(可能不是你想要的那一个)
2)物体需要处于active()处于true状态才能被找到。
3)FInd()非常消耗性能,不建议在Update()方法里面使用。
4)该函数也可以查找子游戏物体对象。如果多个游戏场景同时运行,那么Find()查找的范围是所有场景。

2. 通过标签查找游戏物体(FindGameObjectWithTag/FindGameObjectsWithTag())
FindGameObjectWithTag

该方法与Find()用法比较相似,区别就是该方法是通过标签来查找一个不是特定的游戏物体,如果找到,则返回一个游戏物体对象,没有找到会传一个空字符或者null.抛出一个异常

示例:通过查找标签名为Main Camera的游戏物体查找该游戏物体的名称

GameObject MainCamera = GameObject.FindGameObjectWithTag("MainCamera");
        Debug.Log(MainCamera.name);

总结

1)函数的返回值是一个被查找到的对象(GameObject类),如果存在多个同名的物体,也只是返回其中一个。(可能不是你想要的那一个)
2)物体需要处于active()处于true状态才能被找到。
3)该方法消耗的性能比Find()方法小
4)该函数也可以查找子游戏物体对象。如果多个游戏场景同时运行,那么Find()查找的范围是所有场景。

FindGameObjectsWithTag()

这个函数也是根据标签来查找游戏物体对象,它返回的是一个游戏物体对象数组,场景中存在相同标签的物体都将被返回。

示例:查找标签为enemy的游戏物体

创建Enemy空物体保存标签为enemy的物体(标签可以自行创建)

GameObject[] enemy = GameObject.FindGameObjectsWithTag("enemy");
        for (int i = 0; i < enemy.Length; i++)
        {
            Debug.Log(enemy[i]);
        }

总结
1)该函数方法的返回值是一个游戏数组对象,存在多个同标签的游戏物体,将全部返回、
2)物体需要处于active()处于true状态才能被找到。
3)该方法消耗的性能比Find()方法小

3. 通过类型查找游戏物体(FindObjectOfType(Type type))

示例:

NO3_GameObject No3 = GameObject.FindObjectOfType<NO3_GameObject>();
 Debug.Log(No3.name);

总结

该函数会在场景中查找第一个匹配给定类型的游戏对象,并返回找到的游戏对象的引用。 参数 type 是一个 System.Type
类型的对象,用于指定要查找的类型。 请注意,该函数只返回在激活的场景中找到的对象。如果对象在不激活的场景中或被禁用,将无法找到。

该函数通常用于获取指定类型的单个组件实例。如果你想要一次获取多个匹配的组件实例,可以使GameObject.FindObjectsOfType(Typetype) 函数。

总而言之,GameObject.FindObjectOfType(Type type) 是一种根据给定类型查找游戏对象的便捷方法,可以用于获取场景中的特定类型的对象引用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/668323.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Leecode---动态规划---打家劫舍 / 乘积最大子数组

动态规划法&#xff1a; 思路&#xff1a; &#xff08;1&#xff09;状态定义&#xff1a;dp[i]代表前i家能偷盗的最大金额 &#xff08;2&#xff09;状态初始化&#xff1a;如果只有一家&#xff0c;只能偷这家dp[0]nums[0]&#xff1b;如果有两家&#xff0c;因为是连通的&…

fluent UI v9版本Dialog右上角x按钮聚焦问题解决

右上角x按钮聚焦效果展示 第一次点击不会聚焦&#xff0c;第二次或多次点击会出现这种情况。如果多个地方公用一个页面里&#xff0c;这个页面包含这个组件&#xff0c;那其它页面刚打开弹框就是聚焦状态&#xff0c;是个样式的问题。 解决&#xff1a; import * as React fr…

pytorch-Normalization

目录 1. 为什么Normalization2. Normalization2.1 image Normalization2.2 Batch Normalization 3. Normalization pytorch实现3.1 Normalization标准公式3.2 2d normalization3.3 normalize test 4. 使用normalization的好处 1. 为什么Normalization 下图使用sigmoid激活函数…

【2024新版】银系统源码/超市收银系统/智慧新零售/ERP进销存管理/线上商城/商户助手

>>>系统简述&#xff1a;本系统适用于超吃便利店&#xff0c;美妆母婴行业&#xff0c;服装鞋帽行业&#xff0c;食品零售行业&#xff0c;3C数码电子行业&#xff0c;食品生鲜等一切零售行业&#xff0c;产品功能角色介绍如下 合伙人&#xff1a;无限发展代理商和商…

Jetpack架构组件_1.基本知识

1.什么是Jetpack&#xff1f; Jetpack 是一个由多个库组成的套件&#xff0c;可帮助开发者遵循最佳做法、减少样板代码并编写可在各种 Android 版本和设备中一致运行的代码&#xff0c;让开发者可将精力集中于真正重要的编码工作。Jetpack 包含一系列 Android 库&#xff0c;它…

RTPS协议之Behavior Module

目录 交互要求基本要求RTPS Writer 行为RTPS Reader行为 RTPS协议的实现与Reader匹配的Writer的行为涉及到的类型RTPS Writer实现RTPS WriterRTPS StatelessWriterRTPS ReaderLocatorRTPS StatefulWriterRTPS ReaderProxyRTPS ChangeForReader RTPS StatelessWriter BehaviorBe…

python上位机串行通信接收字节数据的校验处理-以crc16-modbus为例

在串行通信中&#xff0c;接收到的数据是否正确&#xff0c;一般用CRC校码的方式来完成。上位机向下位机发送数据时&#xff0c;需要加上校验码&#xff0c;同理&#xff0c;下位机向上位机上报数据时&#xff0c;也需要加上校验码。 校验码的计算方法有很多&#xff0c;比较简…

el-date-picker 选择日期范围只保存左侧日期面板

需求 日期筛选&#xff0c;但限制只能选择同一个月的数据&#xff0c;故此应该去掉右侧月份面板。 实现 主要是通过 css 样式实现&#xff1a; <style> /* 隐藏右边日期面板 */ .el-picker-panel__content.el-date-range-picker__content.is-right .el-date-table, .…

HTTP基础

一、HTTP协议 1、HTTP协议概念 HTTP的全称是&#xff1a;Hyper Text Transfer Protocol&#xff0c;意为 超文本传输协议。它指的是服务器和客户端之间交互必须遵循的一问一答的规则。形容这个规则&#xff1a;问答机制、握手机制。 它规范了请求和响应内容的类型和格式, 是基于…

springboot中抽象类无法注入到ioc容器

1、背景 在写代码时&#xff0c;发现service接口有两个实现类&#xff0c;并且两个实现类中没有对类名重命名&#xff0c;属性注入的时候也没有使用byName或Qualifier&#xff0c;正确情况下会发生多实现报错的问题&#xff0c;以前对这个问题进行解析过。 2、调试过程 我想…

Java面试题:Redis1_Redis的使用场景和如何解决Redis缓存穿透问题

Redis使用场景常见问题 缓存 缓存三兄弟(穿透,击穿,雪崩) 双写一致 持久化 数据过期策略 数据淘汰策略 分布式锁 setnx,redisson 消息队列,延迟队列 … 解决Redis缓存穿透问题 缓存穿透问题 请求->redis缓存->mysql数据库 当一个新请求到来时,先会访问redi…

小程序配置自定义tabBar及异形tabBar配置操作

什么是tabBar&#xff1f; 小程序的tabbar是指小程序底部的一组固定导航按钮&#xff0c;通常包含2-5个按钮&#xff0c;用于快速切换小程序的不同页面。每个按钮都有一个图标和文本标签&#xff0c;点击按钮可以切换到对应的页面。tabbar通常放置在小程序的底部&#xff0c;以…

gitlab之cicd的gitlab-runner cicd实践-rpm离线安装

目录 概述资源官方资源离线资源 操作环境验证gitlab-runner安装注意事项重启向gitlab注册CICD流程测试 概述 gitlab此文使用rpm离线安装的方式&#xff0c;使用 gitlab-runner dockerfile构建运行环境&#xff1a; 如有兴趣可以参考这篇文章   gitlab选择 docker-compose 执行…

Leetcode 剑指 Offer II 080.组合

题目难度: 中等 原题链接 今天继续更新 Leetcode 的剑指 Offer&#xff08;专项突击版&#xff09;系列, 大家在公众号 算法精选 里回复 剑指offer2 就能看到该系列当前连载的所有文章了, 记得关注哦~ 题目描述 给定两个整数 n 和 k&#xff0c;返回 1 … n 中所有可能的 k 个…

sh发送邮件如何通过配置SMTP服务器来实现?

sh发送邮件的操作方法&#xff1f;如何使用Shell脚本自动发信&#xff1f; 在Shell脚本中实现邮件发送功能是一项常见需求&#xff0c;特别是在自动化任务执行或系统监控中。AokSend将介绍如何通过配置SMTP服务器来实现sh发送邮件的方法和注意事项。 sh发送邮件&#xff1a;安…

01Linux以及操作系统概述

课程目标 1.了解现代操作系统的整体构成及发展历史 2.了解Linux操作系统及其分支版本 3.直观上理解服务器端与桌面端版本的区别 课程实验 1.通过对CentOS和Ubuntu的演示&#xff0c;直观理解Linux与Windows的异同 课堂引入 本章内容主要为大家详细讲解Linux操作系统(以下简…

Mac电脑pd虚拟机专用windows系统镜像(m1/intel)win10、11镜像文件

入手了Mac电脑后&#xff0c;由于需要用到Windows软件&#xff0c;又嫌安装双系统太复杂&#xff0c;这时候Mac就用到了安装虚拟机&#xff0c;目前最好用的虚拟机是Parallels Desktop&#xff0c;win镜像版本要根据自己的喜好选对&#xff0c;在此提供分别兼容M1和Intel的win1…

开发一套家政上门预约服务系统需要运用的关键技术

家政上门预约服务系统开发是指建立一个在线平台或应用程序&#xff0c;用于提供家政服务的预约和管理功能。该系统的目标是让用户能够方便地预约各种家政服务&#xff0c;如保洁、家庭护理、月嫂、家电维修等&#xff0c;并实现服务供应商管理和订单管理等功能。 开发一套家政上…

力扣2928. 给小朋友们分糖果 I

题目&#xff1a; 给你两个正整数 n 和 limit 。 请你将 n 颗糖果分给 3 位小朋友&#xff0c;确保没有任何小朋友得到超过 limit 颗糖果&#xff0c;请你返回满足此条件下的 总方案数 。 提示&#xff1a; 1 < n < 501 < limit < 50 思路&#xff1a; 枚举法…

构建高效稳定的短视频直播系统架构

随着短视频直播的迅猛发展&#xff0c;构建一个高效稳定的短视频直播系统架构成为了互联网企业的重要挑战。本文将探讨如何构建高效稳定的短视频直播系统架构&#xff0c;以提供优质的用户体验和满足日益增长的用户需求。 ### 1. 短视频直播系统的背景 短视频直播近年来蓬勃发…