zoukankan      html  css  js  c++  java
  • 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

    能够看一下。效果:

    參数设置





  • 相关阅读:
    去 抚仙湖 和 去 洱海 差不多
    开源项目 D++
    未来 的 科学家, 不仅 是 数学家, 也是 系统设计 大师
    出一道 智商题 : 证明 永动机 是否 能 设计出来 ?
    评论一下 “推倒数学大厦”的 一个 作业题
    用 无穷级数 的 思路 三等分角
    三等分角 化圆为方 可以 考虑 用 无穷级数 的 方式 来 实现
    CPU 应该 搞 0 级 Cache , 而不是 大寄存器
    关于 智商 (2)
    关于 智商
  • 原文地址:https://www.cnblogs.com/llguanli/p/7236377.html
Copyright © 2011-2022 走看看