Unity中的C#脚本都继承了Monobehaviour类(Monobehaviour类的分析)

news2024/11/24 4:04:00

1、Monobehaviour类

Unity中的脚本都是继承Monobehaviour,定义了脚本的基本行为。必然是继承.
我们之前所熟知的声明周期函数。

除了必然事件,还定义了对各种特定事件的相应函数,均已On开头
MonoBehaviour中的事件响应函数都是已On开头的,比如:鼠标事件,脚本激活、销毁,碰撞等。

  • OnApplicationFocus:当玩家获得或失去焦点时发送给所有游戏物体。可以作为协同程序,在函数中使用yield语句即可

  • OnApplicationPause:当玩家暂停时发送到所有的游戏物体。可以作为协同程序,在函数中使用yield语句即可。

  • OnApplicationQuit:在应用退出之前发送给所有的游戏物体。当用户停止运行模式时在编辑器中调用。当web被关闭时在网络播放器中被调用。

  • OnBecameInvisible:当renderer(渲染器)在任何相机上都不可见时调用OnBecameInvisible。

  • OnBecameVisible:当renderer(渲染器)在任何相机上可见时调用OnBecameVisible。

  • OnCollisionEnter:当此collider/rigidbody与另一个rigidbody/collider接触时调用。

  • OnCollisionExit:当此collider/rigidbody停止触发另一个rigidbody/collider时。

  • OnCollisionStay:当此collider/rigidbody触发另一个rigidbody/collider时,OnCollisionStay将会在每一帧被调用。

  • OnConnectedToServer:当你成功连接到服务器时,在客户端调用。

  • OnDisconnectedFromServer:失去连接或从服务器端断开时在客户端调用。

  • OnFailedToConnectToMasterServer:当连接主服务器出现问题时在客户端或服务器端调用。

  • OnControllerColliderHit:在移动的时,当controller碰撞到collider时OnControllerColliderHit被调用。

  • OnDestroy:脚本销毁时调用。

  • OnDisable:对象禁用或者取消激活时调用。

  • OnEnable:对象变为可用或激活状态时此函数被调用。

  • OnDrawGizmosSelected:如果想在物体被选中时绘制gizmos,执行这个函数。

  • OnGUI:渲染和处理GUI事件时调用。

  • OnJointBreak:当附在同一对象上的关节被断开时调用。

  • OnLevelWasLoaded:一个新关卡被载入时此函数被调用。

  • OnMouseEnter : 鼠标移入GUI控件或者碰撞体时调用

  • OnMouseOver : 鼠标停留在 GUI控件或者碰撞体时调用

  • OnMouseExit : 鼠标离开 GUI控件或者碰撞体时调用

  • OnMouseDown :鼠标离开 GUI控件或者碰撞体上按下时调用

  • OnMouseUp :鼠标按键释放时调用

  • OnMouseDrag : 当鼠标拖拽的时候调用

  • OnMouseUpAsButton:只有当鼠标在同一个GUIElement或Collider按下,在释放时调用。

  • OnTriggerEnter:当Collider(碰撞体)进入trigger(触发器)时调用OnTriggerEnter。

  • OnTriggerExit:当Collider(碰撞体)停止触发trigger(触发器)时调用OnTriggerExit。

  • OnTriggerStay:当碰撞体接触触发器时,OnTriggerStay将在每一帧被调用。

void OnMouseDown()
{
    Debug.Log("当按下鼠标的时候调用");
}

void OnMouseUp()
{
    Debug.Log("当抬起鼠标的时候调用");

}

void OnMouseOver()
{
    Debug.Log("当一直点击不松开鼠标会一直调用");
}


void OnMouseDrag()
{
    Debug.Log("当按下鼠标并且拖动的时候调用");
}

void OnMouseEnter()
{
    Debug.Log("鼠标进入游戏对象的时候调用");
}

void OnMouseExit()
{
    Debug.Log("鼠标离开游戏对象的时候调用");
}

void OnMouseUpAsButton()
{
    Debug.Log("当按下鼠标并抬起的时候调用");
}

文本框

GUILayout.TextArea

按钮

GUILayout.Button

标签

GUILayout.Label

滑动条

GUILayout.HorizontalSlider

小案例(获取屏幕坐标的鼠标位置)

private string mouse;
void Update()
{
  Vector3 v3 = Input.mousePosition;
    mouse = v3.ToString();
}

void OnGUI()
{
    GUILayout.TextArea(mouse);
}

在这里插入图片描述

2、基础函数

创建脚本就默认的update、start方法:(这些官方的文档都是有的)

  • Start:Update函数第一次运行前调用,一般用于游戏对象的初始化。比如GetComPonent之类。

  • Update:每帧调用;一般用于更新场景和状态,物理相关不建议在此处处理。

  • Awake:脚本实例对象被创建时调用,也可以用于游戏对象的初始化,但是Awake是在所有脚本的Start之前执行。

  • FixedUpdate:固定间隔执行,一般用于物理状态更新。

  • LateUpdate:每帧执行,在Update之后。一般和摄像机有关的状态放在这里处理。

3、默认组件

组件对应的变量名是组件名的小写。

  • Transform:对象的位置,角度,缩放。变量名:transform
  • Rigidbody:刚体属性。
  • Render:渲染物体模型。
  • Light:灯光属性。
  • Camera:相机属性。
  • Collider:碰撞体属性。
  • Animation:动画属性。
  • Audio:声音属性。
    在这里插入图片描述

4、组件获取函数

获取组件的方法由于比较耗时,所以如果你在update修改transform的话,一般可以先在Start中获取这个组件的引用,然后在update中使用引用去修改。

比如获取上面例子cube1的script1脚本:

Script1 spt1 = GetComponent<Script1>( );

下面是获取组件的函数:

  • GetComponent:获取组件。
  • GetComponents:获取组件列表。

GetComponentInChildren:返回Type类型组件,在GameObject或它的任何子物体使用深度优先搜索,仅返回激活的组件。

GetComponentsInChildren:在GameObject或任何它的子物体,返回全部Type类型组件。

5、获取场景中的游戏对象

同样和获取组件一样,该方法比较费时,一般在Start中获取引用。

GameObject cube1 = GameObject.Find("Cube1");
GameObject cube1 = GameObject.FindWithTag("tag_cube1");

除了上面的方法,也可以使用public对象,直接使用面板拖拽赋值。


本文仅供学习使用
本文部分参考:https://www.jianshu.com/p/87586839a55f

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

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

相关文章

1 CPP11基础篇(快速学习)

另外还有 long double 不少于double 不低于double 注意&#xff1a; 在VS和Linux中 long double占用的内存空间分别是8和16个字节 c11原始字面量 void的关键字 在C中&#xff0c;void表示为无类型 主要有3个用途 1、函数的返回值用void 表示函数没有返回值 2、函数的参数填…

修改oracle11g的awr快照参数

1、select * from v$version; 2、select * from dba_hist_wr_control; 检查当前系统的保留时间为8天,1小时采样一次. 3、这里设置每半个小时收集一次&#xff0c; 收集到的数据保留15天&#xff0c;单位都是秒。 exec dbms_workload_repository.modify_snapshot_settings(ret…

[附源码]计算机毕业设计的图书互换系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; Springboot mybatis MavenVue等等组成&#xff0c;B/S模式…

web前端网页设计期末课程大作业:旅游网页主题网站设计——三亚旅游网页设计(6个页面) HTML+CSS+JavaScript

&#x1f468;‍&#x1f393;学生HTML静态网页基础水平制作&#x1f469;‍&#x1f393;&#xff0c;页面排版干净简洁。使用HTMLCSS页面布局设计,web大学生网页设计作业源码&#xff0c;这是一个不错的旅游网页制作&#xff0c;画面精明&#xff0c;排版整洁&#xff0c;内容…

类装载器ClassLoader 、执行引擎ExecutionEngine【Java培训】

1. 定义 负责加载class文件&#xff0c;class文件在文件开头有特定的文件标示&#xff0c;并且ClassLoader只负责class文件的加载&#xff0c;至于它是否可以运行&#xff0c;则由Execution Engine决定。 Java培训 2. 类加载器分类 虚拟机自带的加载器启动类加载器&#xff0…

【现代机器人学】学习笔记六:闭链运动学

这一章的内容主要讲并联机器人的相关算法&#xff0c;内容在全书中属于比较少&#xff0c;仅仅介绍概念的章节。 恰好部门中有一位同事就是专门做并联机器人出身的博士&#xff0c;也请他帮忙看了一下内容&#xff0c;但他觉得写书的这个人可能也不是非常懂并联机器人&#xf…

Java集合——Collection

Collection集合 Collection接口下主要有三大子接口 List Queue Set 1. List List是有序可重复集合&#xff0c;根据索引下标来访问元素 List接口常见的三个实现类&#xff1a;ArrayList 、LinkedList、Vector 特点&#xff1a; 集合中的元素允许重复集合中的元素有序&…

UE4 Cook指定平台资源

内容烘焙 | 虚幻引擎文档 (unrealengine.com) 虚幻引擎以内部使用的特定格式存储内容资源&#xff0c;如PNG用于存储纹理 数据&#xff0c;WAV用于音频数据。但是&#xff0c;该内容需要针对各平台转换为不同的格式&#xff0c; 因为平台使用专有格式&#xff0c;或者平台不支…

Revit中“幕墙网格”编辑斜向网格和柱断墙梁

一、Revit中“幕墙网格”编辑斜向网格 我们可以为幕墙添加任意间距的水平和垂直的网格线&#xff0c;但是对于斜向网格线我们却只能通过设置其实例属性中的角度来控制其生成一系列等间距的斜向网格&#xff0c;那么如果遇到不等间距的斜向网格线我们应该如何绘制呢? 首先通过设…

博宜OJ练习题基础题目中个别问题的题(欢迎一起讨论)

中国博宜练习题个别问题&#xff0c;望讨论前言题目1解题思路提交后正确代码&#xff1a;个人写的错误代码题目2正确代码2个人写的错误代码2以上是个人目前遇到的两个问题&#xff0c;不知道是直接使用“max”函数的问题 还是什么&#xff0c;如果是“max”函数问题第一个测试点…

多线程与高并发(二)

【锁的底层实现】&#xff1a; 【 简介 】&#xff1a; JDK早期的时候是重量级的 &#xff0c; 会去找OS系统申请锁 &#xff0c;效率非常低。 后来的改进——《锁升级过程》。 【锁升级过程】&#xff1a; sync( Object ) 【偏向锁】&#xff1a; markword记录这个线程ID&…

[附源码]Python计算机毕业设计Django基于JEE平台springbt技术的订餐系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

以太网 MSTP多实例生成树的简介、MSTP与RSTP、STP之间的联系、MSTP BPDU格式介绍、MSTP关键名词介绍)

2.12.0 以太网 MSTP多实例生成树&#xff08;简介、MSTP与RSTP、STP联系、MSTP BPDU格式、MSTP关键名词介绍&#xff09; 主要参考&#xff1a;华为S2750, S5700, S6700 V200R005(C00&C01&C02&C03) 产品文档 《MSTP基本概念》 MSTP快速生成树简介MSTP关键名词介绍1…

springboot+mybatis+mysql实现的个人博客管理系统(功能包含登录,栏目管理、文章管理、评论管理、系统设置、用户管理、发布博客、评论等)

博客目录springbootmybatis实现的个人博客管理系统实现功能截图系统功能使用技术代码完整源码springbootmybatis实现的个人博客管理系统 本系统是一个个人博客管理系统&#xff0c;比较新的框架springbootmybatis实现&#xff0c;分为普通用户和管理员&#xff0c;普通用户可以…

【软件测试】测试人接手新应用程序怎么测?看看这几个方法......

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 应用程序很复杂的&a…

三、数据链路层(三)差错控制

目录 3.1检错编码 3.1.1奇偶校验码 3.1.2循环冗余码&#xff08;CRC&#xff09; 3.2纠错编码 3.2.1海明码 传输差错可分为两种&#xff1a; 位错&#xff1a;帧中某些位出现了差错&#xff0c;也称比特差错、误码。帧错&#xff1a;帧的丢失、重复或失序等错误。 通常利…

面试题:数据结构和算法

1、时间复杂度解释一下 算法的时间复杂度&#xff0c;用来度量算法的运行时间&#xff0c;记作: T(n) O(f(n))。它表示随着 输入大小n 的增大&#xff0c;算法执行需要的时间的增长速度可以用 f(n) 来描述。 当 T(n) c&#xff0c;c 为一个常数的时候&#xff0c;我们说这个…

[附源码]Python计算机毕业设计Django基于vue+mysql开发的考试系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

Java web 2022跟学尚硅谷(九)书城项目

Java web 2022跟学尚硅谷九书城项目需求分析数据库设计ER图书城1.0简单部署项目类图相关代码UserControllerUserDAOImplUserDAOBookCartItemOrderOrderItemUserUserServiceImplUserServiceapplicationContext.xml书城1.1实现功能1. 用户登录2. 首页图书列表展示3. 首页价格筛选…

Vue3-ElemenPlu,全栈开发后台系统1-1-2-9第一章,第二章前端系统架构设计

Vue3+ElementPlus Lo2+MongoDB 菜单按钮权限,JWT认证,审批流,常规的CRUD,模块化,组件化 技术栈: 架构设计,vue3全家桶,koa2, 权限: Role-Based A