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

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. my.宠物升级79级

    1.蚌仙子 74级半不到的时候,吃  月华露(500000经验的那种)  吃3个 正好 79级半 我记得 之前 是升满75级 再吃月华露 到79级的时候 经验溢出了.不突破还好,突破的话 宠物就升级了 ...

  2. epoll中坑人的地方再次学习

    https://blog.csdn.net/linuxheik/article/details/73294658

  3. IIS 配置asp.net 环境

    打开Internet信息服务管理器,在左侧点击“应用程序池”,下面将以asp.net v4.0 程序池为例 在中间的“ASP.NET V4.0”上右键“高级选项”,展开“进程模型”,找“标识”选项,然 ...

  4. Maven导入jar包

    可在该网址查找:http://search.maven.org/#search%7Cga%7C1%7Cjunit

  5. 《我在谷歌大脑见习机器学习的一年:Node.js创始人的尝试笔记》阅读笔记

    文章来源:https://www.toutiao.com/i6539751003690893828/?tt_from=weixin_moments&utm_campaign=client_sh ...

  6. java多线程通过管道流实现不同线程之间的通信

    java中的管道流(pipeStream)是一种特殊的流,用于在不同线程间直接传送数据.一个线程发送数据到输出管道,另外一个线程从输入管道中读取数据.通过使用管道,实现不同线程间的通信,而不必借助类似 ...

  7. 设置 text-align: center;line-height:height 居中无效

    1.设置文字水平居中 内联元素(行内元素)使用: text-align: center: 使用后文字仍然没有居中 解决方法:设置width:100%: 块元素使用: margin: 0 auto; 2 ...

  8. Xxy 的车厢调度

    有 一 个 火 车 站 , 铁 路 如 图 所 示 ,每辆火车从 A 驶入, 再从 B 方向驶出,同时它的车厢可以重新组合.假设 从 A 方向驶来的火车有 n 节(n<=1000) ,分别按照顺 ...

  9. 让你迅速了解redis

    (1)什么是redis? Redis 是一个基于内存的高性能key-value数据库. (2)Reids的特点 Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数 ...

  10. npm下载某个版本

    如果我想要引入的是Jquery的1.7.2版本,则输入npm intall jquery@1.7.2,那么npm包管理器就会帮助你下载jquery1.7.2的版本到你当前操作目录下的node_modu ...