unity 怎么判断碰撞的物体

 我来答
shenjieshun
推荐于2016-11-18 · 超过13用户采纳过TA的回答
知道答主
回答量:38
采纳率:87%
帮助的人:18.4万
展开全部
Collider.OnCollisionEnter 进入碰撞

function OnCollisionEnter (collisionInfo : Collision) : void
Description描述
OnCollisionEnter is called when this collider/rigidbody has begun touching another 
rigidbody/collider.
当collider/rigidbody开始触动另一个rigidbody/collider时OnCollisionEnter被调用。
In contrast to OnTriggerEnter, OnCollisionEnter is passed the Collision class and not a Collider. The 
Collision class contains information 
about contact points, impact velocity etc. If you don't use collisionInfo in the 
function, leave out the collisionInfo parameter as this avoids unneccessary 
calculations. Note that collision events are only sent if one of the colliders 
also has a non-kinematic rigidbody attached.
相比OnTriggerEnter,OnCollisionEnter传递Collision类而不是Collider。Collision类包含接触点,碰撞速度等信息。在这个函数如果你不使用collisionInfo,删去collisionInfo参数以避免不必要的计算。注意,如果碰撞器附加一个非动力学刚体,也仅发送碰撞事件。
C# 
JavaScript 
using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
void OnCollisionEnter(Collision collision) {
foreach (ContactPoint contact in collision.contacts) {
Debug.DrawRay(contact.point, contact.normal, Color.white);
}
if (collision.relativeVelocity.magnitude > 2)
audio.Play();

}
}
function OnCollisionEnter(collision : Collision) {
// Debug-draw all contact points and normals
//调试绘制全部的接触点和法线
for (var contact : ContactPoint in collision.contacts) {
Debug.DrawRay(contact.point, contact.normal, Color.white);
}

// Play a sound if the coliding objects had a big impact.
//如果碰撞物体有一个更大的撞击就播放声音
if (collision.relativeVelocity.magnitude > 2)
audio.Play();
}
另一个例子:
C# 
JavaScript 
using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
public Transform explosionPrefab;
void OnCollisionEnter(Collision collision) {
ContactPoint contact = collision.contacts[0];
Quaternion rot = Quaternion.FromToRotation(Vector3.up, contact.normal);
Vector3 pos = contact.point;
Instantiate(explosionPrefab, pos, rot);
Destroy(gameObject);
}
}
// A grenade
//一个手榴弹
// - instantiates a explosion prefab when hitting a surface
//当撞击表面时实例化一个爆炸预设
// - then destroys itself
//然后销毁它们
var explosionPrefab : Transform;

function OnCollisionEnter(collision : Collision) {
// Rotate the object so that the y-axis faces along the normal of the surface
//旋转物体,以便y轴方向沿着表面的法线
var contact : ContactPoint = collision.contacts[0];
var rot : Quaternion = Quaternion.FromToRotation(Vector3.up, contact.normal);
var pos : Vector3 = contact.point;
Instantiate(explosionPrefab, pos, rot);
// Destroy the projectile
//销毁物体
Destroy (gameObject);
}
上海华然企业咨询
2024-10-28 广告
在测试大模型时,可以提出这样一个刁钻问题来评估其综合理解与推理能力:“假设上海华然企业咨询有限公司正计划进入一个全新的国际市场,但目标市场的文化习俗、法律法规及商业环境均与我们熟知的截然不同。请在不直接参考任何外部数据的情况下,构想一套初步... 点击进入详情页
本回答由上海华然企业咨询提供
奉昂拜巧云
2019-10-27 · TA获得超过4150个赞
知道大有可为答主
回答量:3116
采纳率:25%
帮助的人:192万
展开全部
上面这个老外用的是
OnControllerColliderHit(),这个是用于角色碰撞的,物体如果附加了Charactor
Controller(Unity自带的用于角色控制的脚本)则使用这个函数检测碰撞,这是不需要加刚体的。一般的刚体之间碰撞使用OnCollisionEnter(),范围触发用OnTriggerEnter(),如果你是让两个CUBE碰撞,请确保其中一个附加了RigidBody,然后这样写(我用C#):
void
OnCollisionEnter(Collision
collision)
{
Debug.Log("You
touch
me");
}
collision是个变量,通过它可以获得你所碰撞的目标的属性以及碰撞点信息和相对速度,如:
collision.collider.某个组件或脚本。
void
OnCollisionEnter(Collision
collision)
{
if(collision.collider.tag=="enemy")//tag是物体的标签,相当于物体的类别名称。在每一个物体的组件栏(也就是加脚本的那个区域)的最上面可以找到,默认的是UnTagged,也就是没有标签,你找找,然后点击会出现一个下拉列表,默认的已有几个Tag,你也可以加自定义的,点击下拉列表最下方的Add
Tag就可以加Tag,最后选择一个Tag作为物体的名称就可以了。
{
Destroy(collision.collider.gameObject);//如果检测到对方是敌人,则消灭对方。
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式