unity

Unity延时方法Invoke和InvokeRepeating

江枫思渺然 提交于 2019-11-27 00:53:24
Unity延时方法Invoke和InvokeRepeating MonoBehaviour 里面有两个内置的延时方法 InvokeRepeating(methodName: string , time: float , repeatRate: float ): void ; methodName:方法名 time:多少秒后执行 repeatRate:重复执行间隔 Invoke(methodName: string , time: float ): void ; methodName:方法名 time:多少秒后执行 还有两个重要的方法: IsInvoking:用来判断某方法是否被延时,即将执行 CancelInvoke:取消该脚本上的所有延时方法 using UnityEngine; using System.Collections; public class DelayScript : MonoBehaviour { // 当前时间 private float nowTime; // 执行重复方法的次数 private int count; // Use this for initialization void Start () { nowTime = Time.time; Debug.Log( " 时间点: " + nowTime); this .Invoke( "

Unity3d_协程和Invoke二者的区别

拜拜、爱过 提交于 2019-11-27 00:52:41
延迟调用一般会用到 Time. deltatime 做逻辑处理,还有 Invoke 延迟调用,协程,说一下 Invoke 和协程大致区别。 Invoke和协程 一、Invoke函数。 原文: http://blog.csdn.net/ycguhang/article/details/18808873 1.Invoke是一种委托方法。 void Invoke(string methodName, float time); ,第一个参数是要调用的函数名,后一个参数是延迟的时间。 意思为:在time时间后调用函数名为methodName方法。 2.使用 Invoke() 方法需要注意 3点: (1 ):它应该在 脚本的生命周期里的(Start、Update、OnGUI、FixedUpdate、LateUpdate)中被调用; (2):Invoke(); 不能接受含有 参数的方法; (3):在 Time.ScaleTime = 0; 时, Invoke() 无效,因为它不会被调用到 3.Invoke() 也支持重复调用: void InvokeRepeating(string methodName, float time, float repeatRate); 意思是指: time 秒后调用 调用函数名为methodName方法,并且之后每隔 repeatRate

Unity3d_协程和Invoke

允我心安 提交于 2019-11-27 00:52:31
目前的项目中经常用到计时器,一些延迟执行操作。 开始总是使用最基础的time += Time。deltatime;再用time来判断时间。但是若是一个脚本需要拥有多个计时器,这会使脚本变得很乱。 于是在网上开始查询相关资料。 发现2个两个比较便捷的操作: 1.Invoke 2.协程 一、Invoke函数。 原文: http://blog.csdn.net/ycguhang/article/details/18808873 1.Invoke是一种委托方法。 void Invoke(string methodName, float time); ,第一个参数是要调用的函数名,后一个参数是延迟的时间。 意思为:在time时间后调用函数名为methodName方法。 2.使用 Invoke() 方法需要注意 3点: (1 ):它应该在 脚本的生命周期里的(Start、Update、OnGUI、FixedUpdate、LateUpdate)中被调用; (2):Invoke(); 不能接受含有 参数的方法; (3):在 Time.ScaleTime = 0; 时, Invoke() 无效,因为它不会被调用到 3.Invoke() 也支持重复调用: void InvokeRepeating(string methodName, float time, float repeatRate);

Unity Invoke以及InvokeRepeating延时函数用法

元气小坏坏 提交于 2019-11-27 00:52:22
Invoke 和 InvokeRepeating 是MonoBehaviour中的两个内置延时方法 Invoke Invoke(methodName:string, time:float): void; methodName:方法名 time:多少秒之后执行 InvokeRepeating InvokeRepeating(methodName: string, time: float, repeatRate: float): void methodName:方法名 time:多少秒之后执行 repeatRate:重读执行间隔 IsInvoking: 用来判断某方法是否被延迟,即将执行 CancelInvoke: 取消该脚本上所有的延时方法 代码演示: public class TestInvoke : MonoBehaviour { private float nowTime ; private int count ; void Start ( ) { nowTime = Time . time ; Debug . Log ( "时间点:" + nowTime ) ; Invoke ( "setTimeOut" , 3f ) ; InvokeRepeating ( "setTimeRepeat" , 2f , 1f ) ; } private void setTimeOut ( )

Unity中Invoke延时方法相关使用

岁酱吖の 提交于 2019-11-27 00:46:23
Unity中Invoke延时方法相关使用 Invoke和InvokeRepeating都是MonoBehaviour类中的方法.由于并不一定是始终执行,并且每帧反复执行,所以这两个方法基本写在 Start() 方法里,利用调用函数名来起到延时执行,或者(不)延时指定频率执行方法的效果. Invoke Invoke(methodName: string, time: float): void; methodName:方法名 time:多少秒后执行 InvokeRepeating InvokeRepeating(methodName: string, time: float, repeatRate: float):void; methodName:方法名 time:多少秒后执行 repeatRate:重复执行间隔 还有两个重要的方法: IsInvoking :用来判断某方法是否被延时,即将执行 CancelInvoke :取消该脚本上的所有延时方法 代码: using UnityEngine ; using System ; public class SystemTime : MonoBehaviour { DateTime curr_time ; //当前时间 int count ; //执行重复方法的次数 void Start ( ) { Invoke ( "InvokeTest"

Unity 延迟执行一段代码的较为优雅的方式

冷暖自知 提交于 2019-11-27 00:45:31
在Unity中,延时执行一段代码或者一个方法或者几个方法的情况非常普遍。 一般会用到Invoke和InvokeRepeating方法。顾名思义,第一个是执行一次,第二个是重复执行。 看下定义: void Invoke(string methodName, float time); 第一个参数是方法名(注意是字符串形式),并不是更方便的委托。第二个是延时多少秒。只执行一次。 void InvokeRepeating(string methodName, float time, float repeatRate); InvokeRepeating第二个参数是延时多少秒后开始,第三个参数是每次执行间隔的秒数。 你有没有发现这两个方法有个弊端,就是必须输入方法名!也就是我说,如果我想延时执行某段代码,必须把代码放在某个方法里,然后使用这Invoke或者InvokeRepeating方法来执行。 这样对于上下文变量、属性的引用就会尤为不便,而且不能传参数!!!尼玛,要他还有何用? 我猜你一定用过这样的方法。没错,“协同”,听起来还挺高大上的名字啊。 用StartCoroutine来执行一个以IEnumerator为返回值的方法,通常用于异步下载啊,等比较耗时又不能让游戏卡死的情况。 还有一个好的类WaitForSeconds,对,它就一个构造函数,用来延时的(延时………………比万艾可好用

unity延时方法Invoke和InvokeRepeating

江枫思渺然 提交于 2019-11-27 00:45:18
MonoBehaviour里面有两个内置的延时方法 Invoke Invoke(methodName: string, time: float): void; methodName:方法名 time:多少秒后执行 Invoke() 方法是 Unity3D 的一种委托机制 如: Invoke("SendMsg", 5); 它的意思是:5 秒之后调用 SendMsg() 方法; 使用 Invoke() 方法需要注意 3点: 1 :它应该在 脚本的生命周期里的( Start 、 Update 、OnGUI、FixedUpdate、LateUpdate)中被调用; 2 :Invoke(); 不能接受含有 参数的方法; 3:在 Time.ScaleTime = 0; 时, Invoke() 无效,因为它不会被调用到 InvokeRepeating InvokeRepeating(methodName: string, time: float, repeatRate: float): void; methodName:方法名 time:多少秒后执行 repeatRate:重复执行间隔 还有两个重要的方法 : IsInvoking:用来判断某方法是否被延时,即将执行 CancelInvoke:取消该脚本上的所有延时方法 using UnityEngine; using System

stage3D 搭建2d图形引擎 (七) 简单纹理动画

∥☆過路亽.° 提交于 2019-11-26 22:48:52
在硬件渲染的基础之上实现动画的方案应该很多,但比较普遍也是很基础的一种做法就是纹理动画,即通过每一帧改变纹理坐标来在同一张纹理上实现画面的切换。 如下的一张精灵图序列,如果我们每一帧将纹理坐标(四个点)向前推进一步,那么就可以让人物动起来: 实现这种动画其实并不难,但前提是你已经实现了静态的纹理贴图,在静态纹理贴图的基础之上我们需要做的就是将每一帧的纹理坐标数据计算并存储起来,然后在每一帧的迭代中,根据当前帧的计数,取得相应的纹理坐标即可。 我们通过扩展之前的Image类来实现这种动画: 1 package psw2d.display 2 { 3 import flash.display.Bitmap; 4 import flash.display.BitmapData; 5 import flash.geom.Point; 6 import flash.geom.Rectangle; 7 8 import psw2d.Sparrow; 9 import psw2d.core.Context2D; 10 import psw2d.display.animation.IAnimation; 11 import psw2d.render.RenderMaster; 12 import psw2d.texture.BitmapTexture; 13 import psw2d

unity纹理压缩方案汇总(持续更新)

拥有回忆 提交于 2019-11-26 20:44:16
参考链接(总结还是比较全): https://blog.csdn.net/goodai007/article/details/52679333 参考链接: https://zhuanlan.zhihu.com/p/28624490 后续有新思路 持续更新 总结一下 查看的时候方便 也防止原链接失效(如有需求 请去原链接支持) 文章包括: 1.纹理压缩策略 2.图片优化神器 - Dither算法进阶方案(附代码) 3.图片alpha分离(TODO 待整理) ** 纹理压缩策略 ** Unity3D引擎对纹理的处理是智能的:不论你放入的是PNG,PSD还是TGA,它们都会被自动转换成Unity自己的Texture2D格式。 在Texture2D的设置选项中,你可以针对不同的平台,设置不同的压缩格式, 如 IOS 设置成PVRTC4 Android平台设置成RGBA16等 手游开发(Android/IOS)中,我会使用3个级别的压缩程度:高清晰无压缩、中清晰中压缩、低清晰高压缩;4种压缩方法:RGBA32, RGBA16+Dithering,ETC1+Alpha,PVRTC4。一般足够应付大部分的需求了。 高清晰无压缩 - RGBA32 Unity RGBA32 - 高清晰无压缩.png RGBA32等同于原图了,优点是清晰、与原图一致,缺点是内存占用十分大

unity 四叉树管理场景

眉间皱痕 提交于 2019-11-26 20:29:11
声明:参考 https://blog.csdn.net/mobilebbki399/article/details/79491544 和《游戏编程模式》 当场景元素过多时,需要实时的显示及隐藏物体使得性能提示,但是物体那么多,怎么知道哪些物体需要显示,哪些物体不需要显示的。当然,遍历物体判断该物体是否可以显示是最容易想到的方法,但是每次更新要遍历所有物体的代价很高,有没有其他可以替代的方法呢,当然有,四叉树就是其中一个方法。 假设场景是一维的,所有物体从左到右排成一条线,那么用二分法就可以快速找出距离自己一定范围内的物体。 同样四叉树的原理像二分一样,只是二分法处理的是一维世界, 四叉树处理的是二维世界,再往上三维世界用八叉树处理,这里用四叉树管理,八叉树暂时不讨论,原理类似。 这里先展示效果: 四叉树结构: 根节点是整个场景区域,然后分成四块:左上右上左下右下,分别作为根节点的儿子,然后每个儿子又分成四块重复之前步骤,这就是一棵四叉树。 每个节点保存四个儿子节点的引用,并且有存放在自己节点的物体列表,为什么物体不全部存放在叶子节点呢?因为有可能某个物体比较大,刚好在两个块的边界上。 这时候有两种做法: 1、这个物体同时插入两个节点的物体列表中 2、这个物体放在两个几点的父亲节点的物体列表中 第一种方法管理起来比较麻烦,所以在此采用第二种方法。 首先定义场景物体的数据类: 1