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

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. Linux 添加用户(user),组(Group)以及权限(Permission)

    1. 添加用户 sudo adduser UserName 异常: sudo adduser --force-badname <username> 之后为这个用户添加其他辅助信息 切换用户 ...

  2. 记录CentOS7.X版本下安装MySQL5.7数据库

    记录CentOS7.X版本下安装MySQL5.7数据库  设置rpm下载目录在/opt目录下新建一个目录存放mysql cd /opt sudo mkdir mysql12  下载MySQL的源 wg ...

  3. Mybatis学习笔记17 - sql标签和include标签

    示例代码: 接口定义: package com.mybatis.dao; import com.mybatis.bean.Employee; import org.apache.ibatis.anno ...

  4. 性能测试工具Jmeter02-安装配置

    安装配置 1.安装配置jdk 2.Jmeter下载地址:http://mirror.bit.edu.cn/apache/jmeter/binaries/ 下载后,解压文件到任意目录,避免在一个有空格的 ...

  5. LeanTouch控制移动

    Lean_Touch控制移动 using UnityEngine; using System.Collections; using System.Collections.Generic; using ...

  6. Hadoop2.X分布式集群部署

    本博文集群搭建没有实现Hadoop HA,详细文档在后续给出,本次只是先给出大概逻辑思路. (一)hadoop2.x版本下载及安装 Hadoop 版本选择目前主要基于三个厂商(国外)如下所示: 基于A ...

  7. 《深入浅出Node.js》学习笔记(一)

    看了朴灵前辈的node.js系列文章,很开阔视野,虽然能力有限还是有很多不懂,但是还是希望能写下笔记,初步对node.js有点了解. 一.概念 Node.js不是JS应用.而是JS运行平台 Node. ...

  8. [PHP]对象数组和普通数组总结

    1.碰到前台将JSON格式数据传递到服务器后台,经php的json_decode函数转换成的数组由于为对象数组,php程序无法对数据进行正常处理的情况,为此需要开发一个PHP回调函数(objarray ...

  9. android finish和system.exit(0)的区别

    finish是Activity的类,仅仅针对Activity,当调用finish()时,只是将活动推向后台,并没有立即释放内存,活动的资源并没有被清理:当调用System.exit(0)时,杀死了整个 ...

  10. Newtonsoft.Json解析json字符串和写json字符串

    写: StringWriter sw = new StringWriter(); JsonWriter writer = new JsonWriter(sw); //如果报错则使用JsonWriter ...