【Unity脚本】修改游戏对象的活动状态

【知识链】Unity -> Unity脚本 -> 游戏对象 -> 活动状态

【摘要】本文介绍了如何通过编辑器和脚本来访问游戏对象的活动状态,并给出具体的场景示例。

文章目录

  • 第一章 引言
  • 第二章 在编辑器中设置活动状态
    • 2.1. 在编辑器中设置活动状态
      • 2.1.1. 停用游戏对象
      • 2.1.2. 停用父游戏对象
  • 第三章 使用脚本设置活动状态
    • 3.1.查看激活状态
    • 3.2. 设置对象的活动状态
  • 第四章 应用场景
    • 4.1.启用/禁用游戏对象
    • 4.2.加载和卸载资源
    • 4.3.UI控制
    • 4.4.状态切换
    • 4.5.调试和测试
  • 第五章 重点总结
  • 第六章 学以致用
  • 第七章 参考资料

第一章 引言

游戏对象的活动状态决定了其是否在游戏中被渲染和执行其行为逻辑。这种状态的控制可以让开发者动态地开启或关闭对象,从而实现各种游戏机制,例如暂停、隐藏或临时禁用对象。

第二章 在编辑器中设置活动状态

2.1. 在编辑器中设置活动状态

2.1.1. 停用游戏对象

要暂时从场景中移除游戏对象,可以将该游戏对象标记为非活动状态。
在Inspector窗口并清除GameObject名称左侧的复选框。停用的游戏对象的名称在Hierarchy窗口中会以淡色显示。
在这里插入图片描述

2.1.2. 停用父游戏对象

如果您停用父游戏对象,则也会停用其所有子游戏对象,因为停用会覆盖activeSelf所有子游戏对象的设置。当您重新激活父游戏对象时,子游戏对象将返回其原始状态。

注意:如果检查子游戏对象,该activeSelf属性并不总是准确的,因为即使它设置为活动状态,您也可能已将其一个父游戏对象设置为非活动状态。
比如下面的选定的游戏对象(Body)被设置为活动状态,但仍保持非活动状态,直到其父游戏对象被设置为活动状态。
在这里插入图片描述

第三章 使用脚本设置活动状态

要通过脚本停用GameObject,请使用SetActive方法。要查看对象是处于活动状态还是非活动状态,请检查activeSelf属性。
要了解场景中的子游戏对象是否处于活动状态,请使用activeInHierarchy属性。

3.1.查看激活状态

(1)activeSelf,只读属性。获取此游戏对象本地活动状态。
该状态用GameObject.SetActive方法进行设置。请注意,即使返回true,GameObject也可能因为父级不活动而处于非活动状态。一旦所有父级都处于活动状态,就会使用此状态。如果你想检查GameObject在场景中是否真正被视为活动,可以使用GameObject.activeInHierarchy。

(2)activeInHierarchy,属性,当前对象在场景中的激活状态。
定义游戏对象在场景中是否处于活动状态。
这可以让你知道GameObject是否在游戏中处于活动状态。如果其GameObject.activeSelf属性已启用,则表示该对象及其所有父级的GameObject.activeSelf属性已启用。
与GameObject.activeSelf不同,它还会检查是否有任何父GameObject影响GameObject的当前活动状态。
当父GameObject停用时,其子对象通常会被标记为活动状态,即使它们不可见,因此根据GameObject.activeSelf,它们仍处于活动状态。但是,GameObject.activeInHierarchy会检查GameObject是否未被其层次结构中的成员停用,从而确保不会发生这种情况。

下面的示例展示了查看两个对象的activeSelf和activeInHierarchy属性。

using UnityEngine;public class GetActiveStates : MonoBehaviour
{// Update is called once per framevoid Update(){if (Input.GetKeyDown(KeyCode.G)){Debug.Log($"activeSelf: {gameObject.activeSelf}; activeInHierarchy: {gameObject.activeInHierarchy}");}}
}

3.2. 设置对象的活动状态

使用SetActive方法可以激活或停用对象
用法:public void SetActive(bool value)

激活或停用对象,其中true激活GameObject,false停用GameObjet。

GameObject可能因为其父对象不活跃而处于非活动状态。在这种情况下,调用SetActive不会激活它,而只会设置GameObject的本地状态(activeSelf),可以使用GameObject.activeSelft检查该状态。当所有对象都变为活动状态时,Unity便可以使用此状态。
所以如果想通过此方法设置活动状态时,需要将脚本挂载到一个空对象上,并在脚本里将要操作的对象设置公开变量。

停用GameObject会禁用每个组件,包括附加的渲染器、碰撞器、刚体和脚本。例如,Unity将不再调用已停用Update上附加的脚本的方法。OnEnable或OnDisable方法将被调用当GameObject收到SetActive(true) 或 SetActive(false)时。

示例:演示了如何通过SetActive改变游戏对象的活动状态。

using UnityEngine;public class ActivationControl : MonoBehaviour
{// 记录对象的初始激活状态private bool initialActiveState;void Start(){// 保存对象的初始激活状态initialActiveState = gameObject.activeSelf;}void Update(){// 检测按键Dif (Input.GetKeyDown(KeyCode.D)){// 将对象设置为非激活状态gameObject.SetActive(false);}// 检测按键Rif (Input.GetKeyDown(KeyCode.R)){// 重新激活对象gameObject.SetActive(true);}}
}

第四章 应用场景

对游戏对象活动状态的停用和激活,通过可以在以下场景中应用。

4.1.启用/禁用游戏对象

  • 应用场景:通过激活或禁用游戏对象来控制它们在场景中的存在和行为。例如,可以在需要时启用敌人对象,或者在玩家离开特定区域时禁用不需要的对象。
  • 优点:节省计算资源,提高性能。

4.2.加载和卸载资源

应用场景:在场景切换或资源加载时,可以通过激活状态控制资源的加载和卸载。例如,可以在玩家进入新区域时激活新区域的对象,并禁用旧区域的对象。
优点:管理内存和资源,提高游戏流畅度。

4.3.UI控制

  • 应用场景:在UI系统中,通过激活状态控制界面的显示和隐藏。例如,可以在玩家点击按钮时显示或隐藏特定的UI面板。
  • 优点:简化UI管理,提升用户体验。

4.4.状态切换

  • 应用场景:在游戏中,通过激活状态切换不同的游戏状态或模式。例如,可以在游戏暂停时禁用所有游戏对象,并启用暂停菜单。
  • 优点:简化状态管理,提升代码可读性和维护性。

4.5.调试和测试

  • 应用场景:在开发过程中,通过激活状态控制对象的存在,用于调试和测试。例如,可以在测试特定功能时禁用其他无关对象。
  • 优点:提高开发效率,便于定位问题。

第五章 重点总结

  • 要通过脚本停用GameObject,请使用SetActive方法。
  • 要查看对象是处于活动状态还是非活动状态,请检查activeSelf属性。
  • 要了解场景中的子游戏对象是否处于活动状态,请使用activeInHierarchy属性。

第六章 学以致用

1. 选择题:游戏对象的活动状态(Active State)主要用于控制游戏对象的
A. 渲染顺序
B. 存在与否
C. 静态属性
D. 标签

2. 操作题:设置游戏对象的活动状态
(1)创建一个场景,并在场景中添加一个游戏对象。
(2)使用 Inspector 面板将该对象的活动状态设置为不可见(Inactive)。
(3)运行游戏,验证对象是否消失。

3. 小项目:动态控制游戏对象的活动状态
(1)编写一个脚本,使玩家接近某个道具时,显示该道具;离开时,隐藏该道具。
(2)验证脚本是否能正确控制对象的活动状态。

第七章 参考资料

1.https://docs.unity3d.com/Manual/DeactivatingGameObjects.html
2.https://docs.unity3d.com/ScriptReference/GameObject.html


【学以致用】答案
1.B
2.参见本文第二章节
3.参考代码

using UnityEngine;public class StatusTask3 : MonoBehaviour
{private float movementHorizontal, movementVertical;public float speed = 5.0f;public GameObject targetObj;void Update(){// 获取鼠标movementHorizontal = Input.GetAxis("Horizontal");movementVertical = Input.GetAxis("Vertical");// 改变物体的位置transform.position += new Vector3(movementHorizontal, 0, movementVertical) * Time.deltaTime * speed;float distance = Vector3.Distance(transform.position, targetObj.transform.position);// 小球与正方体的位置 < 2时,隐藏正方体if (distance < 2.0f){targetObj.SetActive(false);}// 小球与正方体的位置 >= 2时,显示正方体if (distance >= 2.0f) { targetObj.SetActive(true);}}
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

文件IO(三)

文件IO&#xff08;三&#xff09; 左移右移Linux的man 手册文件IO打开文件操作文件关闭文件 caps lock开灯关灯读取按键文件IO操作目录文件打开目录文件操作目录文件 库动态库和静态库的优缺点创建静态库创建动态库 按下右ctrl键 亮灭灯 左移右移 Linux的man 手册 文件IO 打开…

FJSP:常春藤算法(Ivy algorithm,LVYA)求解柔性作业车间调度问题(FJSP),提供MATLAB代码

详细介绍 FJSP&#xff1a;常春藤算法&#xff08;Ivy algorithm&#xff0c;LVYA&#xff09;求解柔性作业车间调度问题&#xff08;FJSP&#xff09;&#xff0c;提供MATLAB代码-CSDN博客 完整MATLAB代码 FJSP&#xff1a;常春藤算法&#xff08;Ivy algorithm&#xff0c;…

图形学初识--多边形剪裁算法

文章目录 前言正文为什么需要多边形剪裁算法&#xff1f;前置知识二维直线直线方程&#xff1a;距离本质&#xff1a;点和直线距离关系&#xff1a; 三维平面平面方程距离本质&#xff1a;点和直线距离关系&#xff1a; Suntherland hodgman算法基本介绍基本思想二维举例问题描…

最小时间差

首先可以想到&#xff0c;可以计算出任意两个时间之间的差值&#xff0c;然后比较出最小的&#xff0c;不过这种蛮力方法时间复杂度是O(n^2)。而先将时间列表排序&#xff0c;再计算相邻两个时间的差值&#xff0c;就只需要计算n个差值&#xff0c;而排序阶段时间复杂度通常为O…

算法研发流程

作为一名算法工程师&#xff0c;进行算法研究需要遵循系统的方法和步骤。以下是一个可能的流程&#xff1a; 1. 定义问题 明确目标&#xff1a;确定要解决的问题或优化的目标。这可以是提高某个算法的性能、降低计算复杂度、解决某个具体应用中的问题等。理解需求&#xff1a…

C语言实现贪吃蛇小游戏(控制台)

本篇主要内容是使用C语言在Windows环境的控制台中模拟实现经典小游戏贪吃蛇。 一、准备工作 我们要实现的基本功能有&#xff1a; 地图绘制蛇吃食物的功能&#xff08;上、下、左、右方向键控制蛇的动作&#xff09;蛇撞墙死亡蛇撞自身死亡计算得分蛇身加速、减速暂停游戏 …

9-Django项目--验证码操作

目录 templates/login/login.html utils/code.py views/login.py 验证码 生成验证码 code.py 应用验证码 views.py login.html templates/login/login.html {% load static %} <!DOCTYPE html> <html lang"en"> <head><meta charset&q…

PID算法入门

文章目录 122.12.22.3 344.14.24.3 1 e(t) 是偏差 实 和 目u(t) 是运算结果 2 层层叠加 得出完整的离散公式 2.1 kp 越大 系统偏差 减小的越快kp大的时候 会出现过冲现象&#xff1f; 0.5 那个会快他解释过冲 &#xff1a; 0.2的 5分钟正好到了 那0.5的五分钟 升的就比20多 就…

windows下WSL2 使用docker

问题一&#xff1a;WSL2中Systemctl命令不可用 curl -L -O “https://raw.githubusercontent.com/nullpo-head/wsl-distrod/main/install.sh” chmod x install.sh sudo ./install.sh install /opt/distrod/bin/distrod enable --start-on-windows-boot 问题二&#xff1a; 在…

④单细胞学习-cellchat细胞间通讯

目录 1&#xff0c;原理基础 流程 受体配体概念 方法比较 计算原理 2&#xff0c;数据 3&#xff0c;代码运行 1&#xff0c;原理基础 原文学习Inference and analysis of cell-cell communication using CellChat - PMC (nih.gov) GitHub - sqjin/CellChat: R toolk…

在 JavaScript 中实现数据加密与解密:Web Cryptography API 与 CryptoJS详解

在 JavaScript 中&#xff0c;可以使用 Web Cryptography API 或第三方库如 crypto-js 来实现加密和解密。本文将介绍如何使用这两种方法在客户端进行数据的加密和解密。 使用 Web Cryptography API Web Cryptography API 是现代浏览器提供的一个强大、原生的加密 API。它允许…

关于留痕的使用常见的问题

1. 登录微信 登录要导出数据的微信&#xff08;不支持微信多开&#xff0c;不支持部分老版本微信&#xff09; 相关信息 想把手机端的微信聊天记录转移到电脑上可以使用微信自带的聊天记录迁移功能 操作步骤&#xff1a; 安卓&#xff1a; 手机微信->我->设置->聊…

Python教程-快速入门基础必看课程07-判断结构

该视频主要讲述了Python中的布尔类型值和if-else语句。 布尔类型值是Python中的基本数据类型之一&#xff0c;只有两个值&#xff1a;True和False。它们常用于进行逻辑判断。 视频中详细介绍了如何定义和打印布尔类型值&#xff0c;以及如何进行比较和判断大小等操作。 if-els…

【做一道算一道】根据身高重建队列

根据身高重建队列 假设有打乱顺序的一群人站成一个队列&#xff0c;数组 people 表示队列中一些人的属性&#xff08;不一定按顺序&#xff09;。每个 people[i] [hi, ki] 表示第 i 个人的身高为 hi &#xff0c;前面 正好 有 ki 个身高大于或等于 hi 的人。 请你重新构造并返…

[深度学习]使用python部署yolov10的onnx模型

测试环境&#xff1a; onnxruntime1.15.1 opencv-python4.8.0.76 部分实现代码&#xff1a; parser argparse.ArgumentParser()parser.add_argument("--model", typestr, default"yolov10n.onnx", help"Input your ONNX model.")parser.add_arg…

leetcode hot100强化练习 0 - 35

Part I 哈希表 1. 两数之和 class Solution(object):def twoSum(self, nums, target):""":type nums: List[int]:type target: int:rtype: List[int]"""if not nums:return d {}for i, n in enumerate(nums):k target - nif k not in d:d[n]…

电子电器架构 --- 什么是域控制器?

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节…

美颜相机与美图秀秀的非会员图片保存技巧畅享专业级图像处理探索

美颜相机与美图秀秀的非会员图片保存技巧畅享专业级图像处理探索 今日对美颜相机和美图秀秀的深入使用中&#xff0c;我遇到了一些功能限制&#xff0c;特别是在尝试保存特定处理后的图片时&#xff0c;发现通常需要开通VIP会员才能享受完整服务。作为一名热衷于技术探索的爱好…

【数据结构】二叉树的层序遍历~动画超详解

目录 1 什么是层序遍历2 二叉树层序遍历的基本思路3 二叉树层序遍历的实现 1 什么是层序遍历 我们从字面意思就明白,所谓层序,就是一层一层按顺序去遍历一个二叉树,这和我们之前了解的按前中后序遍历方式完全不同 比方说这颗二叉树: 前序遍历: 层序遍历: 2 二叉树层序遍历的…

深度解析Go语言中的Slice切片

深度解析Go语言中的Slice切片 一、 简介二、数据结构三、初始化四、内容截取五、切片扩容六、元素删除七、切片拷贝 一、 简介 go中的切片&#xff0c;在某种程度上相当于别的语言中的“数组”。不同点在于切片的长度和容量是可变的&#xff0c;在使用过程中可以进行扩容。 二…