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

    能够看一下。效果:

    參数设置





  • 相关阅读:
    iOS_文件上传进度条的实现思路-AFNettworking
    快手为什么成功
    Swift 3.1 的一些新特性
    字典类型的字符串转成字典
    phpmyadmin通过日志文件拿webshell
    计算机网络基础知识
    写一个php小脚本辅助渗透测试
    Zabbix exp编写
    sqlmap里如何添加字典
    过狗注入学习姿势分享2[投稿华盟网]
  • 原文地址:https://www.cnblogs.com/llguanli/p/7236377.html
Copyright © 2011-2022 走看看