Unity脚本基础

这篇具有很好参考价值的文章主要介绍了Unity脚本基础。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Awake, Start, Update, FixedUpdate,还有一个LateUpdate

Awake在游戏启动时运行一次,并且是在脚本组件未初始化完成时工作,可以用来做一些预设置;而Start是与组件相关的,当组件的脚本完成初始化且启用了脚本组件时,工作一次,并且是在第一次执行Update之前执行。

Update是帧之间的更新,时间是不固定的,一般与物理引擎无关的更新都可以在Update里进行;

FixedUpdate是固定周期的更新,与时间管理里的FixedTime设置有关,通常与物理引擎相关的更新都在FixedUpdate里完成,而且每次FixedUpdate执行完成后会立即执行必要的物理计算。

LateUpdate应该是在一帧最后执行,也就是所有的update执行完成后执行。

Translate和Rotate

Translate是用来增量修改物体位置的,可以直接指定位移向量,也可以指定单个方向,比如transform.Translate(Vector3.forward, 10)表示向前移动10;位置除了用增量修改,也可以直接指定,如transform.localPosition = new Vector3(1,1,1);

Rotrate是用来增量修改物理朝向的,也可以使用单向,如transform.Rotate(Vector3.up, 30). 其中的数字是欧拉角,90表示直角90度。但是不能像position那样直接指定rotation,比如transform.rotation = new Vector3(1,1,1);是不可以的。

LookAt

这个方法可以实现“注视”功能,也就是朝向跟随(但是如何定义face,比如一个立方体,是它的哪个面进行朝向?这个不知道怎么设置),只需要选择一个对象,然后使用transform.LookAt(tartget),就可以实现对target的注视功能。这个可以用来设置镜头跟随或者瞄准。

Mathf.Lerp

线性插值。有时候需要在两个位置之间按一定比例选择一个点,这就叫线性插值。比如起点是1,终点是5,按0.5的比例线性插值,就会得到3,正好在1和5之间。如果每次手动计算很麻烦,尤其是涉及三维坐标点的时候。使用

Vector3 mid = Mathf.Lerp(new Vector3(1,2,3), new Vector(4,5,6), 0.5)

就可以很方便地计算中间的某个点。在计算距离光源的某个点的光线强度的时候很有用。

另外,还有一个叫SmoothDamp的方法也是类似的功能,还不清楚具体区别,有待进一步研究。

Destroy, SetActive, enabled

Destroy用来删除一个对象或者组件。如果删除的是对象,其相关的组件也会被删除。如果对象的组件是公用的,这会影响其它引用组件的对象。

SetActive用来控制一个对象是否生效。如果设置为false,对象将不活动且不可见。

enabled用来设置一个组件Component是否生效,组件是对象的子对象。

GetKey和GetButton

这两个都是用来获取按键状态的,区别在于GetKey使用的是预定义的按键名称,GetKey可以自定义按键名字。比如Input.GetKey(KeyCode.Space)表示获取空格键的状态。而GetButton可以通过在系统Edit->Project Settings->Input菜单里指定某个键特殊的名字,比如给空格键指定名字“Jump”,这样就可以通过Input.GetButton("Jump")获取状态。

两种方法都有三个状态:默认,Down, Up。教程里建议使用GetButton方法。

第一帧,当一个键被按下时,GetButton, GetButtonDown会返回true, GetButtonUp返回的则是false;

第二帧,当这个键被长按时,GetButton返回true, GetButtonDown, GetButtonUp返回false;

第三帧,当这个键抬起时,GetButton, GetButtonDown返回false, GetButtonUp返回true。

GetAxis和GetAxisRaw

这个方法应该主要用在手柄操作控制里,通过Input.GetAxis("Horizontal")和Input.GetAxis("Vertical")来获取手柄在两个方向上的位置,返回值是float型,范围从-1到1.

这个时候,在项目设置里的input设置里,会有几个属性:Gravity, Sensitivity,Dead, Snap。Gravity控制返回值在指定方向上的归位重量,值越大,回归越快,比如将摇杆移动到最大,返回值为1时,Gavity的值越大,其返回值平滑减少到0的速度就越快;Sensitivity与Gravity刚好相反,它控制的是返回值从0增大到1或减少到-1的快慢,值越大,增加得越快;Dead用来设置一片锁定区,用来防止误触,比如摇杆摇动幅度必须超过0.1才生效,就需要把“原来的”-0.1~0.1之间设置为Dead区,这时实际上位移超过0.1时,才会返回非0值,比如无死区时返回0.05时,有死区时实际上返回0;无死区返回大于0.1时,有死区返回的才是非零值 ,但边界仍然是-1和1。 Snap的作用是如果同时按下了正负按钮时归零,比如用a和d分别表示向左移动和向右移动,但如果同时按下,保持0位不变。

GetAxisRaw与GetAxis的区别就是它的返回值并不是连续的,而是要么返回0,要么返回-1或1,即有段落,适合控制有基准方格的操作。

OnMouseDown

这个是事件函数,类似于OnMove()这种,用于鼠标与环境的交互,当对象被左键点击时,执行方法里的代码。比如可以用来开门,等。

但是关于鼠标其它按钮的定义,教程里没有介绍。

GetComponent

用于获取脚本所在对象的其它组件,比如一个UI对象,可以获得其输入框组件,从而控制文本内容。用法:

GetComponent<ComponentType>()。如果要通过一个脚本组件获取其它脚本组件,ComponentType就是其它脚本的类名称。

Time.deltaTime

这是一个很有用的数字,通常用在Update方法中。由于Update函数是按帧更新的,但是帧的时间间隔并不固定,这样就会影响对速率的计算,比如要让一个物体运动,要实现每秒前进1单位,在Update方法里只需要 + 1 * Time.deltaTime就可以了。

Instantiate

实例化一个预制件到游戏世界中。这也是一个很有用的方法,比如要扔一个手雷,就需要动态用这个方法实例化一个手雷对象,并且可以在后续代码中操纵它。使用方法示例:

GameObject obj = Instantiate(PrefabName, position, rotation)

obj.AddForce()

如果实例化的物品是一个消耗品,还需要再次使用Desctroy方法让它在效果结束后消失。

Instantiate方法经常需要设置一个public的游戏对象或者对象数组,用来告诉脚本生成什么东西。但是要注意一点,通过Inspector设置这些对象或者对象数组时,要注意设置来源是Hierarchy还是Project。如果是Hierarchy,那个这个对象会受舞台限制,如果被引用的对象本身在舞台里被Destroy了,那么将无法Instantiate,会报错,说引用对象为空。如果是从Project里引用,才可以无限Instantiate.

Invoke

这是一个延时调用,可以在引擎内置的更新帧流水里完成一些自定义的执行。

Invoke包含两个参数,第一个是必须返回void且没有参数的方法名,字符串类型,第二个参数是以秒计的延时;

InvokeRepeating与Invoke类似,但是它有三个参数,第三个参数表示在第一次引用后,每多少秒重复进行引用。

CancelInvoke用于在需要的时候,将InovkeRepeating指定的重复引用取消。文章来源地址https://www.toymoban.com/news/detail-405132.html

到了这里,关于Unity脚本基础的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity 之 Start 与Update 方法的区别

    Start 方法: Start 方法在脚本所附加的游戏对象被激活后,仅会在第一帧渲染之前被调用一次。它适用于进行一次性的初始化设置和准备工作。如果游戏对象被多次禁用再激活, Start 方法仍然只会在首次激活时被调用。 适用场景: 在 Start 方法中,您可以进行一次性的初始化

    2024年02月11日
    浏览(34)
  • Unity脚本基础

    Awake, Start, Update, FixedUpdate,还有一个LateUpdate Awake在游戏启动时运行一次,并且是在脚本组件未初始化完成时工作,可以用来做一些预设置;而Start是与组件相关的,当组件的脚本完成初始化且启用了脚本组件时,工作一次,并且是在第一次执行Update之前执行。 Update是帧之间的

    2023年04月08日
    浏览(24)
  • unity06 脚本 世界物理坐标体系与脚本基础应用

    子节点相对父节点坐标,以父节点中心点为标准 Global,即世界坐标系 Local,即本地坐标系 以物体自身为轴 6个方向代表:上下 前后 左右 移动物体并不是匀速的 每次运动0.01米,但是间隔的deltaTime不固定 每秒移动3米就是3个格子 transform.Translate() 可实现物体的运动 transform.Tr

    2024年02月16日
    浏览(36)
  • 【Unity】P4 脚本文件(基础)

    前言 上一篇博文主要围绕Unity Inspector部分,围绕组件,资源文件,父子节点部分做介绍。 链接:https://blog.csdn.net/weixin_43098506/article/details/129274582 本篇博文将主要开始代码编辑部分,首先介绍Unity适配的C#代码编辑器,需要对Java或者C++有基础理解;然后将介绍帧的概念,将在

    2024年02月08日
    浏览(30)
  • 【Unity】 基础交互入门(C#脚本互相调用的方法,含动态绑定脚本)

    脚本A: 在需要被调用的类里这样写: 脚本B: 在其他类里调用: 如果出现无法识别上下文的提示,检查一下以下问题: 1、两个脚本的命名空间是否一致,如果不需要的命名空间可以直接删除。 2、类名是否大写开头,且命名合法,且和文件名一致。 3、更新编译一下保存一

    2024年02月15日
    浏览(53)
  • unity脚本基础+编辑器UnityEditor学习

    1.1创建脚本 新建脚本文件后,文件内会有一段默认代码: 它源自基类MonoBehaviour,以确保此脚本将在游戏循环中运行,并具有对某些事件作出反应的附加功能。 1.2生命周期 当脚本运行时,unity会按照预定顺序依次调用以下方法,完成生命周期: [所有脚本的顺序是并行的] 初

    2024年02月04日
    浏览(49)
  • Unity 游戏开发、01 基础篇 | 知识大全、简单功能脚本实现

    Unity默认窗口布局 Hierarchy 层级窗口 Scene 场景窗口,3D视图窗口 Game 游戏播放窗口 Inspector 检查器窗口,属性窗口 Project 项目窗口 Console 控制台窗口 恢复默认布局 Window | Layouts | Default 调大页面字体 Preference | UI Scaling 新项目默认创建了 SampleScene 场景 {摄像机,平行光} SampleScen

    2024年02月09日
    浏览(59)
  • Unity 游戏开发、01 基础知识大全、简单功能脚本实现

    Unity默认窗口布局 Hierarchy 层级窗口 Scene 场景窗口,3D视图窗口 Game 游戏播放窗口 Inspector 检查器窗口,属性窗口 Project 项目窗口 Console 控制台窗口 恢复默认布局 Window | Layouts | Default 调大页面字体 Preference | UI Scaling 新项目默认创建了 SampleScene 场景 {摄像机,平行光} SampleScen

    2024年02月09日
    浏览(62)
  • 【Unity-Shader脚本】0基础学会通过用Unity-Shader脚本渲染图像数据(NV21,NV12,RGBA数据)详细教程--附demo,NV21测试图像,YUV图像查看器。

      最近有一个需求是需要我在Unity中将获取到的图像数据来展示在Unity的界面之中。功能其实很简单,熟悉Unity-Shader的小伙伴可能很快就可以做出来。然而我很少和图像的渲染打交道,基本上是0基础了,在做这个需求之前连Shader是什么都不知道。本文记录了自己做这个需求

    2024年02月03日
    浏览(58)
  • Unity 之 使用定时调用与Update 正常帧更新的运行答疑

    就是说,当我们在Start 函数里面定义了一个InvokeRepeating 函数,那么我们又在Update 定义了一个基本操作,想联合控制物体一个往返的一个运动时,我们应该怎么办? 就是说系统是怎么编译的呢? 这里我提供两个代码,大家看一下区别 using System.Collections; using System.Collections.G

    2024年02月09日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包