Unity胶囊体的碰撞检测实现

可选是否打开矩阵变换,支持xyz三种朝向
using UnityEngine;
using System.Collections;
using System.Collections.Generic; public class CapsuleDetection : MonoBehaviour
{
public enum Axis { X, Y, Z }
public Transform comparePointTransform;
public float radius;
public float height;
public Axis axis;
public bool enableMatrix; bool ExecuteDetection()
{
if (comparePointTransform == null) return false; var result = false;
var axisIndex = (int)axis; var comparePoint = comparePointTransform.position;
var pointA = Vector3.zero;
var pointB = Vector3.zero; if (enableMatrix)
{
comparePoint = transform.InverseTransformPoint(comparePoint);
pointA[axisIndex] -= height - radius;
pointB[axisIndex] += height - radius;
}
else
{
pointA = transform.position;
pointB = transform.position; pointA[axisIndex] -= height - radius;
pointB[axisIndex] += height - radius;
} if (comparePoint[axisIndex] < pointA[axisIndex])
{
if (Vector3.Distance(comparePoint, pointA) <= radius)
{
result = true;
}
} else if (comparePoint[axisIndex] > pointB[axisIndex])
{
if (Vector3.Distance(comparePoint, pointB) <= radius)
{
result = true;
}
}
else
{
var tmpPos = enableMatrix ? Vector3.zero : transform.position;
tmpPos[axisIndex] = comparePoint[axisIndex]; if (Vector3.Distance(comparePoint, tmpPos) <= radius)
{
result = true;
}
} return result;
} void OnDrawGizmos()
{
var color = Color.blue; if (ExecuteDetection())
{
color = Color.red;
} var axisIndex = (int)axis;
var pos1 = Vector3.zero;
var pos2 = Vector3.zero; if (enableMatrix)
{
Gizmos.matrix = transform.localToWorldMatrix;
pos1[axisIndex] -= height;
pos2[axisIndex] += height;
}
else
{
pos1 = transform.position;
pos2 = transform.position; pos1[axisIndex] -= height;
pos2[axisIndex] += height;
} DebugExtension.DrawCapsule(pos1, pos2, color, radius);
}
}
绘制胶囊体使用DebugExtension插件,在资源商店可以免费下载
Unity胶囊体的碰撞检测实现的更多相关文章
- UE4.11新特性:胶囊体阴影
官方介绍 虚幻引擎现在支持非常柔滑的间接阴影,由代表角色的胶囊体来进行投影. 通常,在受间接光照时,并不会产生阴影,除非是屏幕空间环境遮罩.间接投影需要做的非常柔滑,因为间接光照是来自很多不同的方向, ...
- [Unity 3D] Unity 3D 里的碰撞检测
Unity 3D里两个碰撞体之间发生碰撞可以用OnCollision族函数和OnTrigger族函数来获知和处理.Unity官方给出了两张可发生碰撞的组合表: Collision detection ...
- Kinect+unity 实现体感格斗闯关小游戏
文章目录 项目地址 1 项目概况 1.1 项目简介 1.2 项目目的 1.3 主要技术 2 设计 2.1 基本概念 2.2 框架 2.3 算法 2.4 模型 2.5 调查问卷 3 实现 3.1 技术难 ...
- 【Unity入门】碰撞检测与触发检测
版权声明:本文为博主原创文章,转载请注明出处. 在Unity里面,游戏物体的碰撞我们可以通过刚体组件(Rigidbody)和碰撞器组件(Collider)来进行检测.首先在场景里面添加一个Plane面 ...
- Unity基础知识学习笔记二
1,object Instantiate(object original,Vector3 position,Quaternion rotation) 克隆原始物体,并返回克隆物体. ...
- 关于Unity中ARPG游戏人物移动(专题十一)
ARPG:动作型角色扮演类游戏 大多数的ARPG游戏都是使用摇杆操作,以第三人称摄像机的方式来跟随主角,实际上人物只走八个方向,上,下,左,右,左上,左下,右下,右上 控制角色移动的思路1: 在ARP ...
- 【Unity】11.2 刚体(Rigidbody)
分类:Unity.C#.VS2015 创建日期:2016-05-02 一.简介 Rigidbody(刚体)组件可使游戏对象在物理系统的控制下来运动,刚体可接受外力与扭矩力,使游戏对象像在真实世界中那样 ...
- 【Unity】11.1 角色控制器 (Character Controller)
分类:Unity.C#.VS2015 创建日期:2016-05-02 一.简介 角色控制器(Character Controller)主要用于对第三人称或第一人称游戏主角的控制.如果要创建类人角色,可 ...
- 【Unity】2.2 Unity编辑器中的常用菜单项
分类:Unity.C#.VS2015 创建日期:2016-03-26 Unity 5.3.4编辑器共提供了7个主菜单项,这一节主要学习其中的常用项. 一.File 1.基本功能 New Scene:新 ...
随机推荐
- Iterator和ListIterator主要区别(转)
Iterator和ListIterator主要区别有: 一.ListIterator有add()方法,可以向List中添加对象,而Iterator不能. 二.ListIterator和Iterator ...
- js功能汇总
请编写一个JavaScript 函数toRGB,它的作用是转换CSS中常用的颜色编码. 要求: 1 alert(toRGB("#0000FF")); // 输出 rgb(0, 0, ...
- SQL order 排序
select * from emp;
- zoj The 12th Zhejiang Provincial Collegiate Programming Contest Demacia of the Ancients
http://acm.zju.edu.cn/onlinejudge/showContestProblem.do?problemId=5504 The 12th Zhejiang Provincial ...
- spring da-y02-go1
使用构造器实例化bean: springday02:(同样导入5个基本jar包)1.复制xml文件到ioc包下2.B类,实现无参构造器3.A类,B是它的成员变量,实现无参和set/get方法4.修改x ...
- apache高负载性能调优
先阅读apache配置优化建议如下,再对相关参数进行调整,观察服务器状况.Apache配置优化建议:进入/usr/local/apache2/conf/extra 目录下Apache优化,经过上述操作 ...
- AJax 学习笔记二(onreadystatechange的作用)
AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...
- 夺命雷公狗ThinkPHP项目之----企业网站13之文章列表页的实现(主要是分页的实现)
列表页这个其实是比较简单的一个,直接遍历除数据即可: public function lists(){ //$mod = M("Article")->select(); // ...
- HTML5的自定义属性data-* 的用法解析
人们总喜欢往HTML标签上添加自定义属性来存储和操作数据.但这样做的问题是,你不知道将来会不会有其它脚本把你的自定义属性给重置掉,此外,你这样做也会导致html语法上不符合Html规范,以及一些其它副 ...
- MyEcplise中关于部署文件不成功的问题
MyEclipse 点击 部署 按钮 无效 正常情况下,当我们点击MyEclipse任务栏上的部署按钮时,会弹出项目部署框,如下图: 但我们有时也会遇到点击部署按钮怎么也弹不出项目部署框的 ...