//增加位置节点 void AddNodeObj(ItemInfo info, ItemPosInfo posInfo, EditorSceneObj sceneObj, bool isNew) { BaseItem baseItem = getBaseItemByID(info.itemID); if (baseItem == null) { return; } //加载资源 GameObject obj = AssetDatabase.LoadAssetAtPath <GameObject>("Assets/" + baseItem.model + ".prefab"); obj = Instantiate(obj) as GameObject; obj.name = info.itemName; obj.transform.SetParent(sceneObj.rootObj.transform); obj.isStatic = true; if (posInfo != null) { obj.transform.position = posInfo.pos; obj.transform.eulerAngles = posInfo.rotate; obj.transform.localScale = (posInfo.scale == Vector3.zero)? Vector3.one:posInfo.scale; } else { obj.transform.position = Vector3.zero; obj.transform.eulerAngles = Vector3.zero; } sceneObj.itemObj.Add(obj); if (isNew) { UserLog.AddNodeSceneLog(m_allAssetName[selectDataIndex], info.itemID, sceneObj.itemObj.Count - 1); } }
public ItemPosInfoServerJson(ItemPosInfo posInfo) { pos = new Vector3Json(posInfo.pos.x, posInfo.pos.y, posInfo.pos.z); type = (int)posInfo.type; //rotate = new Vector3Json(posInfo.rotate.x, posInfo.rotate.y, posInfo.rotate.z); percent = posInfo.percent; }
static void setAssetData(SceneItemJson groupData, SceneItemInfo itemInfos) { itemInfos.lightMapName = groupData.lightMapName; itemInfos.items = new List <ItemInfo>(); for (int i = 0; i < groupData.items.Count; i++) { ItemInfoJson infoJson = groupData.items[i]; ItemInfo itemInfo = new ItemInfo(); itemInfo.itemID = infoJson.itemID; itemInfo.itemPercent = infoJson.itemPercent; itemInfo.itemName = infoJson.itemName; itemInfo.itemPos = new List <ItemPosInfo>(); itemInfos.items.Add(itemInfo); for (int j = 0; j < infoJson.itemPos.Count; j++) { ItemPosInfo posInfo = new ItemPosInfo(); posInfo.lightIndex = infoJson.itemPos[j].lightIndex; posInfo.offsetX = infoJson.itemPos[j].offsetX; posInfo.offsetY = infoJson.itemPos[j].offsetY; posInfo.percent = infoJson.itemPos[j].percent; posInfo.pos = new Vector3(infoJson.itemPos[j].pos.x, infoJson.itemPos[j].pos.y, infoJson.itemPos[j].pos.z); posInfo.rotate = new Vector3(infoJson.itemPos[j].rotate.x, infoJson.itemPos[j].rotate.y, infoJson.itemPos[j].rotate.z); posInfo.scale = new Vector3(infoJson.itemPos[j].scale.x, infoJson.itemPos[j].scale.y, infoJson.itemPos[j].scale.z); posInfo.m_cameraNode = infoJson.itemPos[j].cameraNode; posInfo.tilingX = infoJson.itemPos[j].tilingX; posInfo.tilingY = infoJson.itemPos[j].tilingY; posInfo.type = (ItemType)infoJson.itemPos[j].type; itemInfo.itemPos.Add(posInfo); } } }
public static void SetLightData(MeshRenderer render, ItemPosInfo posInfo) { posInfo.lightIndex = render.lightmapIndex; posInfo.tilingX = render.lightmapScaleOffset.x; posInfo.tilingY = render.lightmapScaleOffset.y; posInfo.offsetX = render.lightmapScaleOffset.z; posInfo.offsetY = render.lightmapScaleOffset.w; }
/// <summary> ///保存所有对象位置数据 /// </summary> void SetAllObjPos() { for (int i = 0; i < itemInfos.items.Count; i++) { for (int j = 0; j < itemInfos.items[i].itemPos.Count; j++) { ItemPosInfo posInfo = itemInfos.items[i].itemPos[j]; posInfo.pos = itemObjs[i].itemObj[j].transform.position; posInfo.rotate = itemObjs[i].itemObj[j].transform.localEulerAngles; posInfo.scale = itemObjs[i].itemObj[j].transform.localScale; } } }
public ItemPosInfoJson(ItemPosInfo posInfo) { pos = new Vector3Json(posInfo.pos.x, posInfo.pos.y, posInfo.pos.z); type = (int)posInfo.type; rotate = new Vector3Json(posInfo.rotate.x, posInfo.rotate.y, posInfo.rotate.z); scale = new Vector3Json(posInfo.scale); percent = posInfo.percent; lightIndex = posInfo.lightIndex; tilingX = posInfo.tilingX; tilingY = posInfo.tilingY; offsetX = posInfo.offsetX; offsetY = posInfo.offsetY; }
void ItemClick(ItemInfo info) { if (info == null) { return; } EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("物件概率"); info.itemPercent = EditorGUILayout.FloatField(info.itemPercent); EditorGUILayout.EndHorizontal(); for (int i = 0; i < info.itemPos.Count; i++) { ItemPosInfo posInfo = info.itemPos[i]; ItemInfoShow(posInfo, i); } }
private void SyncSinglePage(long id, int index, ItemPosInfo posInfo, int pageIndex) { SceneItemInfo scenePageData = m_allItemInfo[pageIndex];//AssetDatabase.LoadAssetAtPath<SceneItemInfo>(m_allAssetPath[pageIndex]); for (int j = 0; j < scenePageData.items.Count; j++) { if (scenePageData.items[j].itemID == id) { if (scenePageData.items[j].itemPos.Count <= index) { continue; } scenePageData.items[j].itemPos[index].pos = posInfo.pos; scenePageData.items[j].itemPos[index].rotate = posInfo.rotate; scenePageData.items[j].itemPos[index].scale = posInfo.scale; scenePageData.items[j].itemPos[index].m_cameraNode = posInfo.m_cameraNode; break; } } }
/// <summary> /// 增加位置节点 /// </summary> void AddItemNode() { if (selectItem == null || selectIndex < 0) { return; } ItemPosInfo posInfo = new ItemPosInfo(); BaseItem baseItem = getBaseItemByID(selectItem.itemID); if (baseItem == null) { return; } if (baseItem.isStory == 1 && selectItem.itemPos.Count >= 1) { return; } posInfo.type = (ItemType)baseItem.isStory; selectItem.itemPos.Add(posInfo); AddNodeObj(selectItem, posInfo, itemObjs[selectIndex], true); }
List <ItemPosInfo> srcObjLightData = new List <ItemPosInfo>(); //记录基础场景烘焙的数据 void SaveBaseSceneLight() { GameObject[] rootObjs = GameObject.FindGameObjectsWithTag("LightingMap"); srcObjLightData.Clear(); for (int j = 0; j < rootObjs.Length; j++) { GameObject rootObj = rootObjs[j]; if (rootObj == null) { continue; } MeshRenderer[] srcRender = rootObj.transform.GetComponentsInChildren <MeshRenderer>(); for (int i = 0; i < srcRender.Length; i++) { ItemPosInfo posInfo = new ItemPosInfo(); SceneLightHelper.SetLightData(srcRender[i], posInfo); srcObjLightData.Add(posInfo); } } //GameObject rootObj = GameObject.Find("Scene"); }
public static void setLightMapData(SceneItemInfo itemInfo, List <EditorSceneObj> sceneObjs) { if (!CheckDataSafe(itemInfo, sceneObjs)) { return; } for (int i = 0; i < sceneObjs.Count; i++) { for (int j = 0; j < sceneObjs[i].itemObj.Count; j++) { GameObject obj = sceneObjs[i].itemObj[j]; if (obj == null) { continue; } MeshRenderer render = obj.GetComponent <MeshRenderer>(); ItemPosInfo posInfo = itemInfo.items[i].itemPos[j]; SetLightData(render, posInfo); } } }
void ItemInfoShow(ItemPosInfo posInfo, int i) { if (posInfo == null) { return; } EditorGUILayout.BeginVertical(); if (selectIndex >= 0 && itemObjs[selectIndex] != null) { itemObjs[selectIndex].itemObj[i] = (GameObject)EditorGUILayout.ObjectField(itemObjs[selectIndex].itemObj[i], typeof(GameObject), true); } posInfo.type = (ItemType)EditorGUILayout.EnumPopup("物品类型:", posInfo.type); posInfo.pos = EditorGUILayout.Vector3Field("位置", posInfo.pos); posInfo.rotate = EditorGUILayout.Vector3Field("旋转", posInfo.rotate); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("位置概率"); posInfo.percent = EditorGUILayout.FloatField(posInfo.percent); EditorGUILayout.EndHorizontal(); int cameraIndex = 0; for (int m = 0; m < m_allCameraNode.Count; m++) { if (m_allCameraNode[m].Equals(posInfo.m_cameraNode)) { cameraIndex = m; break; } } posInfo.m_cameraNode = m_allCameraNode[EditorGUILayout.Popup(cameraIndex, m_allCameraNode.ToArray())]; EditorGUILayout.BeginHorizontal(); if (GUILayout.Button("设置坐标")) { if (selectItem != null && selectIndex >= 0 && itemObjs[selectIndex] != null) { posInfo.pos = itemObjs[selectIndex].itemObj[i].transform.position; posInfo.rotate = itemObjs[selectIndex].itemObj[i].transform.eulerAngles; } } if (GUILayout.Button("跳转")) { if (selectItem != null && selectIndex >= 0 && itemObjs[selectIndex] != null) { itemObjs[selectIndex].itemObj[i].transform.position = posInfo.pos; itemObjs[selectIndex].itemObj[i].transform.eulerAngles = posInfo.rotate; } } if (GUILayout.Button("同步")) { if (selectItem == null) { return; } if (selectItem != null && selectIndex >= 0 && itemObjs[selectIndex] != null) { Transform itemTran = itemObjs[selectIndex].itemObj[i].transform; posInfo.pos = itemTran.position; posInfo.rotate = itemTran.eulerAngles; SysncItem(selectItem.itemID, i, itemTran, posInfo.m_cameraNode); } } if (GUILayout.Button("同步单个")) { if (selectItem == null) { return; } if (selectItem != null && selectIndex >= 0 && itemObjs[selectIndex] != null) { Transform itemTran = itemObjs[selectIndex].itemObj[i].transform; SceneSyncItemWindow syncItemWin = SceneSyncItemWindow.CreateWindow(); syncItemWin.SetData(m_allItemInfo, selectItem.itemID, i, itemTran.gameObject, selectDataIndex, selectItem.itemPos[i].m_cameraNode); //posInfo.pos = itemTran.position; //posInfo.rotate = itemTran.eulerAngles; //SysncItem(selectItem.itemID, i, itemTran.position, itemTran.localScale, itemTran.eulerAngles); } } if (GUILayout.Button("删除")) { if (selectItem != null) { selectItem.itemPos.Remove(posInfo); if (selectItem != null && selectIndex >= 0 && itemObjs[selectIndex] != null) { UserLog.RemoveNodeSceneLog(m_allAssetName[selectDataIndex], selectItem.itemID, i); GameObject.DestroyImmediate(itemObjs[selectIndex].itemObj[i]); itemObjs[selectIndex].itemObj.RemoveAt(i); } } } if (GUILayout.Button("删除整组")) { if (selectItem != null) { SysncDeleteItem(selectItem.itemID, i); if (selectItem != null && selectIndex >= 0 && itemObjs[selectIndex] != null) { GameObject.DestroyImmediate(itemObjs[selectIndex].itemObj[i]); itemObjs[selectIndex].itemObj.RemoveAt(i); } } } EditorGUILayout.EndHorizontal(); EditorGUILayout.EndVertical(); EditorGUILayout.LabelField("----------------------------------------------------------------------------------------------------------"); EditorGUILayout.Space(); }
public static void getLightData(MeshRenderer render, ItemPosInfo posInfo) { render.lightmapIndex = posInfo.lightIndex; render.lightmapScaleOffset = new Vector4(posInfo.tilingX, posInfo.tilingY, posInfo.offsetX, posInfo.offsetY); }