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

2024-06-03 00:04

本文主要是介绍【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);}}
}

这篇关于【Unity脚本】修改游戏对象的活动状态的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1025465

相关文章

Linux下MySQL数据库定时备份脚本与Crontab配置教学

《Linux下MySQL数据库定时备份脚本与Crontab配置教学》在生产环境中,数据库是核心资产之一,定期备份数据库可以有效防止意外数据丢失,本文将分享一份MySQL定时备份脚本,并讲解如何通过cr... 目录备份脚本详解脚本功能说明授权与可执行权限使用 Crontab 定时执行编辑 Crontab添加定

使用Java读取本地文件并转换为MultipartFile对象的方法

《使用Java读取本地文件并转换为MultipartFile对象的方法》在许多JavaWeb应用中,我们经常会遇到将本地文件上传至服务器或其他系统的需求,在这种场景下,MultipartFile对象非... 目录1. 基本需求2. 自定义 MultipartFile 类3. 实现代码4. 代码解析5. 自定

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

Java调用Python脚本实现HelloWorld的示例详解

《Java调用Python脚本实现HelloWorld的示例详解》作为程序员,我们经常会遇到需要在Java项目中调用Python脚本的场景,下面我们来看看如何从基础到进阶,一步步实现Java与Pyth... 目录一、环境准备二、基础调用:使用 Runtime.exec()2.1 实现步骤2.2 代码解析三、

Python脚本轻松实现检测麦克风功能

《Python脚本轻松实现检测麦克风功能》在进行音频处理或开发需要使用麦克风的应用程序时,确保麦克风功能正常是非常重要的,本文将介绍一个简单的Python脚本,能够帮助我们检测本地麦克风的功能,需要的... 目录轻松检测麦克风功能脚本介绍一、python环境准备二、代码解析三、使用方法四、知识扩展轻松检测麦

C#和Unity中的中介者模式使用方式

《C#和Unity中的中介者模式使用方式》中介者模式通过中介者封装对象交互,降低耦合度,集中控制逻辑,适用于复杂系统组件交互场景,C#中可用事件、委托或MediatR实现,提升可维护性与灵活性... 目录C#中的中介者模式详解一、中介者模式的基本概念1. 定义2. 组成要素3. 模式结构二、中介者模式的特点

javaSE类和对象进阶用法举例详解

《javaSE类和对象进阶用法举例详解》JavaSE的面向对象编程是软件开发中的基石,它通过类和对象的概念,实现了代码的模块化、可复用性和灵活性,:本文主要介绍javaSE类和对象进阶用法的相关资... 目录前言一、封装1.访问限定符2.包2.1包的概念2.2导入包2.3自定义包2.4常见的包二、stati

基于Python Playwright进行前端性能测试的脚本实现

《基于PythonPlaywright进行前端性能测试的脚本实现》在当今Web应用开发中,性能优化是提升用户体验的关键因素之一,本文将介绍如何使用Playwright构建一个自动化性能测试工具,希望... 目录引言工具概述整体架构核心实现解析1. 浏览器初始化2. 性能数据收集3. 资源分析4. 关键性能指

Python38个游戏开发库整理汇总

《Python38个游戏开发库整理汇总》文章介绍了多种Python游戏开发库,涵盖2D/3D游戏开发、多人游戏框架及视觉小说引擎,适合不同需求的开发者入门,强调跨平台支持与易用性,并鼓励读者交流反馈以... 目录PyGameCocos2dPySoyPyOgrepygletPanda3DBlenderFife

shell脚本批量导出redis key-value方式

《shell脚本批量导出rediskey-value方式》为避免keys全量扫描导致Redis卡顿,可先通过dump.rdb备份文件在本地恢复,再使用scan命令渐进导出key-value,通过CN... 目录1 背景2 详细步骤2.1 本地docker启动Redis2.2 shell批量导出脚本3 附录总