unity碰撞器和触发器的区别
例如玩王者荣耀时,使用英雄推搭时,到达塔攻击范围时,塔会自动的攻击英雄,而英雄到达塔下,可以使用英雄去攻击塔,上述的一系列情况我们在Unity中就可以使用触发器和碰撞器去实现上述的功能。
经典的跑酷类型游戏神庙逃亡是Unity开发的一款游戏,在玩耍过程中,当人物碰到下图中**类似金币的物体时,会自动吸收物体,相同类似的游戏场景还有很多很多,然而这些功能在Unity中可以使用碰撞器或者触发器实现。
那么到底什么是碰撞器或者触发器呢,它们又有什么特点实现需要什么条件?接下来我们来一一介绍:
在Unity中会经常发现很多游戏物体身上都有着下图所展示的组件,这个物体就是我们上述所说的碰撞器。
当我们在场景中创建基本游戏物体后,引擎会自动的为该物体加上Collider(碰撞器)组件,其主要功能是进行碰撞检测。对于规则的游戏物体可以使用引擎提供的碰撞器,对于一些大的场景,其碰撞网格可以由建模师提供。
使用碰撞器有一个特点就是,物体一般情况是不会穿透,就类似于我们行走在路上不小心和路人相撞,或者玩一些刺激的赛车游戏,两辆赛车相撞,这就是我们的碰撞检测在发生作用。而想要发生碰撞,必须得具备三种条件!
1:两个相碰撞的物体身上必须得有碰撞器,也就是Collider,2:其中一个物体身上必须具备刚体,3:两个物体需要发生相对运动。
只要满足了上述的条件,我们在灵活的使用代码就可以制作出我们想要的效果了。
上述中我们介绍了碰撞器到底是什么,发生碰撞的条件,以及一些使用的场景,接下来我们一起来看看触发器到底是什么!触发器在生活有很多例子,假设进入到一些门口时,当我们踏入到一定范围,门会自动打开,这其实就是触发器在现实生活中的例子,游戏中依然也是,例如下图中,人物走回家的时候会自动的恢复血量,这其实就是在使用触发器
触发器和碰撞器一样,如下图所示:
唯一的区别就是是否勾选了Is Trigger,勾选了之后就是一个触发器,触发器是可以穿透,而碰撞器不可以。
我看ORALCE,然后是这样理解的,
例如对一个表进行插入insert操作,在插入时触发一个触发器,如果是
事前触发:“before insert on 表名”,则可以在未插入前,对想插入的那一行“insert into 表名 values(a,b,c)”里的a,b,c进行操作,
例如把a换成f,“:new.a :=f ”,
":new"是插入前临时内存(用于insert update),保存着insert的记录,“:new.a”就引用了临时记录的a,“:new.a :=f ”就是把f放进这个a里面,然后才执行临时内存写入表,这时实际插入到表的是(f,b,c)了。
事后触发:因为有时有两个表是相关联的,如果你删除了第一个表,第二个表的某写记录的找不到关联,就变得没意义了,所以为了实现事务的完整性,在删除第一表的某记录后,还要同时删除第二个表的对应记录,这时就用到事后触发了“after delete on 表1”,在对表1进行删除操作时“delete from 表1 where 表1.id='001';”,
同时删除表2的记录"delete from 表2 where 表2.id=:old.id",
":old"是操作后临时内存(用于delete,update),它保存了进行删除操作后的记录,这里相当于删除表2中“表1.id=表2.id”的记录。
一楼朋友说的事后触发不能撤消好象不对的,事后触发就是为了保证事务的完整性,只要rollback回滚操作,表1和表2的删除操作都会被撤消的。
鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com
图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!