Browse Source

室内-2层泵房模型调整,添加测试上下楼梯代码

develop
杨栋梁 11 months ago
parent
commit
fed3f7e621
  1. 6082
      Assets/LongZhiMeng/Prefab/ShiNei/nei-2.prefab
  2. 125
      Assets/Scripts/ANet/PathFinding.cs
  3. 11
      Assets/Scripts/ANet/PathFinding.cs.meta
  4. 1662
      Assets/Scripts/ANet/Prefabs/PathParent.prefab
  5. 7
      Assets/Scripts/ANet/Prefabs/PathParent.prefab.meta
  6. 6
      Assets/Scripts/Main/Core/PersonnelLocation/LocationSimulator.cs

6082
Assets/LongZhiMeng/Prefab/ShiNei/nei-2.prefab

File diff suppressed because it is too large Load Diff

125
Assets/Scripts/ANet/PathFinding.cs

@ -0,0 +1,125 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
public class PathFinding : MonoBehaviour
{
public Transform PathParent;
public List<Transform> PathList = new List<Transform>();
public int NowIndex = 0;
// Start is called before the first frame update
void Start()
{
foreach (Transform item in PathParent)
{
if (item != PathParent)
PathList.Add(item);
}
}
// Update is called once per frame
void Update()
{
if (Input.GetKeyDown(KeyCode.T))
{
if (NowIndex == 0)
{
LocationData data = new LocationData();
data.targetNo = 102;
data.xAxis = PathList[0].transform.position.x;
data.yAxis = PathList[0].transform.position.y;
data.zAxis = PathList[0].transform.position.z;
data.stations = PathList[0].name;
var agent = GetComponent<LocationSimulator>().CreateAgent(data);
agent.enabled = false;
agent.GetComponent<NavMeshAgent>().enabled = false;
GetComponent<LocationSimulator>().agentControllers.Add(data.targetNo, agent);
Vector3 pos = ConversionTransform(data);
GetComponent<LocationSimulator>().agentControllers[data.targetNo].transform.position = pos;
}
else if (NowIndex < PathList.Count)
{
LocationData data = new LocationData();
data.targetNo = 102;
data.stations = PathList[NowIndex].name;
data.xAxis = PathList[NowIndex].transform.position.x;
data.yAxis = PathList[NowIndex].transform.position.y;
data.zAxis = PathList[NowIndex].transform.position.z;
Vector3 pos = ConversionTransform(data);
GetComponent<LocationSimulator>().agentControllers[data.targetNo].transform.position = pos;
}
else
{
NowIndex = 0;
}
NowIndex++;
}
}
/// <summary>
/// 根据数据转换到Unity坐标
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
public Vector3 ConversionTransform(LocationData data)
{
//判断数据被检测到的区域
string St1 = "1";//楼梯入口基站
string St2 = "2";//楼梯间基站
string St3 = "3";//楼梯底层基站
//纠正坐标
Vector3 p1 = new Vector3(-15.48f, -17.7f, 41.83f);//1.7
Vector3 p2 = new Vector3(-15.48f, -19.3f, 37.48f);//1.4
Vector3 p3 = new Vector3(-17.47f, -19.3f, 37.48f);//1.4
Vector3 p4 = new Vector3(-17.47f, -21.1f, 42.42f);//1.7
//换算最终位置
//-4地面高度-17.7f
float y = -17.7f;
var pos = new Vector3((float)data.xAxis, y, (float)data.zAxis);
if (data.stations.Contains(St3) && !data.stations.Contains(St2))
{ //-5地面高度-21.1f
pos.y = -21.1f;
}
else if (data.stations.Contains(St1) && data.stations.Contains(St2))
{ //-4到-5楼梯上半段
pos.y = SetY(pos);
}
else if (data.stations.Contains(St2) && data.stations.Contains(St3))
{ //-4到-5楼梯下半段
pos.y = SetY(pos);
}
else if (data.stations.Contains(St2) && !data.stations.Contains(St1) && !data.stations.Contains(St3))
{
//-4到-5楼梯间过度
pos.y = -19.3f;
}
return pos;
}
/// <summary>
/// 确保角色始终在地面上
/// </summary>
/// <param name="position"></param>
/// <returns></returns>
public float SetY(Vector3 position)
{
RaycastHit hit;
var hitlist = Physics.RaycastAll(position, Vector3.down, 100f, ~(1 << (LayerMask.NameToLayer("Defaut") | LayerMask.NameToLayer("Hidden"))));
if (hitlist.Length > 0)
{
foreach (var item in hitlist)
{
if (item.transform.gameObject.layer == LayerMask.NameToLayer("Stair"))
return item.point.y;
}
}
if (Physics.Raycast(position, Vector3.down, out hit, 100f, 15))
{
// 如果射线击中地面,设置Y轴为地面高度
return hit.point.y;
}
return 0f;
}
}

11
Assets/Scripts/ANet/PathFinding.cs.meta

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 9eb03895b8354fe40ade44f0c4c7c7ea
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

1662
Assets/Scripts/ANet/Prefabs/PathParent.prefab

File diff suppressed because it is too large Load Diff

7
Assets/Scripts/ANet/Prefabs/PathParent.prefab.meta

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 0f5285374fc29a041af3d80b47ad201b
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

6
Assets/Scripts/Main/Core/PersonnelLocation/LocationSimulator.cs

@ -7,7 +7,7 @@ using UnityEngine;
public class LocationSimulator : MonoBehaviour
{
//定位人员
private Dictionary<long, AgentController> agentControllers = new Dictionary<long, AgentController>();
public Dictionary<long, AgentController> agentControllers = new Dictionary<long, AgentController>();
//历史数据
private List<PositionData> historyData = new List<PositionData>();
//是否保存历史数据
@ -272,7 +272,7 @@ public class LocationSimulator : MonoBehaviour
/// <param name="targetNo"></param>
/// <param name="position"></param>
/// <returns></returns>
private AgentController CreateAgent(LocationData data)
public AgentController CreateAgent(LocationData data)
{
if (characterCount > 4)
@ -287,7 +287,7 @@ public class LocationSimulator : MonoBehaviour
controller.targetNo = data.targetNo;
controller.ShowStatus(data.createdTime, data.targetNo);
controller.SetToNvMesh(pos);
SetActive(obj, data);
//SetActive(obj, data);
characterCount++;
return controller;

Loading…
Cancel
Save