IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> Unity3D-刚体与触发器组件 -> 正文阅读

[游戏开发]Unity3D-刚体与触发器组件

部分内容由千峰教育(莫新宇)听课笔记总结

Properties?

Is Trigger? ?If enabled, this Collider is used for triggering events, and is ignored by the physics engine.

Material? ?Reference to the Physics Material that determines how this Collider interacts with others.

Center? ?The position of the Collider in the object's local space.

Size? ?The size of the Collider in the X, Y, Z directions.

?碰撞器

碰撞体组件的作用

1.用一个包围盒(box,sphere, capsule)将一个模型包裹起来,该包围盒来秒速碰撞范围

2.配合刚体组件,实现物理碰撞效果

Collider组件

碰撞盒编辑? ?Edit Collider

是否设置为触发器

添加物理材质

碰撞体大小中心设置

Collider种类

Box

Sphere

Capsule

Mesh 使用时减少顶点和面

?绿色包围盒

编辑Collider碰撞体

?

实际效果:

?游戏范例:空气墙的做法

?Material: 物理材质、摩擦力和弹力

碰撞体由三角形组成

isTrigger? ? ? is the collider a trigger?

Agular Drag拐弯时受到的阻力

Is Kinematic 受到施加的力,不会发生移动

Interpolate 插值,增加动画帧数

Collision detection

Discrete/Continuous/Continuous Dynamic

刚体的一些参数

?

?常用方法

AddForce(Vector3)? ?添加一个力

AddExplosionForce? ?添加爆炸力 参数列表:爆炸力大小Flost、 爆炸点Vector3、 爆炸半径Flost

注意:执行力添加爆炸力的方法,才能产生爆炸,不执行方法,即便距离爆炸点很近,也不会有任何爆炸效果

AddForcePosition? ?在一个点上添加一个力

AddRelativeForce? ?添加相对力

AddRelativeTorque? ?添加相对力矩

using UnityEngine;

public class RigidbodyClass : MonoBehaviour {
? ? private Rigidbody rig;
?? ?// Use this for initialization
?? ?void Start () {
? ? ? ? rig = GetComponent<Rigidbody>();
?? ?}
?? ?
?? ?// Update is called once per frame
?? ?void Update () {
? ? ? ? Debug.Log(rig.velocity);
? ? ? ? if (Input.GetKey(KeyCode.Space)) { rig.velocity = Vector3.up * 20; }
? ? ? ? transform.position += Vector3.right * Time.deltaTime * 1;
?? ?}
}

using UnityEngine;

public class RigidbodyClass : MonoBehaviour {
? ? private Rigidbody rig;
?? ?// Use this for initialization
?? ?void Start () {
? ? ? ? rig = GetComponent<Rigidbody>();
?? ?}
?? ?
?? ?// Update is called once per frame
?? ?void Update () {
? ? ? ? //向前施加一个力
? ? ? ? if (Input.GetKey(KeyCode.F)) { rig.AddForce(Vector3.forward*100); }
? ? ? ? //施加一个爆炸力
? ? ? ? if (Input.GetKey(KeyCode.E)) { rig.AddExplosionForce(100,transform.position,3); }
? ? }
}

?碰撞检测

碰撞产生的条件

两物体都有Collider

至少有一个带有RigidBody

两物体保持相对运动

回调方法

OnCollisionEnter(Collision other)? ?碰撞开始一瞬间时调用一次

OnCollisionStay(Collision other)? ?碰撞过程中相对运动时持续调用,每帧一次

OnCollisionExit(Collision other)? ?碰撞分离一瞬间调用

回调方法参数

collider? ?当前物体所碰撞到的游戏对象(游戏对象的碰撞体组件)

contacts[]? ?所有碰撞点的信息(normal, point(碰撞点的坐标)) Vector3? contacts[0]表示第一个接触的点,其他依此类推

触发事件

触发事件产生的条件

两物体都有碰撞体

至少有一个带有刚体

两碰撞体至少有一个是触发器

设置触发器

将碰撞体组件中的isTrigger属性构选

回调函数

OnTriggerEnter(Collider other)? ?进入触发器的时候调用一次

OnTriggerStay(Collider other)? ?处于某个触发器之中的时候持续调用,每帧一次

OnTriggerExit(Collider other)? ?退出触发器的时候调用一次

范例代码

using UnityEngine;

public class CollisionClass : MonoBehaviour {
? ? private void OnCollisionEnter(Collision other)
? ? {
? ? ? ? Debug.Log("碰撞开始了:"+other.collider);
? ? ? ? //使碰撞物体变色
? ? ? ? other.collider.GetComponent<MeshRenderer>().material.color = Color.green;
? ? }
? ? private void OnCollisionStay(Collision other)
? ? {
? ? ? ? Debug.Log("碰撞保持:" + other.collider);
? ? }
? ? private void OnCollisionExit(Collision other)
? ? {
? ? ? ? Debug.Log("碰撞结束了:" + other.collider);
? ? ? ? //使碰撞物体变色
? ? ? ? other.collider.GetComponent<MeshRenderer>().material.color = Color.red;
? ? }
}

碰撞点的位置

可以选择点的形状及颜色

范例代码

using UnityEngine;

public class CollisionPosition : MonoBehaviour {
? ? private void OnCollisionEnter(Collision other)
? ? {
? ? ? ? Debug.Log("碰撞点个数:"+other.contacts.Length);
? ? ? ? for (int i = 0; i < other.contacts.Length; i++) {
? ? ? ? ? ? Vector3 tempPos = other.contacts[i].point;
? ? ? ? ? ? GameObject tempObj = new GameObject("Point");
? ? ? ? ? ? tempObj.transform.position = tempPos;
? ? ? ? }
? ? }
}

mesh renderer即使隐藏亦可触发碰撞器?

碰撞体和触发器二者只可选择其一,由isTrigger控制

摄像机图标隐藏

using UnityEngine;

public class cubeTrigger : MonoBehaviour {
? ? //触发开始时调用一次
? ? private void OnTriggerEnter(Collider other)
? ? {
? ? ? ? Debug.Log("触发开始"+other);
? ? ? ? other.GetComponent<MeshRenderer>().material.color = Color.red;
? ? }
? ? //触发过程中每帧调用一次
? ? private void OnTriggerStay(Collider other)
? ? {
? ? ? ? Debug.Log("触发中" + other);
? ? }
? ? //触发结束时调用一次
? ? private void OnTriggerExit(Collider other)
? ? {
? ? ? ? Debug.Log("触发结束" + other);
? ? ? ? other.GetComponent<MeshRenderer>().material.color = Color.blue;
? ? }
}

?

?

?

?

?

?

?

?


?

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2021-10-07 14:07:54  更:2021-10-07 14:08:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/28 2:47:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码