今天遇到一个问题,就是怎样处理一些动态的障碍物。

NavMesh是能够躲避静态的障碍物。NavMeshObstacle的作用就是动态添加障碍。

可是有个问题,NavMeshObstacle是圆,连椭圆都不行,所以。仅仅好写一个附属脚本。用圆拼成矩形,就能够了。

using UnityEngine;
using System.Collections; public class NavMeshObstacleHelper : MonoBehaviour { //coordinate
public float X = 0f;
public float Y = 0f;
public float Z = 0f; public float Length = 0f;
public float Width = 0f;
public float Height = 0f;
public float Diameter = 0f; private int lengthCount = 0;
private float lengthStep = 0f;
private int widthCount = 0;
private float widthStep = 0f; private GameObject obstacleArray = null;
private GameObject obstacle = null; void Awake()
{
obstacleArray = new GameObject ();
obstacleArray.name = "NavMeshObstacleArray"; widthCount = (int)(Width / Diameter);
lengthCount = (int) (Length / Diameter); if (lengthCount > 1)
{
lengthStep = (Length - Diameter * lengthCount) / (lengthCount - 1);
} if (widthCount > 1)
{
widthStep = (Width - Diameter * widthCount) / (widthCount - 1);
} }
// Use this for initialization
void Start () {
initObstacleArray ();
} private void initObstacleArray()
{
Vector3 tempPos = new Vector3 (X, Y, Z); for (int i = 0; i < lengthCount; i++)
{
for (int j = 0; j < widthCount; j++)
{
obstacle = new GameObject ();
obstacle.transform.position = tempPos;
obstacle.transform.parent = obstacleArray.transform; obstacle.AddComponent <NavMeshObstacle>();
NavMeshObstacle navMeshObstacle = obstacle.GetComponent<NavMeshObstacle> ();
if (navMeshObstacle)
{
obstacle.GetComponent<NavMeshObstacle> ().radius = Diameter / 2;
obstacle.GetComponent<NavMeshObstacle> ().height = Height;
}
tempPos = new Vector3 (tempPos.x, tempPos.y, tempPos.z + Diameter + widthStep);
}
tempPos = new Vector3 (tempPos.x + Diameter + lengthStep, tempPos.y, Z);
} obstacleArray.transform.parent = this.transform;
obstacleArray.transform.localRotation = Quaternion.identity;
obstacleArray.transform.position = this.transform.position; } // Update is called once per frame
void Update () { }
}

思路来源自http://www.cnblogs.com/sifenkesi/p/4004215.html

能够看一下。效果:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGlodW96aGlsaW5nMDEwMQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

參数设置

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGlodW96aGlsaW5nMDEwMQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

NavMesh动态碰撞的更多相关文章

  1. NavMesh系统动态碰撞的探讨

    Unity3D提供的NavMesh系统可以方便的解决游戏的寻路问题,但是该系统有一个比较让人不理解的问题: NavMesh导航时会忽略Physics系统本身的碰撞,也就是说NavMeshAgent在移 ...

  2. Unity3D --对撞机/碰撞器 介绍

    碰撞器一般都用作触发器而用,刚体一般用作真实碰撞. 静态对撞机:一个对象有对撞机组件,没有刚体组件. 这种情况在场景中的静态物体应用较多,比如墙体,房屋等静止不动的物体. 物理引擎假设静态对撞机是不会 ...

  3. Unity-Rigidbody碰撞穿透

    首先,说说碰撞的条件:1.rigidbody(刚体),一般用在主动移动的物体上,比如角色.2.collider,碰撞器,一般用于受力物体上,比如障碍块. 发生概率即触发方式: 1.刚体速度足够快,被撞 ...

  4. Unity3D之碰撞体,刚体

    一 概念介绍 刚体 Rigidbody(刚体)组件可使游戏对象在物理系统的控制下来运动,刚体可接受外力与扭矩力用来保证游戏对象像在真实世界中那样进行运动.任何游戏对象只有添加了刚体组件才能受到重力的影 ...

  5. 《Unity3D/2D游戏开发从0到1(第二版本)》 书稿完结总结

    前几天,个人著作<Unity3D/2D游戏开发从0到1(第二版)>经过七八个月的技术准备以及近3个月的日夜编写,在十一长假后终于完稿.今天抽出一点时间来,给广大热心小伙伴们汇报一下书籍概况 ...

  6. Unity3d笔试题大全

    1.       [C#语言基础]请简述拆箱和装箱. 答: 装箱操作: 值类型隐式转换为object类型或由此值类型实现的任何接口类型的过程. 1.在堆中开辟内存空间. 2.将值类型的数据复制到堆中. ...

  7. CritterAI与Recast Navigation寻路

    版权声明:本文为博主吴欣伟原创文章,未经博主允许不得转载. 前言 这篇文章写于去年,由于工作需要,故写出这个研究文档,发现网上有关此寻路库的中文资源十分稀少,故发布出来与诸位共享交流,如文中有不对之处 ...

  8. U3D physics总结

    物理系统基于collider, 没有collider的物体不会发生任何主动和被动的物理交互,也不会产生trigger相关消息. 当且仅当A和B都有碰撞体时,两者才有可能发生交互,才有可能产生trigg ...

  9. 论Collision Detection的作用

    今天有空就仔细研究了一下Collision Detection的问题,以前总是弄不明白Continuous和Continuous Dynamic到底有什么区别,今天算是彻底弄明白了,官方文档说的太晦涩 ...

随机推荐

  1. Day6上午解题

    预计分数:100+100+30=230 实际分数:90+25+10=125 T1少判了一种情况,T2的贪心是错的,T3被卡了... T1 模拟水题,注意20的可以用3个5块的找 #include< ...

  2. Jmeter使用_处理响应结果显示乱码

    1. 添加BeanShell PostProcessor 输入prev.setDataEncoding("utf-8"); 目的是修改响应数据编码格式为utf-8,保存

  3. Docker+SVN

    原文:Docker+SVN mkdir /cnex/svndocker pull garethflowers/svn-server docker run -d --name svn-server  - ...

  4. 【Codeforces Round #429 (Div. 2) A】Generous Kefa

    [Link]:http://codeforces.com/contest/841/problem/A [Description] [Solution] 模拟,贪心,每个朋友尽量地多给气球. [Numb ...

  5. git还原本地提交的某个历史记录

    转载地址:http://jingyan.baidu.com/article/e4511cf33479812b855eaf67.html 1.以还原index2.html文件为例,打开index2.ht ...

  6. 洛谷 P2692 覆盖

    P2692 覆盖 题目背景 WSR的学校有B个男生和G个女生都来到一个巨大的操场上扫地. 题目描述 操场可以看成是N 行M 列的方格矩阵,如下图(1)是一个4 行5 列的方格矩阵.每个男生负责打扫一些 ...

  7. 计算两个String 类型的时间相关几个月

    /** * 返回两个时间段相隔几个月 * @param date1 * @param date2 * @return * @throws ParseException * @throws ParseE ...

  8. Java Web学习总结(15)——JSP指令

    一.JSP指令简介 JSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分. 在JSP 2.0规范中共定义了三个指令: pa ...

  9. iOS_01_C语言简介

    1.先学C语言的原因 * oc基于C. * oc 跟 C的思想和语法很多地方不太一样,而且OC能和C混用. * C 是所有编程语言中的经典,很多高级语言都是从C语言中衍生出来的,比如 C++,C#.O ...

  10. (win7/8/10)鼠标右键添加按下SHIFT键时弹出带管理员权限的“在此处打开命令窗口”

    Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\Directory\Background\shell\runas]@="@sh ...