KopMap/Assets/Scripts/MonoKopSceneObjTest.cs
2025-06-16 17:47:07 +08:00

75 lines
3.0 KiB
C#

using System.Collections;
using System.IO;
using MindPowerSdk;
using UnityEditor;
using UnityEngine;
namespace Assets.Sandbox.Scripts
{
public class MonoKopSceneObjTest : MonoBehaviour
{
public string obj_file = @"D:\项目\海盗王\138原版一键端\海盗王Online\map\hell5.obj";
public MonoKopTest monoKopTest;
void Start()
{
CSceneObjSet sceneObjSet = new CSceneObjSet();
sceneObjSet.LoadBin("Assets/Resources/sceneobjinfo.bin");
SceneObjFile sceneObjFile = new SceneObjFile();
sceneObjFile.Load(obj_file);
for (int y = 0; y < sceneObjFile.FileHeader.SectionCntY; y++)
{
for (int x = 0; x < sceneObjFile.FileHeader.SectionCntX; x++)
{
var list = sceneObjFile.objInfos[x, y];
if (list is null) continue;
foreach (var sceneObjInfo in list)
{
if (sceneObjInfo.GetTypeId() == 1)
continue;
int id = sceneObjInfo.GetID();
CSceneObjInfo modeInfo = sceneObjSet.Get(id);
Vector3 pos = new Vector3(sceneObjInfo.X / 100f, sceneObjInfo.HeightOff / 100f,
sceneObjInfo.Y / 100f * -1f);
float mapHeight = monoKopTest.map.GetHeight(pos.x, (sceneObjInfo.Y / 100f));
pos.y += mapHeight;
//Quaternion rot = Quaternion.AngleAxis(sceneObjInfo.YawAngle, Vector3.up);
string modePath = "Assets/Resources/Model/Scene/" +
Path.GetFileNameWithoutExtension(modeInfo.szDataName) + ".fbx";
if (!File.Exists(modePath))
{
modePath = "Assets/Resources/Model/Scene/" +
Path.GetFileNameWithoutExtension(modeInfo.szDataName) + ".lmo.obj";
}
Object mode = AssetDatabase.LoadAssetAtPath<Object>(modePath);
if (mode)
{
GameObject goModel = (GameObject)GameObject.Instantiate(mode);
goModel.transform.position = pos;
goModel.transform.localScale = new Vector3(1, 1, -1);
Vector3 e = goModel.transform.eulerAngles;
goModel.transform.rotation = Quaternion.Euler(e.x, sceneObjInfo.YawAngle, e.z);
goModel.name = $"[{id}]{mode.name}";
// Debug.Log(goModel);
}
else
{
Debug.LogError($"mode not found: {modePath}");
}
}
}
}
}
}
}