About

Posts by :

Unity教程之-Unity3d碰撞器与触发器的区别详解

 

前提:要用collider发生碰撞的话必须是使用力来移动物体。如果只是单纯的位置移动(transform.position)使用这种方法是不行的。必须有了物理的力Rigidbody或者charactercontroller移动才可以用collider的碰撞。

正文:

要产生碰撞必须为游戏对象添加刚体(Rigidbody)和碰撞器,刚体可以让物体在物理影响下运动。碰撞体是物理组件的一类,它要与刚体一起添加到游戏对象上才能触发碰撞。如果两个刚体相互撞在一起,除非两个对象有碰撞体时物理引擎才会计算碰撞,在物理模拟中,没有碰撞体的刚体会彼此相互穿过。

物体发生碰撞的必要条件:

两个物体都必须带有碰撞器(Collider),其中一个物体还必须带有Rigidbody刚体或者charactercontroller组件

在unity3d中,能检测碰撞发生的方式有两种,一种是利用碰撞器,另一种则是利用触发器。

碰撞器: 一群组件,它包含了很多种类,比如:Box Collider(盒碰撞体),Mesh Collider(网格碰撞体)等,这些碰撞器应用的场合不同,但都必须加到GameObjecet身上。

触发器 ,只需要在检视面板中的碰撞器组件中勾选IsTrigger属性选择框。 More

Unity教程之-Unity3d中使用手势缩放屏幕和旋转视角

 

unity3d移动平台开发中,手势操作处处皆是,手势操作既可以很简单,也可以很复杂,那么本篇文章我们来看下Unity3d中使用手势缩放屏幕和旋转视角 ,废话不说,贴上代码 More

Unity教程之-在Unity3d中加载外部图片的两种方法

 

最近在做项目的过程中遇到这样的一个需求:玩家可以在游戏过程中进行实时存档,在存档过程中会保存当前游戏进度,同时会截取当前游戏画面并加载到游戏存档界面中。当下一次进入游戏的时候,将读取本地存档图片并加载到游戏界面中。这在单机游戏中是特别常见的一种功能,这里主要有两个关键点。首先是截取游戏画面,这个问题大家可以在《Unity教程之-Unity3d游戏开发之截屏保存精彩瞬间》这篇文章中找到答案。其次是从本地加载图片,因为这里要保证可读可写,因此传统的Resources.Load()方式和AssetBundle方式均无法实现这样的功能。那么怎样从外部加载图片到游戏中,这就是我们今天要讨论的内容啦。好了,这里介绍两种方法来实现这一目的。 More

Unity教程之-Unity3d开发中编辑器Editor的undo撤销操作

 

在Unity3d编辑器扩展中,常常需要兼容Undo的操作即:Cmd/Ctrl + z。在Unity3d对应的接口Undo.RecordObjects可以完成这项工作。

封装

由于它的参数需要我们操作对象的组件,我为他封装了一个操作类。通过托管的方式调用。 More

Unity教程之-Unity3d中光照贴图Lightmapping技术

 

最近的更新有点缓慢,中秋国庆玩的有点high,好了切入正题,今天我们来看下Unity3d中光照贴图Lightmapping技术 ,Lightmapping光照贴图技术是一种增强静态场景光照效果的技术,其优点是可以通过较少的性能消耗使静态场景看上去更加真实,丰富,更加具有立体感;缺点是不能用来实时地处理动态光照。当游戏场景包含了大量的多边形时,实时光源和阴影对游戏的性能的影响会很大。这时使用Lightmapping技术,将光线效果预渲染成贴图使用到多边形上模拟光影效果。

烘焙参数

Object选项卡

“All”组中的参数

More

Unity教程之-Unity3d Auto Create Editable Copy Font

 

Unity中咱们经常对字体做Create Editable Copy,虽然已经非常方便了,但是实际使用场景中,有时候会有不方便的地方。

  1. 我们经常对同一个字体做不同字体大小的Copy,这个时候,每次都去修改font的属性,非常之蛋疼。
  2. 本地化翻译文件导出的文字需要手工加到字体属性中,如果同一个字体还有不同大小,更蛋疼了。
  3. 以上你都可以忍了,但是你再次Create Editable Copy之后,你发现场景中已经使用了改字体的Text组件全显示Miss Font

已经不能忍了……

咱们脚本搞定这事,具体实现后效果
1. 用配置文件指明需要使用的font name,font size,导出的字符集内容
2. 根据配置文件Create Editable Copy,同时保证场景中已存在的组件不丢失字体 More

Unity教程之-Unity3d 帧事件管理器

 

大家在开发 Unity 的时候,肯定使用过 MonoBehaviour 中的 Update 函数,在每个类中调用 Update 有很多优点,当然也有非常多的缺点,下面我们说说他的优点与缺点。

优点部分(不完全)

1、方便,每个逻辑单独处理,比如每个子弹对象控制每个子弹的移动轨迹等等。

缺点部分(不完全)

1、每个类的 Update 函数都会自动运行,禁止自动运行一是禁用脚本,但是禁用脚本之后,其他的固定执行函数将无法继续进行,二是添加状态判断,这样又会增加每个类的执行效率开销。
2、每个类的 Update 执行顺序不能统一,比如一个子弹每帧移动 5 像素,另一个子弹每帧移动 5 像素,但是不能保证他们能在同帧中同时到达目标位置。
3、暂停比较麻烦,比如我们希望场景中的某些角色停止一分钟,这个时候我们最常用的就是添加一个状态,然后在 Update 中判断这个状态值,但是这样会增加每个类的执行效率开销。

因为以前在开发 FLASH 游戏的时候,会经常使用帧管理器来统一管理游戏的运行,因为这样可以保证游戏对象都有统一的节奏,在一个帧中可能执行的逻辑有些复杂,但是这会确保游戏对象都有统一的时间延迟,根据以前的经验,用 Unity 实现了一个帧管理器,这样做的好处是只需要几个少数的 Update 函数就可以管理游戏中所有的对象节奏,保证逻辑统一,并且有序。

主要的类只有两个,一个是 FrameItem.cs 类,代码如下:

More

Unity教程之-unity3d扩展NGUI限制UI点击响应间隔

 

游戏开发中,当某个按钮按下后给服务器发送某条消息,

如果玩家短时间内疯狂点击按钮很多次,这将会给服务器发送很多条无用数据

不但增加了服务器的压力,发送数据还浪费流量,甚至可能引发一些莫名其妙的bug

所以,限制UI点击相应间隔的小东西就诞生了

当然,你也可以用其他一些方法来实现,不一定非要用我这种方法 More

Unity教程之- iTween插件用法总结

iTween是一个动画库,用它可以轻松实现各种动画、晃动、旋转、移动、褪色、上色、控制音频等

iTween 支持的功能:
  • 控制音频:AudioFrom、AudioTo、AudioUpdate、Stab
  • 控制相机:CameraFadeAdd、CameraFadeDepth、CameraFadeDestroy、CameraFadeSwap、CameraFadeFrom、CameraFadeTo、CameraTexture
  • 变色控制:ColorFrom、ColorTo、ColorUpdate
  • 绘制相关:DrawLine、DrawLineGizmos、DrawLineHandles、DrawPath、DrawPathGizmos、DrawPathHandles
  • 淡入淡出:FadeFrom、FadeTo、FadeUpdate
  • 视角控制:LookFrom、LookTo、LookUpdate、LookType
  • 移动控制:MoveAdd、MoveBy、MoveFrom、MoveTo、MoveUpdate
  • 路径操作:PutOnPath、PointOnPath
  • 旋转操作:RotateAdd、RotateBy、RotateFrom、RotateTo、RotateUpdate
  • 缩放操作:ScaleAdd、ScaleBy、ScaleFrom、ScaleTo、ScaleUpdate
  • 震动控制:ShakePosition、ShakeRotation、ShakeScale
  • 其他:Count、PathLength、EaseType(衰减类型)、FloatUpdate、Hash、Init、Pause、Resume、Stop、StopByName、PunchPosition、PunchRotation、PunchScale、RectUpdate、ValueTo、Vector2Update、Vector3Update

More

Unity教程之-Unity3d人工智能确定性AI算法之追踪算法三

 

继续前两篇文章《Unity教程之-Unity人工智能确定性AI算法之追踪算法二》、《Unity教程之-Unity人工智能学习确定性AI算法之追踪算法(一 )》,本篇文章我们来学习下接下来就是要进行更为精准更智能的追踪。首先看下效果图

Unity3d人工智能确定性AI算法之追踪算法

在接下来的代码演示Demo中我重新设计了几个类,一个是PlayObject,这个类其实也没有什么新的东西,都是之前已经介绍过的,无非就是速度向量、位置以及移动控制等它的代码设计如下: More