예제 #1
0
    //增加位置节点
    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);
        }
    }
예제 #2
0
 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;
 }
예제 #3
0
 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);
         }
     }
 }
예제 #4
0
 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;
 }
예제 #5
0
 /// <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;
         }
     }
 }
예제 #6
0
    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;
    }
예제 #7
0
    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);
        }
    }
예제 #8
0
    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;
            }
        }
    }
예제 #9
0
    /// <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);
    }
예제 #10
0
    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");
    }
예제 #11
0
    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);
            }
        }
    }
예제 #12
0
    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();
    }
예제 #13
0
 public static void getLightData(MeshRenderer render, ItemPosInfo posInfo)
 {
     render.lightmapIndex       = posInfo.lightIndex;
     render.lightmapScaleOffset = new Vector4(posInfo.tilingX, posInfo.tilingY, posInfo.offsetX, posInfo.offsetY);
 }