unity

unity协程要点

守給你的承諾、 提交于 2019-12-03 14:27:31
使用协程做计时功能应注意 1.协程中用到的组件,变量等被置空前,应该将协程置空 2.置空协程之前应停止协程 3.为了确保同一个协程同时只运行一次,可在协程开始前添加安全代码:判断改协程是否存在,存在则停止协程并将协程置空 实现方法: local function setMyTime() --注意(3) if this.countdown then coroutine.stop(this.countdown) this.countdown = nil end this.countdown = coroutine.start(function() while true do this.tm=this.tm-1--用到的变量 coroutine.wait(1) end end) end 注意(2) if this.countdown then coroutine.stop(this.countdown) --注意(1) this.countdown = nil end --假设此时需要对this.tm置空 this.tm=nil 来源: https://www.cnblogs.com/shirln/p/11799719.html

unity3d 扩展unity原有的Inspector

时光总嘲笑我的痴心妄想 提交于 2019-12-03 14:27:25
为什么会影响到原有布局呢?原因是这样的上面的代码是继承Editor的,那么base.OnInspectorGUI()实际上去掉用了Editor类里的OnInspectorGUI()方法,可是RectTransfm的OnInspectorGUI()方法是在RectTransformEditor这个类写的。 但是问题就来了,RectTransformEditor这个类不是一个对外公开的类。所以不能继承它,那也就无法调用它的OnInspectorGUI()方法了,所以就有了上述问题。 这里有一个巧妙的反射方法,完美的解决这个问题。https://gist.github.com/liortal53/352fda 2D 01d339306e03 [CustomEditor(typeof(RectTransform))] public class MyTest : DecoratorEditor { public MyTest(): base("RectTransformEditor"){} public override void OnInspectorGUI () { base.OnInspectorGUI (); if(GUILayout.Button("Adding this button")) { Debug.Log("Adding this button"); } } }

UNITY3D拓展编辑器 - InspectorEditor(属性编辑器)1

╄→гoц情女王★ 提交于 2019-12-03 14:27:12
前文: 本章节会对InspectorEditor(属性编辑器)的创建方式进行叙述. 正文: 1.代码最终效果 2. 架构阐述 一个InspectorEditor(属性编辑器)产生直接对应着一个继承MonoBehaviour的脚本文件,脚本文件中定义着不同的属性以供InspectorEditor(属性编辑器)去实现。我们可以通过EditorGUILayout/GUILayout来实现InspectorEditor(属性编辑器)界面。 3. EditorGUILayout脚本分析 EditorGUILayout 是绘制InspectorEditor(属性编辑器)的脚本类,脚本内部方法大致分为两类,一类是:手动布局,另外一类是:组件绘制。 4. 开始实现切入正题 4.1 大家都知道拓展器的脚本都需要放置在Editor文件下进行预编译,所以我们也为自己的项目创建一个Editor目录。额外在创建一个Script目录存储脚本文件。 4.2 在Script文件下创建继承自MonoBehaviour的脚本类,维护自定义编辑器属性.有人会问这个类到底用来干什么的,以当下的理解来讲,用于存储编辑器数据用的.下面将我创建的代码贴到下面以供大家参考。 using UnityEngine; using System.Collections; public enum VirtualRoomColor {

Unity Editor 编辑器扩展二 Inspector面板特殊属性

ε祈祈猫儿з 提交于 2019-12-03 14:27:00
目录 目录 Inspector面板特殊属性 代码 Test2_1cs 代码 Test2_2cs 代码 Test2_3cs 代码 Test2_4_2cs 代码 Test2_4_4cs Inspector面板特殊属性 这个知识点网上介绍很多,在此只是学习,其实也很简单,贴出代码,一看便懂。 代码 Test2_1.cs using UnityEngine; using System.Collections; public class Test2_1 : MonoBehaviour { // 限定取值范围 [Range( 1 , 10 )] public int num1; [Range( 1 , 10 )] public float num2; [Range( 1 , 10 )] public long num3; [Range( 1 , 10 )] public double num4; // 空出多行 [Multiline( 5 )] public string multiline; [TextArea( 3 , 5 )] public string textArea; } 代码 Test2_2.cs using UnityEngine; public class Test2_2 : MonoBehaviour { // 对本组件右键设置功能按钮 [ContextMenu(

unity UGUI Image之扩展

一个人想着一个人 提交于 2019-12-03 14:26:44
由于ngui对新版的unity的兼容性越来越不好了,现在逐步转向unity的亲儿子---ugui。尝试着搭了几个ui之后,发现image的图片操作不是太方便(例如 我想在slice模式下,按照比例去放大图片),我每次都算一边。 用了ngui的我联想到能不能模仿者ngui UISprite的方式去扩展呢。哈哈,最终被我搞成了。先看效果 用过ngui的朋友们是不是对这个界面很熟悉。 下面介绍扩展方式: 1:扩展Image public class ExtImage : Image { } 2:构建width height,宽高比,缩放样式 public UIWidget.AspectRatioSource keepAspectRatio = UIWidget.AspectRatioSource.Free; public float aspectRatio = 1f; private int mWidth; private int mHeight; 3:提供操作的方法 protected override void Awake() { base.Awake(); UpdateSize(); } public int Height { get { return mHeight; } set { value = Mathf.Max(2, value); if (mHeight !=

Unity3D编辑器扩展(二)之对Inspetor面板的扩展

淺唱寂寞╮ 提交于 2019-12-03 14:24:25
Unity3D对编辑器的扩展提高了开发的效率,今天就和大家讨论一下对Inspector面板的扩展,这也是我们最经常使用的工具。那就以一个例子来开始学习吧! 在项目的开发过程中经常会用到修改某个脚本的大量数据,我们可以用一个按钮一键来实现这么多的数据修改,不用每个参数都进行修改啦,是不是很方便呢,那么今天的东西就可以派上用场啦! 用到的例子是修改Camera上的nearClipPlane、farClipPlane和fieldOfView参数。 下图是在Inspector面板上Camera没有进行扩展的布局。 **注意事项: (1)、引用UnityEditor; (2)、添加扩展脚本的类型,如[CustomEditor(typeof(Camera))] (3)、脚本继承Editor ; (4)、将脚本放到Editor文件下,如果没有那就创建一个Editor文件夹;** 附上代码片段 using UnityEngine; using System.Collections; using UnityEditor; //需要扩展的脚本 [CustomEditor( typeof (Camera))] public class SetLightParameters : Editor { private Camera camera; //重写OnInspectorGUI()方法 public

unity dropdown 界面设计

那年仲夏 提交于 2019-12-03 14:23:33
摆界面的时候 遇到这种界面 需要下拉列表框 记录一下经过 使用unity里自带的 dropdown 在Hierarchy界面创建一个Dropdown 这个是基础这里就不多讲了 最终功能:点击下拉列表,出现离开房间,解散房间,游戏设置文字和响应的图标。dropdown设置如下 跟默认的dropdown稍微删掉了一些不用的东西,比如首选项的文字我不需要。Dropdown我不想要背面的白色背景,将他的透明度改为了0,Arrow 是首个图标,选一个你想替换的icon.调节大小,这些自己试试就会了。 主要是这的配置, Caption Text和Caption Image是作为首选项的文字和图片显示 Item Text和Item Image是作为下拉列表中每个item的文字和图片显示, Value值会随着下拉列表选项的不同而变化,默认是0,选择下拉列表的第一个,我这里不需要这样,就将他设计成一个不用的数字。 Options里面的第一个框是 下拉列表中的文字,第二个是图片。 提示:这里的item Image 使用hierarchy视图里你你创建的 item Image。不知道的话看这个博客的第二张图上能找到。这是一种通过摆界面的方式实现的。下面我们说一下通过代码实现,参考别人的。 public string[] showText; public Sprite[] sprite; Dropdown

Unity(一)关于Unity Dropdown控件的使用心得

邮差的信 提交于 2019-12-03 14:23:09
/*更新记录:20190508*/ 说明:以下分日期记录并分享自己使用的经验 快速上手开发请参考最新日期的更新 核心在于dropdown.value 知道我们选择的索引是哪一个Item 2017功能记录 1:首先看一下控件组成 Lable和Arrow是用来显示初始化的文字和勾选项的,Lable会根据首选项的内容自动更改。 Template是Dropdown的 模板样式 ,其中Background和Checkmark的图集资源我们可以提前更改。 2:看一下Dropdown的属性面板 Caption Text和Caption Image是作为下拉列表首选项的文字和图片显示,也是我们每次选择后的内容,因此可代码调用获取 Item Text作为下拉列表中每个item的文字显示,Item Image可以用来扩展模板增加内容 Value值会随着下拉列表选项的不同而变化,dropdown.value Options选项栏内:可以动态赋值给Item对象 Dropdown.OptionData 4:代码模块 说明:参考他人的代码,并做了修改 public string[] showText;//每个Item下的Text,用来显示和修改 public Sprite[] sprite;//自己用来换每个Item的背景显示 Dropdown dropDownItem; List<string>

Unity编辑器扩展-基本界面编写

情到浓时终转凉″ 提交于 2019-12-03 14:22:03
一.在编辑器上增加一个MenuItem 先进行第一步,给编辑器加个菜单,通过[MenuItem("AXX/BXX")]就可以在编辑器的上边菜单栏增加一个下拉菜单AXX,并增加一个按钮BXX。只要把这句话写在我们定义的函数上方就可以,然后我们点击这个按钮,就会调用这个我们自定义的函数。不过有一点一定要记住,这个函数要是static的!(想一想就可以知道是为什么,编辑器没有必要搞粗一个对象之类的,因为我们要调用的只是这个方法)例如: using UnityEngine; using UnityEditor; using System.Collections; public class EditorTest { [MenuItem("MyTools/EditorTest")] public static void ConfigDialog() { Debug.Log("EditorTest ToolButton is pressed!"); } } 我们的编辑器就多了这样的一个工具选项MyTools,点击出现了EditorTest下拉菜单,再点击按钮就会输出Log了,如下图所示: 二.创建一个对话框 如果我们嫌这个一个下拉菜单不爽,那我们就可以创建一个对话框,然后就可以在对话框里放更多的按钮或者一些工具条来调节相关内容,下面看一下在Unity编辑器中对话框的创建以及使用。 using

Unity编辑器开发(二):四大GUI系统

前提是你 提交于 2019-12-03 14:21:44
前言 首先,对于编辑器中的GUI系统,我们可以分为四大类: 1、UnityEngine.GUI 2、UnityEngine.GUILayout 3、UnityEditor.EditorGUI 4、UnityEditor.EditorGUILayout GUI系统 这是运用最广泛的GUI系统,所属命名空间UnityEngine,用其绘制的所有控件不带有自动布局效果,需要手动指定每个控件的绘制位置和大小, 自适应性较弱 ,但 开发自由度较高 。 注意:GUI系统可以在发布后使用,也可以在编辑器中使用。 GUI系统的控件使用例子 private void OnGUI ( ) { GUI . Button ( new Rect ( 0 , 0 , 100 , 30 ) , "Button" ) ; GUI . Label ( new Rect ( 100 , 0 , 100 , 30 ) , "Label" ) ; GUI . PasswordField ( new Rect ( 0 , 30 , 100 , 30 ) , "Password" , '$' ) ; GUI . Toggle ( new Rect ( 100 , 30 , 100 , 30 ) , true , "Toggle" ) ; } GUILayout系统 带自动布局的GUI系统,所属命名空间UnityEngine