NavMesh动态碰撞
今天遇到一个问题,就是怎样处理一些动态的障碍物。
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动态碰撞的更多相关文章
- NavMesh系统动态碰撞的探讨
Unity3D提供的NavMesh系统可以方便的解决游戏的寻路问题,但是该系统有一个比较让人不理解的问题: NavMesh导航时会忽略Physics系统本身的碰撞,也就是说NavMeshAgent在移 ...
- Unity3D --对撞机/碰撞器 介绍
碰撞器一般都用作触发器而用,刚体一般用作真实碰撞. 静态对撞机:一个对象有对撞机组件,没有刚体组件. 这种情况在场景中的静态物体应用较多,比如墙体,房屋等静止不动的物体. 物理引擎假设静态对撞机是不会 ...
- Unity-Rigidbody碰撞穿透
首先,说说碰撞的条件:1.rigidbody(刚体),一般用在主动移动的物体上,比如角色.2.collider,碰撞器,一般用于受力物体上,比如障碍块. 发生概率即触发方式: 1.刚体速度足够快,被撞 ...
- Unity3D之碰撞体,刚体
一 概念介绍 刚体 Rigidbody(刚体)组件可使游戏对象在物理系统的控制下来运动,刚体可接受外力与扭矩力用来保证游戏对象像在真实世界中那样进行运动.任何游戏对象只有添加了刚体组件才能受到重力的影 ...
- 《Unity3D/2D游戏开发从0到1(第二版本)》 书稿完结总结
前几天,个人著作<Unity3D/2D游戏开发从0到1(第二版)>经过七八个月的技术准备以及近3个月的日夜编写,在十一长假后终于完稿.今天抽出一点时间来,给广大热心小伙伴们汇报一下书籍概况 ...
- Unity3d笔试题大全
1. [C#语言基础]请简述拆箱和装箱. 答: 装箱操作: 值类型隐式转换为object类型或由此值类型实现的任何接口类型的过程. 1.在堆中开辟内存空间. 2.将值类型的数据复制到堆中. ...
- CritterAI与Recast Navigation寻路
版权声明:本文为博主吴欣伟原创文章,未经博主允许不得转载. 前言 这篇文章写于去年,由于工作需要,故写出这个研究文档,发现网上有关此寻路库的中文资源十分稀少,故发布出来与诸位共享交流,如文中有不对之处 ...
- U3D physics总结
物理系统基于collider, 没有collider的物体不会发生任何主动和被动的物理交互,也不会产生trigger相关消息. 当且仅当A和B都有碰撞体时,两者才有可能发生交互,才有可能产生trigg ...
- 论Collision Detection的作用
今天有空就仔细研究了一下Collision Detection的问题,以前总是弄不明白Continuous和Continuous Dynamic到底有什么区别,今天算是彻底弄明白了,官方文档说的太晦涩 ...
随机推荐
- 用硬件卡克隆Linux集群
650) this.width=650;" onclick="window.open("http://blog.51cto.com/viewpic.php?refimg= ...
- 交叉编译工具链bash: gcc:no such file or directory
在进行交叉编译工具链安装时,有三种方法: 1.源码编译,手动安装 2.二进制可执行文件直接安装 3.直接解压工具链,手动修改环境变量 为了方便,我们多用方法3进行安装.但是问题来了,你的工具链制作时有 ...
- BZOJ2142: 礼物(拓展lucas)
Description 一年一度的圣诞节快要来到了.每年的圣诞节小E都会收到许多礼物,当然他也会送出许多礼物.不同的人物在小E 心目中的重要性不同,在小E心中分量越重的人,收到的礼物会越多.小E从商店 ...
- http压测工具wrk
安装 wrk支持大多数类UNIX系统,不支持windows.需要操作系统支持LuaJIT和OpenSSL,不过不用担心,大多数类Unix系统都支持.安装wrk非常简单,只要从github上下载wrk源 ...
- MySQL 使用mysqld_multi部署单机多实例详细过程
,如何使用多实例 由于多实例中,各个实例的资源都是不share的,所以要合理分配好各个实例的内存.磁盘等资源,避免out of memery或则 full disk的情况出现.
- HTML基础第八讲---序列卷标
转自:https://i.cnblogs.com/posts?categoryid=1121494 什么叫做序列卷标?其实,这是一个大家都蛮熟悉的东西,只是在网页中换个名称来称呼罢了,序列卷标的功能在 ...
- css实现水波纹效果
1. HTML 代码: <div class="example"> <div class="dot"></div> < ...
- Docker---(4)Docker 部署spring web项目
原文:Docker---(4)Docker 部署spring web项目 版权声明:欢迎转载,请标明出处,如有问题,欢迎指正!谢谢!微信:w1186355422 https://blog.csdn.n ...
- Mongodb总结6-数据库启动、停止、备份等命令
#启动Mongodb默认启动,需要在/data/db,Windows下对应的目录是Mongod.exe所在磁盘分区的根目录,例如Mongodb存放在D:/Mongodb,那么对应的路径就是D:/dat ...
- HTML高级标签(3)————表单的应用
在HTML开发中,标签的种类和数量非常多,不可能说每一种都研究透.非常多能够用CSS来控制的标签,我们基本没有必要在上面浪费时间.所以,我们仅仅要掌握在HTML开发中比較经常使用的标签就全然能够了. ...