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

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. vue-基于elementui自定义主题更换皮肤及自定义内容的皮肤跟换

    参考这篇博客https://blog.csdn.net/young_Emily/article/details/78591261做一遍,加上自己的一些理解 思路:通过自己上一篇博客https://ww ...

  2. JavaScript DOM基础总结

    上个月在进行百度三面时候,面试官提问JavaScript DOM方法,我回答的有点少,前面太关注JavaScript 兼容性,框架方面,JavaScript 原生DOM基础没有记牢,心中有点遗憾.下来 ...

  3. 工作采坑札记:2. Hadoop中MultipleInputs的使用陷阱

    1. 背景 近日在一个Hadoop项目中使用MultipleInputs增加多输入文件时,发现相同路径仅会加载一次,导致后续的统计任务严重失真.本博文旨在记录异常的排查及解决方案. 2. 情景重现 ( ...

  4. C#操作Excel报错:服务器出现意外情况。

    C#操作Excel表格时,如遇以下错误: 服务器出现意外情况.(异常来自 HRESULT:0x80010105(RPC_E_SERVERFAULT)) 解决方案: 打开你电脑中的Office-Exce ...

  5. 如何快速定位JVM中消耗CPU最多的线程?

    第一步.先找出Java的进程PID ps -ef | grep 进程名关键字 这里假设找到的PID是:12345   第二步.找出该进程内最消耗CPU的线程 top -Hp log4x R :11.7 ...

  6. AWS的redhat7中安装jdk8

    下载jdk8 wget https://download.oracle.com/otn-pub/java/jdk/8u191-b12/2787e4a523244c269598db4e85c51e0c/ ...

  7. 自定义HandlerMethodArgumentResolver参数解析器和源码分析

    在初学springmvc框架时,我就一直有一个疑问,为什么controller方法上竟然可以放这么多的参数,而且都能得到想要的对象,比如HttpServletRequest或HttpServletRe ...

  8. maven课程 项目管理利器-maven 3-2 maven自动建立目录骨架

    使用cmd创建maven目录的两种方式: 使用archetype插件 1 按照提示进行选择  步骤: a 进入指定目录 b mvn archetype:generate --创建项目目录 c ente ...

  9. React 内部属性与函数

    constructor 构造函数,在创建组件的时候调用一次. 例子: class TodoList extends React.Component { constructor(props, conte ...

  10. http-equiv和name的区别

    meta是用来在HTML文档中模拟HTTP协议的响应头报文.meta 标签用于网页的<head>与</head>中,meta 标签的用处很多.meta 的属性有两种:name和 ...