Unity【入门】脚本基础

Unity脚本基础

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

文章目录

      • 1、脚本基本规则
        • 1、创建规则
        • 2、MonoBehavior基类
        • 3、不继承MonoBehavior的类
        • 4、执行的先后顺序
        • 5、默认脚本内容
      • 2、生命周期函数
        • 1、概念
        • 2、生命周期函数有哪些
        • 3、生命周期函数支持继承多态
      • 3、Inspector窗口可编辑的变量
      • 4、Mono中的重要内容
        • 1、重要成员
        • 2、重要方法

1、脚本基本规则

1、创建规则
2、MonoBehavior基类
1、创建脚本继承MonoBehavior,才能挂载在GameObject上2、继承了MonoBehavior的脚本不能new对象,不能写构造函数3、继承了MonoBehavior的脚本可以挂载多个,(DisallowMultipleComponent特性除外)4、继承MonoBehavior的类可以再被继承,遵循多态
3、不继承MonoBehavior的类
1、不能挂载在GameObject上
2、需要new
3、一般是单例模式的类(用于管理模块)或者数据结构类(用于存储数据)
4、不用保留默认出现的函数
4、执行的先后顺序

Execution Order设置

5、默认脚本内容

Editor\Data\Resources\ScriptTemplates

2、生命周期函数

游戏本质是一个循环,一帧就是一次循环
FPS(Frames Per Second)每秒钟帧数
FPS 60 :一秒更新60次画面
人眼可视帧数每秒24
1、概念
所有继承MonoBehavior的脚本最终都会挂载到GameObject游戏对象上
生命周期函数就是该脚本对象依附的GameObject对象从出生到消亡整个生命周期中
会通过反射自动调用的一些特殊函数Unity帮助我们记录了一个GameObject对象依附了哪些脚本
会自动得到这些对象,通过反射去执行一个固定名字的函数
这些固定名字的函数就是生命周期函数
2、生命周期函数有哪些
访问修饰符一般为private和protected
不需要外部调用,Unity调用
对象出生
AWake(调用一次)出生时调用,类似构造函数,一个对象只调用一次
OnEnable(激活时调用)依附的GameObject对象每次激活时调用
Start(调用一次)从自己被创建出来后,第一次帧更新之前调用一个对象只会调用一次
FixedUpdate(循环时调用)物理帧更新,固定间隔时间执行,间隔时间可以设置
Update	(循环时调用)逻辑帧更新,每帧执行
LateUpdate(循环时调用)每帧执行,于Update之后执行
OnDisable (失活时调用)依附的GameObject对象每次失活时调用
OnDestroy(调用一次)对象销毁时调用,依附的GameObject对象被删除时
对象死亡	
//当对象(自己这个类对象)被创建时,才会调用该声明周期函数
//类似构造函数,在一个类对象创建时进行初始化操作
void Awake()
{//打印信息的两种方式//1、没有继承MonoBehavior类的时候Debug.Log("日志");Debug.LogError("err");Debug.LogWarning("warning");//2、继承了MonoBehavior,有线程的方法print("打印信息");
}//对象激活时,逻辑处理
void OnEnable()
{print("OnEnable");
}//初始化信息,相对Awake晚一点,在对象进行第一次帧更新之前执行
void Start()
{print("Start");
}
//用于物理更新,每一帧执行,这里的帧和游戏帧有点不同(可以控制时间默认0.02)
//在project setting中的Time设置void FixedUpdate()
{print("FixedUpdate");
}
//主要用于处理游戏核心逻辑更新的函数
void Update()
{print("Update");
}//一般用来处理摄像机位置更新相关
//Update和LateUpdate之间,Unity进行了一些处理,处理动画相关的更新
void LateUpdate()
{print("LateUpdate");
}
//失活时做的处理
void OnDisable()
{print("OnDisable");
}
//删除对象时调用
private void OnDestroy()
{print("OnDestroy");
}
3、生命周期函数支持继承多态

3、Inspector窗口可编辑的变量

Inspector显示的可编辑内容就是脚本的成员变量

1、私有和保护无法显示编辑

2、让私有的和保护的也可以被显示

加序列化字段特性
[SerializeField]
private int i;
系列化就是把一个对象保存到一个文件或数据库字段中

3、公共的可以显示编辑

4、公共的也不让其显示编辑

加特性
[HideInInspector]
public int i2 = 0;

5、大部分类型都能显示编辑

//可以显示
public int[] array;
public List<int> list;
public E_TestEnum type;
public GameObject gameObj;//字典Dictionary、自定义类型变量不能显示

6、让自定义类型可以被访问

在自定义的类上面加特性
[System.Serializable]
public struct MyStruct
{public string name;public int age;
}
//字典Dictionary都不行

7、一些辅助特性

1、分组说明特性 Header为成员分组[Header("基础属性")]public int age;public bool sex;[Header("战斗属性")]public int atk;public int def;
2、悬停注释 Tooltip为变量添加说明[Tooltip("闪避")]public int miss;
3、间隔特性 Space让两个字段之间出现间隔[Space()]public int crit;
4、修饰数值的滑条范围 Range[Range(0,10)]public float luck;
5、多行显示字符串,默认3行 Multiline[Multiline()]public string tips;
6、滚动条显示字符串,默认三行 TextArea[TextArea()]public string myLife;
7、为变量添加快捷方法 ContextMenuItem参数1:显示按钮名参数2;方法名,不能有参数[ContextMenuItem("重置钱","Money")]public int money;private void Money(){money = 10;}
8、为方法添加特性能够在Inspector中执行[ContextMenu("测试")]private void TestFunc(){print("测试方法");money = 20;}添加特性原理:Unity通过反射得到类的信息,然后在Inspector窗口中显示字段信息Unity内部通过反射获取字段的特征,当具有一些特殊特性时,便会做相应的处理

注意事项

1、Inspector窗口中的变量关联的就是对象的成员变量,运行时改变他们就是在改变成员变量
2、拖拽到GameObject对象后,再改变脚本中变量默认值,界面上不会改变
3、运行中修改的信息不会保存

4、Mono中的重要内容

1、重要成员
[ContextMenu("我的测试")]
private void TestFunc()
{1、获取依附的GameObjectprint(gameObject.name);2、获取依附的GameObject的位置信息print(transform.position);print(transform.eulerAngles);//欧拉角print(transform.lossyScale);//缩放大小3、获取脚本是否激活enabled = false;4、获取其他的脚本信息public Test3 otherTest3;//在Unity中相互关联[ContextMenu("我的测试")]private void TestFunc(){print(otherTest3.gameObject.name);print(otherTest3.transform.position);}
2、重要方法

得到依附对象上挂载的其他脚本

1、得到自己挂载的单个脚本 GetComponent

根据脚本名获取,获取失败返回NullTest3_null t = this.GetComponent("Test3_null") as Test3_null;print(t);
根据Type获取t = GetComponent(typeof(Test3_null)) as Test3_null;print(t);
根据泛型获取,建议使用泛型,不用二次转换t = GetComponent<Test3_null>();print(t);
只有能得到场景中别的对象或者对象依附的脚本,就能获取到它的所有信息

2、得到自己挂载的多个脚本

//数组
Test3[] array = GetComponents<Test3>();
print(array.Length);
//List
List<Test3> list = new List<Test3>();
GetComponents<Test3>(list);
print(list.Count);

3、得到子对象挂载的脚本(默认也会找自己是否挂载脚本)

//得子对象得单个脚本
参数false:不找失活,参数true:找失活;不填默认为false
不填默认为false
Test3 t3 = GetComponentInChildren<Test3>();
print(t3);//得子对象得多个脚本
//数组
Test3[] li1 = GetComponentsInChildren<Test3>();
print(li1.Length);
//List
List<Test3> li2 = new List<Test3>();
GetComponentsInChildren(true,li2);
print(li2.Count);

4、得到父对象挂载的脚本(默认也会找自己是否挂载脚本)

得父类多单个脚本t3 = GetComponentInParent<Test3>();print(t3);
得父类多个脚本//数组li1 = GetComponentsInParent<Test3>();print(li1.Length);//ListGetComponentsInParent(true, li2);print(li2.Count);

5、尝试获取脚本

if (TryGetComponent<Test3>(out t3)) { }

6、思考 this

this 代表依附在GameObject自己这个脚本对象
this.gameObject 代表这个脚本对象依附的GameObject游戏对象
this.transform 代表这个脚本对象依附的GameObject游戏对象的位置相关信息

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

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

相关文章

冯喜运:5.31晚间黄金原油行情分析及尾盘操作策略

【黄金消息面分析】&#xff1a;周五&#xff08;5月31日&#xff09;&#xff0c;最新发布的数据显示&#xff0c;美国4月核心PCE物价指数月率录得0.2%&#xff0c;低于预期(0.3%)&#xff0c;经济学家认为&#xff0c;核心指数比整体指数更能反映通胀。除此之外&#xff0c;美…

HackTheBox-Machines--Sense

Popcorn 测试过程 1 信息收集 服务器开启80、443端口 80端口 访问 80 跳转到 443 – https://10.129.196.51/ &#xff0c;该页面是 pfSense 登录界面&#xff0c;默认密码是&#xff1a; admin/pfSense&#xff0c;使用默认账号密码登录失败 目录扫描 ./gobuster dir -u htt…

深度神经网络——什么是线性回归?

线性回归是一种用于预测或可视化的算法 两个不同特征/变量之间的关系。 在线性回归任务中&#xff0c;要检查两种变量&#xff1a; 因变量和自变量。 自变量是独立的变量&#xff0c;不受其他变量的影响。 随着自变量的调整&#xff0c;因变量的水平将会波动。 因变量是正在研究…

三体中的冯诺依曼

你叫冯诺依曼&#xff0c;是一位科学家。你无法形容眼前的现态&#xff0c;你不知道下一次自己葬身火海会是多久&#xff0c;你也不知道会不会下一秒就会被冰封&#xff0c;你唯一知道的&#xff0c;就是自己那寥寥无几的科学知识&#xff0c;你可能会抱着他们终身&#xff0c;…

《QT实用小工具·六十九》基于QT开发的五子棋AI游戏

1、概述 源码放在文章末尾 该项目实现了五子棋对战AI&#xff0c;可以享受和AI下棋的快乐&#xff0c;项目实现思路如下&#xff1a; 博弈树 ●Alpha-Beta剪枝(性能提高较大) ●启发式搜索(性能提高较大) ●落子区域限制(性能提高较大) ●Zobrist哈希(性能小幅提升) ●Qt…

数据治理基础知识

文章目录 基本概念相关名词术语数据治理对象 基本概念 1&#xff09;从管理者视角看数据治理 数据治理是企业发展战略的组成部分&#xff0c;是指导整个集团进行数字化变革的基石&#xff0c;要将数据治理纳入企业的顶 层规划&#xff0c;各分/子公司、各业务部门都需要按照企…

软考高级系统规划与管理师适合什么人考?有什么优势?

系统规划与管理师适合什么人考&#xff1f; 适合以下几类人群&#xff1a; 1. 信息技术服务规划人员&#xff1a;从事信息技术服务规划工作&#xff0c;负责制定和优化IT服务规划的人 2. 信息系统运行维护管理人员&#xff1a;负责信息系统日常运行维护、确保系统稳定性和可…

【前端】Mac安装node14教程

在macOS上安装Node.js版本14.x的步骤如下&#xff1a; 打开终端。 使用Node Version Manager (nvm)安装Node.js。如果你还没有安装nvm&#xff0c;可以使用以下命令安装&#xff1a; curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash 然后关…

变压器励磁涌流MATLAB仿真模型

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 变压器励磁涌流的产生机理 1、变压器是电力系统的关键部分&#xff0c;在实际的 运行中&#xff0c;变压器需要进行相应的充电&#xff0c;而在充电的过 程中&#xff0c;就需要进行开合闸作业。在开合闸作业…

【Linux】磁盘结构文件系统软硬链接动静态库

目录 一.磁盘结构 1、磁盘的物理结构 2、磁盘的存储结构 3、磁盘的逻辑结构 二.文件系统 1、对IO单位的优化 2、磁盘分区与分组 3、对分组的具体管理方法 4、文件操作 三.软硬链接 1、理解硬链接 2、理解软连接 3、理解.和.. 四、动静态库 1、什么是动静态库 2、…

Flutter基础 -- Dart 语言 -- 基础类型

目录 0. 配置 1. 变量 1.1 弱类型 var Object dynamic 1.2 强类型 1.3 使用场景 var 简化定义变量 查询参数定义 返回的实例对象 2. 常量 final 和 const 2.1 相同点 类型声明可以省略 初始后不能再赋值 不能和 var 同时使用 2.2 不同点 const 需要确定的值 …

线性代数|机器学习-P1课程简介

文章目录 1. 书籍下载2. 正文 1. 书籍下载 链接&#xff1a;https://pan.baidu.com/s/1QbK0enLh0x4nU1c4Tqwlkw 提取码&#xff1a;r7ft 本课程回顾线性代数在概率论、统计学、优化和深度学习中的应用。是GILBERT STRANG教授的有一个经典的课程。课程将线性代数分为如下部分&a…

利用“记忆化搜索“解斐波那契数

一、题目描述 求第 n 个斐波那契数。 二、 利用"记忆化搜索"解斐波那契数 什么是记忆化搜索&#xff1f;记忆化搜索就是带有备忘录的递归。 我们先来看一下使用递归来解斐波那契数的这个过程&#xff0c;假设求第5个斐波那契数F(5)。 由图可见&#xff0c;要重复计…

Android加固多渠道打包和签名工具

简介 基于腾讯VasDolly最新版本3.0.6的图形界面衍生版本&#xff0c;同时增加了签名功能&#xff0c;旨在更好的帮助开发者构建多渠道包 使用说明 下载并解压最新工具包&#xff0c;找到Startup脚本并双击启动图形界面&#xff08;注意&#xff1a;需本地安装java环境&#…

手机定制开发_基于天玑900的5G安卓手机定制方案

手机定制方案基于联发科天玑900强劲旗舰八核2.4GHz处理器。这款处理器采用了6nm先进制程工艺&#xff0c;为用户带来了痛快淋漓的性能体验。不论是进行游戏还是日常娱乐&#xff0c;用户都能轻松驾驭。手机搭载了最新的Android 13操作系统&#xff0c;提高了数据读取的准确性&a…

小数第n位【蓝桥杯】

小数第n位 模拟 思路&#xff1a;arr数组用来记录已经出现过的a&#xff0c;在循环时及时退出。易知题目的3位即a%a后的第n-1,n,n1位。该代码非常巧妙&#xff0c;num记录3位的输出状况。 #include<iostream> #include<map> using namespace std; typedef long l…

vulnhub靶场之FunBox-9

一.环境搭建 1.靶场描述 Its a box for beginners, but not easy. Gather careful !!! Hint: Dont waste your time ! Every BruteForce-Attack at all ports can be stopped after 1500 trys per account. Enjoy the game and WYSIWYG ! This works better with VirtualBox…

博士毕业论文/CTEX/LATEX

LATEX环境安装 CTEX 安装 &#xff08;垃圾&#xff0c;不要装&#xff09; 运行 clean.batcomp.bat 缺少字体 Couldn’t find Adobe Heiti S.cfg’ miktex-maketfm: No creation rule for font “Adobe Heiti Std”.解决方法&#xff1a;其实就是下载这四个字体之后&…

【大比武10】行业垂直大模型应用在档案管理中的探索

关注我们 - 数字罗塞塔计划 - # 大比武2024 本篇是参加“华夏伟业”杯第二届档案信息化公司业务与技术实力大比武&#xff08;简称“大比武 2024”&#xff09;的投稿文章&#xff0c;来自广州龙建达电子股份有限公司&#xff0c;作者&#xff1a;陶宣任。 在这个人工智能技…

深入理解flask规则构建与动态变量应用

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言 二、Flask规则基础 1. 静态规则与动态规则 2. 规则语法与结构 三、动态变量应用…