之前对这两个的用法不是特别清楚,重新学习了下,再做个测试看看效果如何;

1.新建一个场景test

2.添加一个cube,点击Inspector面板会发现系统已经默认添加了Box collisder组件。为了增加速度,需添加一个RigidBody,同时去除重力。

3.再添加一个Capsule。

材质用于cube和capsule,以便观察;

5.新建一个角色的控制脚本PlayerController.CS,完成后挂载到Cube上

 /***
*
* 作用:控制脚本的移动和旋转
*
*
*
*/
using System.Collections;
using System.Collections.Generic;
using UnityEngine; public class PlayerController : MonoBehaviour {
//移动速度
public float FloMovePower=1.0f;
//旋转速度
public float FloRotatePower=1.0f;
void Update () {
//获取横向偏移值(按键盘A和D时,得到-1到1之间的浮点型值)
float floHorizontal=Input.GetAxis("Horizontal");
//获取纵向偏移值(按键盘W和S时,得到-1到1之间的浮点型值)
float floVertical=Input.GetAxis("Vertical");
//给角色增加位置的速度
this.GetComponent<Rigidbody> ().velocity = this.transform.forward * floVertical*FloMovePower;
//给角色增加旋转的速度
this.GetComponent<Rigidbody> ().angularVelocity = this.transform.up * floHorizontal * FloRotatePower;
}
}

6.再新建一个脚本CollisionTest.CS用于碰撞检测,完成后挂载到Capsule上。

 /***
*
*
* 用于碰撞检测
*
*
*/
using System.Collections;
using System.Collections.Generic;
using UnityEngine; public class CollisionTest : MonoBehaviour {
void OnCollisionEnter(Collision col)
{
print("OnCollisionEnter");
print("Collision's name is "+col.gameObject.name);
}
void OnCollisionStay(Collision col)
{
print("OnCollisionStay");
print("Collision's name is "+col.gameObject.name);
}
void OnCollisionExit(Collision col)
{
print("OnCollisionExit");
print("Collision's name is "+col.gameObject.name);
} }

7.开始运行,移动cube到capsule,看下print结果

可以看出,立方体碰到胶囊体发生碰撞检测,但是两者没法穿透。

8.同理,为测试穿透效果,对胶囊体的碰撞器添加一个触发器(将属性面板的Is Tigger打钩)

再运行刚才的代码发现,OnCollsionEnter已经失效。再增加触发器的检测代码,修改后的CollisionTest.CS如下:

 /***
*
*
* 用于碰撞检测
*
*
*/
using System.Collections;
using System.Collections.Generic;
using UnityEngine; public class CollisionTest : MonoBehaviour {
void OnCollisionEnter(Collision col)
{
print("OnCollisionEnter");
print("Collision's name is "+col.gameObject.name);
}
void OnCollisionStay(Collision col)
{
print("OnCollisionStay");
print("Collision's name is "+col.gameObject.name);
}
void OnCollisionExit(Collision col)
{
print("OnCollisionExit");
print("Collision's name is "+col.gameObject.name);
}
void OnTriggerEnter(Collider col)
{
print("OnTriggerEnter");
print("Collider's name is "+col.name);
}
}

再点击运行,结果发现两个游戏对象可以发生穿透,控制台也打印出结果;

以上一点点学习经验,还要继续努力,加油!

OnCollisionEnter和OnTriggerEnter的更多相关文章

  1. 【Unity3d游戏开发】unity3D OnTriggerEnter和OnCollisionEnter的一点个人心得(转载)

    此文为转载,因为最近在做U3D,有一些概念弄得不是很清楚,看到这篇博客讲的不错,就转载过来了,方便自己随时查看. ------------------------------------------- ...

  2. [转帖]unity3D OnTriggerEnter和OnCollisionEnter的一点个人心得(主要讲区别)

    觉得这个讲的挺好的,就转过来了:) 太抽象的理论总是让人眼花缭乱,所以我这里以例证为主. 1,测试OnTriggerEnter和OnCollisionEnter的区别 测试:如果两个物体A,B 两者都 ...

  3. unity3D OnTriggerEnter和OnCollisionEnter的区别

    1,测试OnTriggerEnter和OnCollisionEnter的区别 测试:如果两个物体A,B 两者都有碰撞体collider(Box Collider,Sphere Collider,Cap ...

  4. 【Unity 3D】碰撞检测

    在unity3d中,能检测碰撞发生的方式有两种, 碰撞器 触发器 概念:     (一)碰撞器是一群组件,它包含了很多种类,比如:Box Collider,Capsule Collider等,这些碰撞 ...

  5. 漫话Unity(二)

    三.Unity编辑器介绍 Unity是一个商业级的3d游戏引擎.一个引擎的专业程度事实上并非体如今它多么牛b 的次世代效果,说实话那些效果即便你会用也不敢用.由于没有哪个手机是次世代的. 游戏引擎的专 ...

  6. unity physics相关

    1. With careful positioning and sizing, compound colliders can often approximate the shape of an obj ...

  7. Unity-2D

    Unity-2D 1.Unity中的2D模式: 1)游戏在二维上展示 启用 2D 模式时将会设置正交(即无透视)视图:摄像机沿 Z 轴观察,而 Y 轴向上增加.因此可以轻松可视化场景并放置 2D 对象 ...

  8. 【日常记录】【unity3d】 OnTriggerEnter 和 OnCollisionEnter (2D) 的区别

    问题:两个物体A,B 两者都有碰撞体 collider(Box Collider,Sphere Collider,Capsule Collider等)当两物体相撞时,会进入 OnTriggerEnte ...

  9. Unity 碰撞检测 OnTriggerEnter 入门

    当我们需要检测两个物体A和B发生碰撞的时候,必须要满足一下条件 1:A和B必须有碰撞边界,你可以点开一个A,在属性窗口点击AddComponent,在physis(物理)目录下看到以下这些 ,根据形状 ...

随机推荐

  1. 转 OGG-01224 TCP/IP error 111 (Connection refused); retries exceeded.

    https://blog.csdn.net/yabingshi_tech/article/details/40620351 在源端启动goldengate pump进程,状态起初是running,后来 ...

  2. 关于i++与++i的学习讨论!

    先谈容易的知识点 区别两个 1. i++ 返回原来的值,++i 返回加1后的值. 2. i++ 不能作为左值,而++i 可以. 重点说下第二点.首先解释下什么是左值 左值是对应内存中有确定存储地址的对 ...

  3. SQLiteOpenHelper 升级onUpgrade 的调用问题

    onUpgrade 的调用次数问题 比如说现在数据库版本是1,然后此时我修改代码定数据库版本为5. 那么系统在调用onUpgrade的时候是只调用一次(oldVersion == 1, newVers ...

  4. spark RDD运算机制

  5. shell代码模板

    批量ssh登录机器 #site_search_hosts 10.4.16.205,10.4.20.87,10.4.20.88,10.4.20.89,10.4.20.90,10.4.20.92,10.4 ...

  6. HTML_DOM学习

    HTML DOM 树 通过ID/类名/标号可以定位HTML元素,然后可用JS改变这些元素的样式内容,并对DOM事件作出反应 对HTML事件的响应: onmousedown 和onmouseup/onc ...

  7. PlayMaker 状态机FSM重用

    注意:playmaker做模板的时候不应该有拖入的东西,这样保存模版后会报错,提示容易丢失东西.

  8. python xml dom

    http://www.cnblogs.com/coser/archive/2012/01/10/2318298.html

  9. 通过rsync+inotify实现数据的实时备份(多台备份机)

    在前面的博文中,我讲到过利用rsync实现数据的镜像和备份,但是要实现数据的实时备份,单独靠rsync还不能实现,本文就讲述下如何实现数据的实时备份. 一.rsync的优点与不足  与传统的cp.ta ...

  10. Linux小工具:文件上传ftp服务器

    工作期间,每次将文件上传至ftp服务器时,均需要手工输入ip.用户名.密码等,因此,考虑编写脚本完成文件的上传任务.具体的脚本sync.sh如下: #!/bin/bash source ~/.bash ...