(第十章)Unity3D-脚本的碰撞与触发
来源:互联网 发布:windows update卡在35 编辑:程序博客网 时间:2024/06/07 00:28
我们在游戏里经常会看到,某两个物体发生碰撞之后总会出现一些相应的反应,例如一颗子弹发射后,如果射中目标,目标就消失。而这些反应都是有程序员敲代码敲出来的,那么我们在Unity3D里要怎么实现这些功能呢,很简单,Unity3D为我们提供了很多方便的碰撞触发事件。
Collider.OnTriggerEnter 进入触发器
当碰撞器other进入触发器时OnTriggerEnter被调用。
这个消息是发送给触动触发器的碰撞器和刚体(或如果没有刚体的碰撞器)。
注意:假如一个碰撞物体同时带有一个刚体属性那么只发送这个触发事件。需要勾选isTrigger
Collider.OnCollisionEnter 进入碰撞
当collider/rigidbody开始触动另一个rigidbody/collider时OnCollisionEnter被调用.
相比OnTriggerEnter,OnCollisionEnter传递Collision类而不是Collider。Collision类包含接触点,碰撞速度等信息。
在这个函数如果你不使用collisionInfo,删去collisionInfo参数以避免不必要的计算。
注意:如果碰撞器附加一个非动力学刚体,也仅发送碰撞事件。
注意:点了isTrigger相当于Collider没用了,rigidbody是基于boxCollider的,没碰撞自然就穿过去了 ,使用OnCollisionEnter时物体不能勾选isTrigger,然而OnTriggerEnter需要勾选
Collider.OnCollisionExit 退出碰撞
* 当 collider/rigidbody停止触动另一个 rigidbody/collider时,OnCollisionExit被调用
* 相比OnTriggerExit,OnCollisionExit传递Collision类而不是Collider。Collision类包含接触点,碰撞速度等信息。
* 在这个函数如果你不使用collisionInfo,删去collisionInfo参数以避免不必要的计算。注意,如果碰撞器附加一个非动力学刚体,也仅发送碰撞事件。
注意:isTrigger不能勾选
这里列出的只有Collider对于的触发器,当然还有MonoBehaviour里面的成员,名字都跟Collider一样,这里也不一个一个列举了,具体请看脚本文档.
好了介绍了这些,当然是要来使用的,那我们来看看怎么使用。
我们在我们Game中创建一些物体我们把他们当做敌人Cube,接着再创建一个shape当做玩家。当然也可以用别的来代替,博主只是图个方便- _-!!.如图
接着我们开始写脚本,这里用c#写,当然也可以用js来写,都一样的。
void OnTriggerEnter(Collider other) { Destroy(other.gameObject); }里面的参数就是获得碰撞物的结构。
void OnCollisionEnter(Collision collision){<span style="font-family: Arial, Helvetica, sans-serif;"></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="white-space:pre"></span>Destroy(</span><span style="font-family: Arial, Helvetica, sans-serif;">collision</span><span style="font-family: Arial, Helvetica, sans-serif;">.gameObject);</span>
<span style="font-family: Arial, Helvetica, sans-serif;">}</span>
玩家移动代码
void Update () {if (Input.GetKey(KeyCode.W)){ transform.Translate(new Vector3(0, 0, -0.4f));} if (Input.GetKey(KeyCode.S)) { transform.Translate(new Vector3(0, 0, 0.4f)); } if (Input.GetKey(KeyCode.A)) { transform.Translate(new Vector3(-0.4f, 0, 0.0f)); } if (Input.GetKey(KeyCode.D)) { transform.Translate(new Vector3(0.4f, 0, 0.0f)); } }
}
- (第十章)Unity3D-脚本的碰撞与触发
- Unity3D【碰撞与触发】
- unity碰撞脚本不触发的情况
- Unity3d 物体碰撞检测前提条件(OnTrigger触发条件)
- Unity3d 物理碰撞de那点事(不是触发)
- Unity 碰撞与触发
- 碰撞与触发事件
- Unity3d碰撞检测中碰撞器与触发器的区别
- Unity3d碰撞检测中碰撞器与触发器的区别
- Unity3d碰撞检测中碰撞器与触发器的区别
- Unity3d碰撞检测中碰撞器与触发器的区别
- Unity3d碰撞检测中碰撞器与触发器的区别
- Unity3d碰撞检测中碰撞器与触发器的区别
- Unity3d碰撞检测中碰撞器与触发器的区别
- Unity3d碰撞检测中碰撞器与触发器的区别
- Unity3d碰撞检测中碰撞器与触发器的区别
- Unity3d碰撞检测中碰撞器与触发器的区别
- 碰撞触发的区别
- 编程求三角形
- 第十周项目1--getchar()字符
- VmWare联网
- VMware 连网
- 在终端运行程序后如何退出
- (第十章)Unity3D-脚本的碰撞与触发
- httpd: Could not reliably determine the server's fully qualified domain name, using 192.168.1.229 fo
- 如何放松身体和压力
- ContentProvider: insert返回值
- THE FASTEST C++ IMPLEMENTATION FOR ORIGINAL DPM — SOURCE CODE DOWNLOAD - BUG Fixed
- Unity3D学习笔记——layer
- C++ 硬件信息 获取网卡MAC地址
- 【AppCan 开发者】 生活中的坚持与改变
- C语言中的数组