博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Unity胶囊体的碰撞检测实现
阅读量:6635 次
发布时间:2019-06-25

本文共 2472 字,大约阅读时间需要 8 分钟。

 

可选是否打开矩阵变换,支持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);    }}
View Code

 

绘制胶囊体使用DebugExtension插件,在资源商店可以免费下载

转载于:https://www.cnblogs.com/hont/p/5340044.html

你可能感兴趣的文章
网页的标题前加小图标,只需一句代码
查看>>
Oracle数据库体系结构(7) 表空间管理1
查看>>
三步骤实现ASP.NET(C#)项目中添加谷歌(Google Map)地图
查看>>
序列加密
查看>>
给自己的鼓励
查看>>
模板系列(一) 模板的模板参数
查看>>
NOI前训练记录
查看>>
01、基础语法
查看>>
AWD比赛笔记
查看>>
数据库编程规范
查看>>
C# DataTable 转换为 实体类对象方法
查看>>
序言 Preface
查看>>
逆序数
查看>>
spoj 2211. Mars Map
查看>>
PHP 开发环境的搭建和使用03-- 安装mySql
查看>>
apache 的虚拟主机和 web访问时序图
查看>>
DB处理大量数据处理日志报错问题
查看>>
左侧菜单
查看>>
python使用pwd和grp操作unix用户及用户组
查看>>
Block介绍(二)内存管理与其他特性
查看>>