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到底有什么区别,今天算是彻底弄明白了,官方文档说的太晦涩 ...
随机推荐
- C# 中编写函数式代码
http://www.dotnetcurry.com/csharp/1384/functional-programming-fsharp-for-csharp-developers 写给 C# 开发人 ...
- Jmeter使用_处理响应结果显示乱码
1. 添加BeanShell PostProcessor 输入prev.setDataEncoding("utf-8"); 目的是修改响应数据编码格式为utf-8,保存
- linux监测tomcat服务
原文链接:https://blog.csdn.net/qq_37936542/article/details/81086928 项目上线之后,tomcat服务器有时候会莫名其妙的挂掉,利用shell写 ...
- Mining Station on the Sea (hdu 2448 SPFA+KM)
Mining Station on the Sea Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Jav ...
- @Import注解
转自:https://blog.csdn.net/heyutao007/article/details/74994161 @Import注解就是之前xml配置中的import标签,可以用于依赖第三方包 ...
- easy ui 验证
$('#IdentityCertificate').validatebox({required:true}); $('#memberName').validatebox({required:true} ...
- Zookeeper源码用ant进行编译为eclipse工程--转载
原文地址:http://www.it165.net/os/html/201411/10142.html Zookeeper GitHub的下载地址是:https://github.com/apache ...
- CSS笔记 - fgm练习 2-10 - 提示框效果 (清除子元素浮动高度塌陷的影响)
CSS清除浮动方法参考: https://blog.csdn.net/promiseCao/article/details/52771856 <style> *{ margin: 0; p ...
- FZU《C语言程序综合设计》
一年前的玩意. 老是有人找我要..一年前写得这么搓都不敢拿出来.... 但是好多人要啊.....直接发blog,省得下次还要发压缩文件.. 就不要吐槽我代码烂了,我也觉得很烂,至少现在看来确实很烂.. ...
- Day1:用户交互与格式化输出
一.用户交互 1.input()方法 #!/usr/bin/env python # -*- coding:utf-8 -*- # Author:Hiuhung Wan username = inpu ...