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到底有什么区别,今天算是彻底弄明白了,官方文档说的太晦涩 ...
随机推荐
- 8.NPM 使用介绍
转自:http://www.runoob.com/nodejs/nodejs-tutorial.html NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,常见的使 ...
- 7.Node.js 创建第一个应用
转自:http://www.runoob.com/nodejs/nodejs-tutorial.html 如果我们使用PHP来编写后端的代码时,需要Apache 或者 Nginx 的HTTP 服务器, ...
- 为您的Office文档加把锁-ADRMS的安装
为您的Office文档加把锁-ADRMS的安装 如今不少企业越来越重视自己KM(知识管理系统)的建立对于KM的建立实施虽然可以有效地解决企业在知识管理上的问题对于一些具有商业利益关系的机密文件(例如: ...
- 我的第一个JS组件-跨浏览器JS调试工具
武汉九天鸟-p2p网贷系统开发-互联网应用软件开发 公司官网:http://jiutianniao.com 社交问答:http://ask.jiutianniao.com 最近,在看公司一个JS大牛 ...
- 怎样将OpenStack部署到Hadoop
随着信息时代的快速发展,大数据技术和私有云环境都非常实用;只是,假设将两者结合在一起.企业会获得巨大的利润.虽然结合两者会让环境变得更复杂.企业仍然能够看到将 OpenStack 私有云和 Apach ...
- Netty推荐addListener回调异步执行
说明 Netty推荐使用addListener的方式来回调异步执行的结果,这种方式优于Future.get,能够更精确地把握异步执行结束的时间. 错误理解使用addListener的方式 代码如下: ...
- jquery中prop()和attr()的使用
jquery1.6+出现的prop()方法. • 对于HTML元素本身就带有的固有属性,在处理时,使用prop方法. • 对于HTML元素我们自己自定义的DOM属性,在处理时,使用attr方法. • ...
- 【习题 6-11 UVA - 10410】Tree Reconstruction
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 可以先确定当前这棵子树的dfs序的范围. 然后第一个元素肯定是这棵子树的根节点. 那么只要在这棵子树的范围里面枚举节点. 看看有没有 ...
- 解决Keystore was tampered with, or password was incorrect
使用签名文件keystore查看生成的数字签名中报错解决 Keystore was tampered with, or password was incorrect 这是由于android规定自己定义 ...
- [TypeScript@2.5] Omit catch error block if not needed
From TypeScript@2.5, you can omit catch error block. Before: try { throw new Error('whatever'); } ca ...