OnCollisionEnter和OnTriggerEnter
之前对这两个的用法不是特别清楚,重新学习了下,再做个测试看看效果如何;
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的更多相关文章
- 【Unity3d游戏开发】unity3D OnTriggerEnter和OnCollisionEnter的一点个人心得(转载)
此文为转载,因为最近在做U3D,有一些概念弄得不是很清楚,看到这篇博客讲的不错,就转载过来了,方便自己随时查看. ------------------------------------------- ...
- [转帖]unity3D OnTriggerEnter和OnCollisionEnter的一点个人心得(主要讲区别)
觉得这个讲的挺好的,就转过来了:) 太抽象的理论总是让人眼花缭乱,所以我这里以例证为主. 1,测试OnTriggerEnter和OnCollisionEnter的区别 测试:如果两个物体A,B 两者都 ...
- unity3D OnTriggerEnter和OnCollisionEnter的区别
1,测试OnTriggerEnter和OnCollisionEnter的区别 测试:如果两个物体A,B 两者都有碰撞体collider(Box Collider,Sphere Collider,Cap ...
- 【Unity 3D】碰撞检测
在unity3d中,能检测碰撞发生的方式有两种, 碰撞器 触发器 概念: (一)碰撞器是一群组件,它包含了很多种类,比如:Box Collider,Capsule Collider等,这些碰撞 ...
- 漫话Unity(二)
三.Unity编辑器介绍 Unity是一个商业级的3d游戏引擎.一个引擎的专业程度事实上并非体如今它多么牛b 的次世代效果,说实话那些效果即便你会用也不敢用.由于没有哪个手机是次世代的. 游戏引擎的专 ...
- unity physics相关
1. With careful positioning and sizing, compound colliders can often approximate the shape of an obj ...
- Unity-2D
Unity-2D 1.Unity中的2D模式: 1)游戏在二维上展示 启用 2D 模式时将会设置正交(即无透视)视图:摄像机沿 Z 轴观察,而 Y 轴向上增加.因此可以轻松可视化场景并放置 2D 对象 ...
- 【日常记录】【unity3d】 OnTriggerEnter 和 OnCollisionEnter (2D) 的区别
问题:两个物体A,B 两者都有碰撞体 collider(Box Collider,Sphere Collider,Capsule Collider等)当两物体相撞时,会进入 OnTriggerEnte ...
- Unity 碰撞检测 OnTriggerEnter 入门
当我们需要检测两个物体A和B发生碰撞的时候,必须要满足一下条件 1:A和B必须有碰撞边界,你可以点开一个A,在属性窗口点击AddComponent,在physis(物理)目录下看到以下这些 ,根据形状 ...
随机推荐
- linux中mysql,mongodb,redis,hbase数据库操作
.实验内容与完成情况:(实验具体步骤和实验截图说明) (一) MySQL 数据库操作 学生表 Student Name English Math Computer zhangsan lisi 根据上面 ...
- java——sleep()和wait()
1.所属类不同sleep()属于Thread而wait()属于Object 2.sleep()没有释放当前锁,wait()则释放了当前锁 3.sleep(0)的目的是使当前线程释放cpu,其他线程可以 ...
- JVM架构_XmnXmsXmxXss有什么区别:转
1.XmnXmsXmxXss有什么区别 首先,Xmn.Xms.Xmx.Xss都是JVM对内存的配置参数,我们可以根据不同需要区修改这些参数,以达到运行程序的最好效果. 了解jvm内存管理看这里:jvm ...
- maya2018安装失败如何卸载重装
AUTODESK系列软件着实令人头疼,安装失败之后不能完全卸载!!!(比如maya,cad,3dsmax等).有时手动删除注册表重装之后还是会出现各种问题,每个版本的C++Runtime和.NET f ...
- (转) HTTP & HTTPS网络协议重点总结(基于SSL/TLS的握手、TCP/IP协议基础、加密学)
HTTP & HTTPS网络协议重点总结(基于SSL/TLS的握手.TCP/IP协议基础.加密学) 原文:http://blog.csdn.net/itermeng/article/detai ...
- GOPS 2018全球运维大会上海站 参会感悟梳理
今天遇到很多优秀的讲师.业界的大伽,很开心 现在把get到的信息梳理一下:(1)想解决性能问题,一定要在缓存上下功夫:[nginx上有好多文章可以做,真是博大精深呢<深入理解Nginx:模块开发 ...
- LayUI&前端问题汇总
1.用JS获取地址栏参数的方法 采用正则表达式获取地址栏参数:( 强烈推荐,既实用又方便!) //通过data给form赋值,根据name赋给value $.fn.setForm = function ...
- Oracle Functions转成Ms-Sql procedure
最近公司的一些Oracle项目要转到Ms_sql上,在把Oracle Functions改成MS-Sql的Procedure时,遇到了翻译的问题. 罗列出这些问题: 一.Oracle 基本类型 ora ...
- vue 钩子函数
beforeRouteEnter 方法名称: beforeRouteEnter 调用时机: 切换路由之前,调用该方法时,页面还没有切换 next调用时机: activated 之后 注意事项: thi ...
- Java Knowledge series 2
JVM Analysis & Design The object-oriented paradigm is a new and different way of thingking about ...