脚本

作者: Aprilcat | 来源:发表于2017-02-04 16:32 被阅读14次

脚本用于响应玩家输入、事件响应、生成生动的效果、甚至是构建自定义AI。



脚本综述

介绍Object怎样受到脚本的控制,以及Unity特征和Mono runtime的关系。


创建和应用脚本

GameObject是被Components控制的,虽然Unity内置的Components已经很好了,但你会发现我们还是需要用脚本创建自己的Components。

有2种语言,C#和UntiyScript。

怎么创建脚本呢?

Assets > Create > C# Script

创建好的脚本是什么样的呢?

默认有2个函数,Start()和Update()。

怎么用这个脚本呢?

把它拖到Object上,作为一个Components。


变量和检视面板

你可以定义一个public变量,并在检视面板上看到它,还可以给它赋值。


用Components控制Object

一般我们可以通过编辑器控制Object的属性,但这是静态的,用脚本的不同在于可以动态的控制Object的属性。

怎么访问Component呢?

用函数GetComponent。

怎么访问其他Object呢?

创建一个public的GameObject变量,把其他的Object拖动到检视面板的public变量处。(Transform同理)

怎么找到Child Objects?

Transform.Find

怎么通过Name或者Tag找到Object?

GameObject.FindGameObject.FindWithTagGameObject.FindGameObjectsWithTag


事件函数

Unity通过事件函数来进行控制,比如Start和Update,还有更多的函数可供应用。

有哪些一般的更新事件?

Update(),FixedUpdate(),LateUpdate()。

有哪些初始化事件?

Start,Awake。

有哪些GUI事件?

OnGUI,OnMouseOver,OnMouseDown。

有哪些物理事件?

OnCollisionEnterOnCollisionStayOnCollisionExitOnTriggerEnterOnTriggerStayOnTriggerExit


时间和帧速率的管理

两次Update调用之间的时间长度不是恒定的。

所以如果帧率是10毫秒,那么每秒Update100次,如果帧率是25毫秒,那么每秒Update40次,就会有问题。

这时,我们就要用到Time.deltaTime。(distancePerSecond * Time.deltaTime)

什么是Fixed Timestep?

Unity的物理系统需要固定的时间步来进行精准的模拟。(Time ManagerTime.fixedDeltaTime

什么是Maximum Allowed Timestep?

简单来说,当Fixed Timestep引起物理系统运算变慢时,要用到这个东西,它在Time Manager里可以设置。

什么是Time Scale?

就是速率,1表示正常,0.5表示半速。

什么是Capture Framerate?

有时候我们会把游戏录成视频,录制过程会耗费大量时间,就会用到这个东西,设置它保证游戏的流畅。


创建和销毁GameObjects

Instantiate,Destroy


协同程序

举个例子,当你想把一个物体慢慢变透明时,不可能在一帧内完成它,因为那样就看不到过程了,此时,你可以用到协同程序。

IEnumerator,yield return,StartCoroutine

它会单独形成一个函数,返回一次值后,把处理权交还给Unity,在下次Update时,再把处理权要过来进行下一次处理。


命名空间

防止函数名称冲突。

namespace XXX,using XXX。


属性

放在类、函数等上的,用[ ]括起来的,表明作用的东西。


事件函数的执行次序


理解自动内存管理

我们调用函数中的参数,会把参数拷贝一份放在存储器中,如果参数是一些数字,那么它很小,没问题,但如果参数是Object、array呢?太大了,会很费存储空间,效率也低,因此,就要用到pointer,它只是记录了存储地址,只要改变他就好了。

内存管理者会搜索所有属于激活状态的引用值,并标记它们为“活着”,当搜索完成时,把剩余的存储空间用于随后的再分配。这就叫“垃圾回收”。

虽然自动处理机制比手动处理机制强,但也需要程序员避免一些错误做法。

有2种策略,小内存就快速频繁的回收(每隔多久就回收一次),大内存就缓慢不频繁的回收(游戏暂停时才回收)。

还有,复用Objects也是一个方法。


平台依赖编译

暂不关注。


专用文件夹和脚本编译命令

Assets

Editor

Editor default resources

Gizmos

Plugins

Resources

Standard Assets

StreamingAssets

脚本的编译有4个阶段。

编译中有个基本原则,在当前编译阶段之后才编译的任何脚本都不能被涉及,在当前或早先阶段被编译的脚本都要确保能用。

4个阶段如下:

(表示没看懂,以后补吧)


类函数

尖括号,void FuncName(),var obj = GetComponent()。


脚本限制

主要针对不同平台说的。


脚本序列化

在Unity引擎中,序列化被用于加载场景、资源等。

(现阶段看不懂,以后再说吧)


Unity事件

感觉是Unity有一套自己的事件系统,不需要我们自己额外写什么了。

UnityEngine.Events


什么是空引用异常?

当你想引用一个不存在的东西时,就会出现空引用异常。


重要的类

MonoBehaviour

Transform

Rigidbody/Rigidbody2D


矢量食谱

虽然矢量描述起来很简单,但它在编程过程中很细微且有巨大的作用。

理解矢量运算

加、减、乘、除。



脚本工具



事件系统

相关文章

  • 自瞄3.15

    【脚本开关→】开【←脚本开关】 【脚本版本→】通用技能自瞄3.15【←脚本版本】 【脚本关闭公告→】脚本已更新.....

  • 自瞄3.16

    【脚本开关→】开【←脚本开关】 【脚本版本→】通用技能自瞄3.16【←脚本版本】 【脚本关闭公告→】脚本已更新.....

  • 为什么会有人说引流脚本不靠谱?原来是还没了解透彻引流脚本

    引流脚本,什么是引流脚本?引流脚本怎么样?引流脚本好用吗?引流脚本靠谱吗?引流脚本是骗局吗?引流脚本效果好吗?引流...

  • Kettle11:Kettle脚本控件

    本章讲解以下三种脚本的案例01 javascript脚本02 java脚本03 执行SQL脚本 脚本 1.脚本是转...

  • 进程守护脚本

    进程守护脚本 新建脚本 编辑脚本 添加可执行权限 启动脚本

  • DoTween

    /* 项目: 脚本:校园导航管理脚本 脚本:此脚本挂载在SchoolMenuPanel上 脚本:点击二级导航按钮,...

  • UI Recorder之Android自动化

    简单介绍 之前已经进行了Web的脚本录制,脚本回放,及脚本运行。这次进行Android端脚本录制、脚本回放,及脚本...

  • 宝塔Linux面板命令大全

    【安装宝塔】centos安装脚本 Ubuntu/Deepin安装脚本: Debian安装脚本 Fedora安装脚本...

  • 透视3.16

    【脚本开关→】开【←脚本开关】 【脚本关闭公告→】服务器更换..【←脚本关闭公告】

  • 宝塔常用命令

    安装宝塔 Centos安装脚本 Ubuntu/Deepin安装脚本 Debian安装脚本 Fedora安装脚本 管...

网友评论

      本文标题:脚本

      本文链接:https://www.haomeiwen.com/subject/vryjittx.html