unity学习笔记2

[转]自http://blog.csdn.net/tianyao9hen/article/details/53141141

对于新手学习unity碰撞讲的还是比较清楚的

OnTriggerEnter和OnCollisionEnter的触发条件是不同的,需要在设计的过程中加以关注。

触发的共同要求

碰撞的两个物体A,B,都要有碰撞体(collider),Box Collider,Sphere Collider,Capsule Collider等的任意一种

当A,B都添加刚体(Rigidbody)时

  1. OnCollisionEnter方法 
    A和Bx相互碰撞时,无论是谁碰撞的谁,两者都能触发OnCollisionEnter方法,前提是两者都没有勾选isTrigger。
  2. OnTriggerEnter方法 
    A或者B中有一个勾选isTrigger或者两者都勾选isTrigger后,A和B都可以触发OnTriggerEnter方法,但是不可进入OnCollisionEnter方法。

注意:

  • OnCollisionEnter方法必须是在两个碰撞物体都不勾选isTrigger的前提下才能进入,反之只要勾选一个isTrigger那么就能进入OnTriggerEnter方法。
  • OnCollisionEnter和OnTriggerEnter是冲突的不能同时存在的。

当A,B有一个添加了刚体(Rigidbody)时

  1. OnCollisionEnter方法

    • 若A添加了刚体,B没有添加刚体,A去碰撞B,则A会被弹开,B不会运动,此时A、B都会触发OnCollisionEnter方法。
    • 若A添加了刚体,B没有添加刚体,B去碰撞A,不会发生碰撞效果,此时A和B都不会触发OnCollisionEnter方法。
  2. OnTriggerEnter方法
    • 只要A和B中有一个添加了刚体,无论谁碰撞谁,两者都会触发 OnTriggerEnter方法

总结:

  • OnCollisionEnter方法要求碰撞的发起方必须拥有刚体,而被碰撞方有没有刚体并不重要。OnTriggerEnter方法则对此没有要求,只需要碰撞双方有一个具有刚体即可触发。即刚体是一个判断是否实现碰撞的是与否的标志。
  • 刚体对于系统的开销是很大的,所以在使用刚体时,根据可能发生的碰撞触发事件,适当的减少刚体,是一个减少资源消耗的好办法。 比如地面就可以不设置刚体,因为地面是永远不动的,把人物设置刚体就可以实现真实的物理碰撞效果了。

需要让被碰撞者触发OnCollisionEnter的办法

我们可以用一些方法来规避OnCollisionEnter的要求,达到同样的效果。

    • 例如: 
      A添加了刚体,B没有刚体,但是需要B碰撞A同时触发碰撞效果。此时碰撞发起者是B,而B没有刚体,是无法触发OnCollisionEnter方法的。
    • 解决方法: 
      我们可以在B的下面创建一个子物体C(可以是空物体),并给C添加collider,勾选isTrigger。 
      将C的collider大小设置的和B的collider一样大,并且位置重叠。 
      使用OnTriggerEnter方法,达到同样的目的。A在和B碰撞的同时,也与C碰撞,会触发A与C之间的OnTriggerEnter方法。
时间: 2024-12-25 08:14:30

unity学习笔记2的相关文章

Unity学习笔记之五为Prefab添加材质

本次笔记中,我们将利用unity来创建并使用材质,把材质添加到我们的Prefab中去. 这一系列教程以及素材均参考自人人素材翻译组出品的翻译教程<Unity游戏引擎的基础入门视频教程>,下载链接附在第二篇学习笔记中. 继续上次笔记中所记录的东西,在Project视图中,ImportedAssets-Meshes-Materials下我们可以看到一个没有纹理的材质球,这个材质是跟随我们的3d Max模型来的默认材质.因为这里我们要添加自己的材质,所以我们直接把这个材质球删除. 删除后,我们看到本

Unity学习笔记之四完善Prefab并添加First Person Controller

好久没学东西并用博客记录了,这个年过的很懒散,慢慢临近开学了,也要提前适应一下,写写东西,这样开学才能更好的进入状态呀-- 本次笔记中,我们将来雕琢一个更加完善的Prefab,并添加一个第一人称角色在场景中. 这一系列教程以及素材均参考自人人素材翻译组出品的翻译教程<Unity游戏引擎的基础入门视频教程>.下载地址附在第二篇笔记中. 上一篇教程我们创建了一个Prefab,在最后我利用四个Prefab通多顶点捕捉建立一个简易的隧道.这只是为了示意Prefab的便捷性,下面我们先把这个隧道删除到只

unity学习笔记一 受到伤害时的颜色变化

最近在跟着视频学做,很简单的demo 就是这个了,看过的人都知道,官方的.刚刚四级的我只能找点国内重制的看了 现在想做的效果就是受到伤害时会变红,让后慢慢平滑过渡到白色 在update方法中如下 void Update() { //鼠标左击模拟受到伤害 if( Input.GetMouseButtonDown(0)) { TakeDamage(30f); } //颜色变白 bodyRenderer.material.color =Color.Lerp(bodyRenderer.material.

unity学习笔记

monoDevelop乱码问题 这个问题坑了爹很久... unity自带的monodevelop的项目视图在我电脑(win7)上一直乱码,项目名称,项目结构树,以及文件名称全部显示成方框,今天调了下字体,把默认字体改成Consolas,无心插柳解决了这个问题... 见图片 关于Unity的一些概念和语法 最近一直在利用空闲时间看Unity的API,看的比较细但是实际操作的比较少,昨天有一整天的空闲时间,再加上有了一个还不错的想法,想要把它实现出来,因为用到的模型并不复杂,不需要用到建模软件,也不

Digital Tutors - Introduction to Scripting Shaders in Unity 学习笔记

1. Overview 2. Understanding Shader definition:code that define what the material can do in the environment classification: Surface Shader--容易编写,受光照等因素影响 Vertex and Fragment Shader(Pixels)--非常灵活,代码量大,写得好能提高渲染效率和降低开销 Fixed Function Shader--固定管线shader

Unity学习笔记:预制件Prefab的创建和使用

在制作游戏过程中,会需要通过代码创建多个一模一样的GameObject,比如射击游戏中的子弹,杂兵等各种. 在Unity中一般叫做Prefab预制件,起到模板的作用,可以快速的复制出相同的GameObject. 创建Prefab预制件 一般都会建立独立的目录,用于存放预制件. 第一种方法 在场景中添加一个GameObject,完成相关的设置.然后将其拖拽到Assets/Prefabs中 第二种方法 在Assets/Prefabs中,新建空的预制件 然后将场景中的GameObject拖到这个上面

Unity 学习笔记2

一:创建粒子效果:在Hierarchy面板中,Create->Particle System在Assets文件夹内右键->Import Package->Particle导入粒子效果包在Hierarchy面板中选中Particle System后,可在Inspectors面板中修改粒子系统的相关参数,来达到不同的粒子效果: Max Particle:最大生成粒子数量Prewarm(预热):勾选后,在载入场景之前粒子系统就可以预先生成Start Lifetime:表示每个粒子可持续的时间,

Unity学习笔记(2)——关于Dropdown的学习

今天组长让我写一个界面,其中用到了下拉条,我的印象还停留在以前的NGUI有现成的组件,但是uGUI没有的那阶段,组长跟我说uGUI现在也有了,研究了一下,发现real方便哦,今天就来简单说一下用法吧. Dropdow 用法也就是点开会有一个下拉列表,选中的可以显示.那么第一个问题来了 就是怎么在下拉列表里填上我们所需要的选项,显示我们需要的个数首先呢,遇到一个没有用过的组件不要紧张,可以先看看面板上都有些什么属性,一般来说Inspect界面上的都是可以获取的,有些事可以改的有些的不能改的,如上图

Unity学习笔记 - UI System(一)

转载请注明出处: EnigmaJJ http://www.cnblogs.com/twjcnblog/p/5850648.html 术语 Canvas是Unity的原生组件,Unity的渲染系统使用Canvas来提供绘制在游戏世界中的分层几何结构. Canvas的职责是将他所包含的几何体组合成batches,生成合适的渲染命令并将这些命令发送给Unity的图形系统.所有这些都是由C++代码完成的,被称为rebatch或batch build.当Canvas被标记为需要rebatch时,该Canv