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

    能够看一下。效果:

    參数设置





  • 相关阅读:
    jquery内容过滤器
    jquery的each()
    jquery表单过滤器
    jquery评分星星
    UVa 1595 Symmetry (set && math)
    UVa 1592 Database (map)
    Codeforces 886E Maximum Element 组合数学 + dp
    Codeforces 725E Too Much Money (看题解)
    可持久化字典树
    Codeforces 660F Bear and Bowling 4 斜率优化 (看题解)
  • 原文地址:https://www.cnblogs.com/llguanli/p/7236377.html
Copyright © 2011-2022 走看看