unity 小功能、知识点二

协同程序的开启与终止:
       在Unity3D中,使用MonoBehaviour.StartCoroutine方法即可开启一个协同程序,也就是说该方法必须在MonoBehaviour或继承于MonoBehaviour的类中调用。
       在Unity3D中,使用StartCoroutine(string methodName)和StartCoroutine(IEnumerator routine)都可以开启一个线程。区别在于使用字符串作为参数可以开启线程并在线程结束前终止线程,相反使用IEnumerator 作为参数只能等待线程的结束而不能随时终止(除非使用StopAllCoroutines()方法);另外使用字符串作为参数时,开启线程时最多只能传递一个参数,并且性能消耗会更大一点,而使用IEnumerator 作为参数则没有这个限制。
        在Unity3D中,使用StopCoroutine(string methodName)来终止一个协同程序,使用StopAllCoroutines()来终止所有可以终止的协同程序,但这两个方法都只能终止该MonoBehaviour中的协同程序。
        还有一种方法可以终止协同程序,即将协同程序所在gameobject的active属性设置为false,当再次设置active为ture时,协同程序并不会再开启;如是将协同程序所在脚本的enabled设置为false则不会生效。这是因为协同程序被开启后作为一个线程在运行,而MonoBehaviour也是一个线程,他们成为互不干扰的模块,除非代码中用调用,他们共同作用于同一个对象,只有当对象不可见才能同时终止这两个线程。然而,为了管理我们额外开启的线程,Unity3D将协同程序的调用放在了MonoBehaviour中,这样我们在编程时就可以方便的调用指定脚本中的协同程序,而不是无法去管理,特别是对于只根据方法名来判断线程的方式在多人开发中很容易出错,这样的设计保证了对象、脚本的条理化管理,并防止了重名。

计算一段字体的宽度(如 我是程序员 是程  需要插入一个箭头,箭头长度可知,需要计算是程 间的空格数)

private float GetTextWhide(int fontsize, Font font, string str)
{
font.RequestCharactersInTexture(str, fontsize, FontStyle.Normal);
CharacterInfo characterInfo;
float width = 0f;
for (int i = 0; i < str.Length; i++)
{
font.GetCharacterInfo(str[i], out characterInfo, fontsize);
width += characterInfo.advance;
}
return width;
}

其中fontsize为这个Text的字体大小,font为这个使用的字体,str是你要计算长度的字符串,该函数会返回一个表示这个字符串在指定Text上渲染时的宽度。

UGUI空格导致换行:将空格转换为全角空格,半角空格会使Text自动换行。

实现text显示不同颜色的字,如我是程序员小白,其中程序员为红色,其余自为黑色。使用透明颜色标签<color=#0000ff00>111</color>,其中的111不会显示在Text上但会占据格子,作用类似于空格,通过这个标签的颜色值可以改变相应的字体颜色。

颜色标签链接:http://blog.csdn.net/ynn0705/article/details/7012516

unity 编辑状态下暂停:

1.Debug.Break();或者UnityEditor.EditorApplication.isPaused = false;

2.使用编辑器类:EditorApplication.ExecuteMenuItem("Edit/Play");
3.UnityEditor.EditorApplication.isPlaying = false;

问题:
unity中通过Application.dataPath + "/Resources/Config/xxx")作为将要读取文件的路径时,在编辑器上正常运行,但在打包后却无法正确读取文件
解决:
这是因为不同平台Application.dataPath所指定的路径不一样,editor模式下代表的是Asset,打包后对应的路径是打包时生成的文件夹“xxx_data”,这是需要把对应的文件拷贝到“xxx_data”文件夹下,例如打包后文件路径“E:\Unity\TowerDefense\Build\塔防_Data\Resources\Config”对应编辑器下的“E:\Unity\TowerDefense\Assets\Resources\Config”。

问题:
UNITY 无法导入视频解决方法
解决
1.unity 导入视频时无法转换成movieTexture, 这时候unity会提示影片导入失败,这时候需要安转QuickTime Player,这个软件可以把unity的影片转换成unity能用的材质。
2.QuickTime 无法正常运行时并且提示 “please install apple application support”时,打开下载的QuickTime安装包,选择安装“apple application support.msi”,安装选择“修复”。
3.unity支持的影片格式有.mov .mpg .mpeg .mp4 .avi .asf。
4.成功导入的影片会生成一个对应的Movie Audio,这个文件是该影片的声音文件。

问题:Scroll Rect中滑动事件是通过EventTrigger响应,所以当item也是通过EventTrigger响应点击事件时,就会遮挡住后面的Scroll Rect的滑动事件。
UGUI的ScrollRect组件会和放在它上面的button或者toggle等组件有事件响应的冲突,具体体现为上面的组件会遮挡下面的响应,在button或者toggle等组件上出现只能点击不能滑动的效果,要想滑动必须点旁边才行。
解决:
(1).Button: Button.onClick.AddListener(delegate () {ButtonOnClick(Button.gameObject); }); onClick回调函数 是继承自UnityEngine.Events.UnityAction.委托。由于同一个点击事件通过不同的事件模块去响应,很好的处理了item挡住Scroll Rect 事件的问题。委托格式为不带任何参数和返回的函数。
这里的Button是指你要按下的那个按钮,ButtonOnClick是该按钮按下时要触发的事件。
第二种解决方案是:不用按钮,1.新建一个继承MonoBehaviour和IPointerClickHandler接口的脚本(例如ClickObject),2.这个脚本实现public void OnPointerClick(PointerEventData eventData)方法:3.创建一个名为Panel_IPointer的空对象,这个空对象就是你的按钮。并且将ClickObject脚本附加到对象上。这时候点击这个对象就会调用OnPointerClick方法。
第三种:创建一个Image(例如名为Btn),Btn对象添加EventTrigger组件," Add New" -> 选择" PointerClick"。将Btn对象拖拽到触发者位置。然后点击"No Function"选择我们要触发的OnTestClick事件。
(2)toggle:使用isOn的方法,例如if(toggle.ison){debug.log("click")};

原文地址:https://www.cnblogs.com/wang-jin-fu/p/8277699.html

时间: 2024-10-15 10:38:47

unity 小功能、知识点二的相关文章

unity 小功能、知识点一

定时重复处理,比如, 启动0.5秒后每隔1秒执行一次 DoSomeThing 函数:1.用InvokeRepeating 函数实现 void Start() { InvokeRepeating("DoSomeThing", 0.5, 1.0); } CancelInvoke("你调用的方法"); 停止InvokeRepeating void Start() { StartCoroutine("Repeating");开始调用 StopCorout

小功能(二)

1.多图参数整合 foreach ($files['name'] as $key => $value) { if ($files['name'][$key] && !preg_match('/[\x{4e00}-\x{9fa5}]/u', $files['name'][$key]) > 0){ $file = array( 'name' => $files['name'][$key], 'type' => $files['type'][$key], 'tmp_nam

基于公有云平台实现直播、点播及小视频功能(二)

呵呵,上一节不知道怎么的就开始扯起了电视的发展,不过确实是勾起了我童年的回忆,这节我们正式进入正题,先说说直播.直播这个词看到以后,让我们想到的是什么?其实感觉也没什么,因为已经很普及,是否更多的是想到了直播带来的利益链?"某公司财务职员私自挪用公司资产打赏某主播金额高达数百万!!!"是啊,好像更多的是这样的字眼,那这个平台是如何实现的呢?为什么能有这么大的能量?直播包括流采集,流处理,编码,推流,拉流,解码,播放,这些步骤.这个图片基本概括了直播的全过程 一.流采集流采集包括图像流和

如何为你的美术妹子做Unity的小工具(二)

你想像这样一样  为自己的Unity 小工具打开一个Unity的窗口吗?   看起来就很厉害对不对   妹子看了还不激动吗 ?! 在做你不知道的事情之前先去查一下Manual 是个很好的习惯  我们一起来看看吧 想要一个界面 但是又知道具体的类叫什么?   那我们先来搜Window看看能不能找到 好像还真有    Derive from this class to create an editor window.  派生这个类用来创建editor的窗口   好像很不错的样子 我们打开 先拿它的例

iOS开发UI篇—实现一个私人通讯录小应用(二)

iOS开发UI篇—实现一个私人通讯录小应用(二) 一.实现功能说明 (1)点击注销按钮,弹出一个对话框,点击确定后移除当前栈顶的控制器,返回开始界面,点击取消,不做任何操作. 注意:注销按钮的单击事件已经进行了连线.实现-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex需要遵守UIActionSheetDelegate协议. 1 //注销按钮 2 - (IBActi

iOS开发UI篇—实现一个私人通讯录小应用(二) - 文顶顶

原文  http://www.cnblogs.com/wendingding/p/3777087.html iOS开发UI篇—实现一个私人通讯录小应用(二) 一.实现功能说明 (1)点击注销按钮,弹出一个对话框,点击确定后移除当前栈顶的控制器,返回开始界面,点击取消,不做任何操作. 注意: 注销按钮的单击事件已经进行了连线.实现-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)butto

C#程序员整理的Unity 3D笔记(二十):2D Toolkit之官方教程《Whack a Mole》

在上篇博客中,简单整理了一下Unity Native 2D功能:<C#程序员整理的Unity 3D笔记(十九):Unity 3D的Native 2D>. 本文开始学习2D商用比较广泛的2D Toolkit插件. 2D Toolkit插件在2D中的地位,犹如UI中NGUI对Unity GUI一样:虽然官方原生的2D还不错,但这是最近1年新版本才有的功能,2年前Unity 2D的王道还是得用插件的,故<2D Toolkit>就成了目前商业不错的选择. 在上周刚开始看的时候,就给自己提了

【iOS开发每日小笔记(二)】gitHub上的开源“瀑布流”使用心得

这篇文章是我的[iOS开发每日小笔记]系列中的一片,记录的是今天在开发工作中遇到的,可以用很短的文章或很小的demo演示解释出来的小心得小技巧.该分类的文章,内容涉及的知识点可能是很简单的.或是用很短代码片段就能实现的,但在我看来它们可能会给用户体验.代码效率得到一些提升,或是之前自己没有接触过的技术,很开心的学到了,放在这里得瑟一下(^_^).其实,90%的作用是帮助自己回顾.记忆.复习.如果看官觉得太easy,太碎片,则可以有两个选择:1,移步[iOS探究]分类,对那里的文章进行斧正:2,在

自制Unity小游戏TankHero-2D(3)开始玩起来

自制Unity小游戏TankHero-2D(3)开始玩起来 我在做这样一个坦克游戏,是仿照(http://game.kid.qq.com/a/20140221/028931.htm)这个游戏制作的.仅为学习Unity之用.图片大部分是自己画的,少数是从网上搜来的.您可以到我的github页面(https://github.com/bitzhuwei/TankHero-2D)上得到工程源码. 本篇主要记录金币.按钮.坦克工厂.小地图等小部件,让整个场景初步成为一个可玩的游戏. 在本篇在制作过程中,