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:新 ...
随机推荐
- Velocity(1)——注释
Velocity的单行注释,使用## 多行注释使用#* cooments *#
- Undefined symbols “_OBJC_CLASS_$_XXX” 问题
解决方法是点击工程,在targets界面中找到Build Phases,根据提示信息“XXX”来判断缺少什么文件,一般如果缺少自定义的文件,XXX会是缺少的类名,那么就在Complie Sources ...
- 查看PostgreSQL版本,编译器版本号
[postgres@localhost bin]$ ./psql -h localhostpsql (9.4.5)Type "help" for help. postgres=# ...
- 20145207《Java程序设计》第三周学习总结
前言 24号回来的,书看的差不多了,博客一直没写,求老师原谅呀!!!!!哈哈哈哈.博客我从今天开始补,对着书,一天最多能弄个两篇毕竟写这个东西挺费心思德,当然我做事慢也有关系.但是我会尽快的.老实讲, ...
- HDU 4718 The LCIS on the Tree(树链剖分)
Problem Description For a sequence S1, S2, ... , SN, and a pair of integers (i, j), if 1 <= i < ...
- Android SDK 安卓失败 提示: “Failed to fetch URL…” 的错误提示
解决方法: 1. 打开Tools 选择 options 将 第一个复选框勾上. (尝试一下,如果还是失败,参考2) 2. 打开本地host 文件, 在最后一行添加 ...
- zw版【转发·台湾nvp系列Delphi例程】HALCON GenGridRegion
zw版[转发·台湾nvp系列Delphi例程]HALCON GenGridRegion unit Unit1;interfaceuses Windows, Messages, SysUtils, Va ...
- SQL的主键和外键约束(转)
SQL的主键和外键的作用: 外键取值规则:空值或参照的主键值. (1)插入非空值时,如果主键表中没有这个值,则不能插入. (2)更新时,不能改为主键表中没有的值. (3)删除主键表记录时,你可以在建外 ...
- svn权限控制
http://blog.csdn.net/clever101/article/details/8159105 [groups] #核心层开发组成员 core_dev = lg,zjc #扩展层开发组成 ...
- 160223、jquery中attr和prop的区别
在高版本的jquery引入prop方法后,什么时候该用prop?什么时候用attr?它们两个之间有什么区别?这些问题就出现了. 关于它们两个的区别,网上的答案很多.这里谈谈我的心得,我的心得很简单: ...