블로그 이미지
Every unexpected event is a path to learning for you. blueasa

카테고리

분류 전체보기 (2795)
Unity3D (852)
Programming (478)
Server (33)
Unreal (4)
Gamebryo (56)
Tip & Tech (185)
협업 (61)
3DS Max (3)
Game (12)
Utility (68)
Etc (98)
Link (32)
Portfolio (19)
Subject (90)
iOS,OSX (55)
Android (14)
Linux (5)
잉여 프로젝트 (2)
게임이야기 (3)
Memories (20)
Interest (38)
Thinking (38)
한글 (30)
PaperCraft (5)
Animation (408)
Wallpaper (2)
재테크 (18)
Exercise (3)
나만의 맛집 (3)
냥이 (10)
육아 (16)
Total
Today
Yesterday


[Link] http://www.jewel-s.jp/



무료이고, 쓰면 출처 표기와 어디에 썼다고 알려 달라고만 하는 듯 하네요.

반응형
Posted by blueasa
, |


[Link] https://tohtml.com/

반응형
Posted by blueasa
, |

Answer by misterPantoni 

After a lot of tests and googeling around i found a working solution, although i am not totally happy with it:

If you store the lightmaps and the LightmapSettings for each renderer in a custom script, you can load the lightmaps on runtime. Look at this forum post and the sample project provided there, this is how i got it to work:

https://forum.unity3d.com/threads/problems-with-instantiating-baked-prefabs.324514/

The "bad" thing is, that now i need to have a duplicate of the lightmaps stored in my custom script - whenever i try to assign the lightmaps which are "in the scene" (and also after loading the assetbundle, at least in the editor i can see them), they somehow are not beeing loaded correcty by the renderers and i get wrong lightmap positions. So i have to store the lightmaps as extra texture and add them to the lightmap array to use them.

EDIT: The problems with the wrong index were just some indices i messed up - now i got it working the way i want it to, without duplicate Lightmaps. Here is the working script, just place it on the parent object of whatever is lightmapped in your scene you want to use as an assetbundle:

  1. using UnityEngine;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. public class SceneAssetBundleLightmaps : MonoBehaviour{
  5. [System.Serializable]
  6. struct RendererInfo{
  7. public Renderer renderer;
  8. public int lightmapIndex;
  9. public Vector4 lightmapOffsetScale;
  10. }
  11. [SerializeField]
  12. RendererInfo[] m_RendererInfo;
  13. void Awake (){
  14. if (m_RendererInfo == null || m_RendererInfo.Length == 0)
  15. return;
  16. ApplyRendererInfo(m_RendererInfo);
  17. }
  18. static void ApplyRendererInfo (RendererInfo[] infos){
  19. for (int i=0;i<infos.Length;i++){
  20. var info = infos[i];
  21. info.renderer.lightmapIndex = info.lightmapIndex;
  22. info.renderer.lightmapScaleOffset = info.lightmapOffsetScale;
  23. }
  24. }
  25. #if UNITY_EDITOR
  26. [UnityEditor.MenuItem("Assets/Assign Scene Assetbundle Lightmaps")]
  27. static void GenerateLightmapInfo (){
  28. if (UnityEditor.Lightmapping.giWorkflowMode != UnityEditor.Lightmapping.GIWorkflowMode.OnDemand){
  29. Debug.LogError("ExtractLightmapData requires that you have baked you lightmaps and Auto mode is disabled.");
  30. return;
  31. }
  32. //UnityEditor.Lightmapping.Bake();
  33. SceneAssetBundleLightmaps[] prefabs = FindObjectsOfType<SceneAssetBundleLightmaps>();
  34. foreach (var instance in prefabs){
  35. var gameObject = instance.gameObject;
  36. var rendererInfos = new List<RendererInfo>();
  37. var lightmaps = new List<Texture2D>();
  38. GenerateLightmapInfo(gameObject, rendererInfos, lightmaps);
  39. instance.m_RendererInfo = rendererInfos.ToArray();
  40. }
  41. }
  42. static void GenerateLightmapInfo (GameObject root, List<RendererInfo> rendererInfos, List<Texture2D> lightmaps){
  43. var renderers = root.GetComponentsInChildren<MeshRenderer>();
  44. foreach (MeshRenderer renderer in renderers){
  45. if (renderer.lightmapIndex != -1)
  46. {
  47. RendererInfo info = new RendererInfo();
  48. info.renderer = renderer;
  49. info.lightmapOffsetScale = renderer.lightmapScaleOffset;
  50. info.lightmapIndex = renderer.lightmapIndex;
  51. rendererInfos.Add(info);
  52. }
  53. }
  54. }
  55. #endif
  56. }



[출처] http://answers.unity3d.com/questions/1278569/unity-5-lightmapped-scene-assetbundle-problem.html

반응형

'Unity3D > LightMap' 카테고리의 다른 글

유니티5 라이트 맵 팁  (0) 2015.06.19
LightMapSize 조절  (0) 2014.03.18
Unity Lightmapping Tips, Tricks and Thoughts  (0) 2014.03.18
Posted by blueasa
, |


[링크] http://unitylist.com/r/6js/unity-5-assert-bundle

반응형
Posted by blueasa
, |

Unity Technologies의 Unity AssetBundleDemo(https://bitbucket.org/Unity-Technologies/assetbundledemo)를 테스트 하는 중에 Local Server가 제대로 작동하지 않아서 찾다 보니 아래와 같은 방법으로 해결해서 적어 둠.



On Windows 10, I've fixed this issue by making this change in LaunchAssetBundleServer.cs:

  1. //...
  2. ProcessStartInfo startInfo = new ProcessStartInfo( pathToAssetServer ); //ExecuteInternalMono.GetProfileStartInfoForMono(MonoInstallationFinder.GetMonoInstallation("MonoBleedingEdge"), GetMonoProfileVersion(), pathToAssetServer, args, true);
  3. startInfo.WorkingDirectory = assetBundlesDirectory;
  4. startInfo.Arguments = args;
  5. startInfo.UseShellExecute = true;
  6. startInfo.Verb = "runas";
  7. Process launchProcess = Process.Start(startInfo);
  8. //...



[출처] http://answers.unity3d.com/questions/1282205/invalid-asset-bundle-and-downloading-failed-connec.html

반응형
Posted by blueasa
, |

에셋번들을 만들기 위해서는 먼저 에셋번들로 만들 리소스를 분류해야한다.

프로젝트 뷰에서 리소스를 클릭하면 아래와 같은 뷰를 볼 수 있는데

이 뷰의 하단에 AssetBundle의 리스트 박스가 있다.

디폴트는 None 으로 되어있는데 New를 사용하여 새로운 에셋번들 이름을 정할 수 있다.

에셋번들로 사용할 리소스의 에셋번들 이름을 설정해 준다.




헌데 에셋번들 이름만 설정하는 것으로는 에셋번들이 자동적으로 생성되지 않는다.

때문에 직접 코드를 작성해야한다.

1
2
3
4
5
6
7
8
9
10
11
12
using UnityEngine;
using UnityEditor;
 
public class AssetBundleBuilder : Editor 
{
    [MenuItem("Assets/BuildBundle")]
    static void BuildBundle()
    {
        BuildPipeline.BuildAssetBundles("AssetBundles");
    }
}
 
cs

MenuItem을 사용하여 유니티의 Asset탭에 BuildBundle탭이 나타나게 하였다.

BuildPipeline을 이용하여 에셋번들의 이름이 지정된 리소스를 에셋번들로 만들어준다.

BuildAssetBundles는 에셋번들을 만들어주는 함수로 매개변수에는 에셋번들이 저장될 경로를 넣어주었다.


Asset탭에 BuildBundle탭이 생겼다.


사용해보면 에셋번들이 생성된다.




요롷게 지정해줬던 폴더에 Bundle 파일이 생성되었다. 

(아, 폴더가 미리 만들어져있지 않으면 에러를 뱉어냅니다. 폴더의 경로는 프로젝트 폴더 기준)



이제 이 에셋번들을 다운로드 할겁니다.

인터넷에 올려서 다운로드 할 수도 있지만 저는 로컬에서 받는 방식으로 해볼 것입니다.

저의 로컬 디렉터리 URL은 file:///C:/Users/UnderCode/Desktop/1.UnityTest/AssetBundleTest/bundle  입니다.

이 경로를 통해 bundle 파일을 받게 됩니다.


에셋번들을 다운로드 받는 방법은 크게 두가지가 있습니다.

WWW 클래스를 이용해서 그냥 다운 받거나

WWW.LoadFromCacheOrDownload() 함수를 이용하여 받는 방법입니다.

LoadFromCacheOrDownload() 함수는 에셋번들을 인터넷으로 부터 캐싱하여 받는 방식으로 cache 폴더에 저장됩니다.

다음에 다시 다운받을 때 하드디스크에 에셋번들이 있으면 하드디스크에 있는 에셋번들을 사용하고 없으면

 다운로드 받아서 사용합니다.



먼저 WWW를 이용하여 다운 받는 방법 

(string bundleURL = "file:///C:/Users/UnderCode/Desktop/1.UnityTest/AssetBundleTest/bundle";)

(AssetBundle bundle;)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
    //방법 1
    IEnumerator AssetBundleLoad()
    {
        WWW www = new WWW(bundleURL);
 
        yield return www;
 
        bundle = www.assetBundle;
 
        AssetBundleRequest abr = bundle.LoadAssetAsync<Sprite>("TestImage");
        yield return abr;
        assetImage.sprite = (Sprite)abr.asset;
 
        abr = bundle.LoadAssetAsync<TextAsset>("AssetBundleTest");
        yield return abr;
        TextAsset textAsset = (TextAsset)abr.asset;
        assetText.text = textAsset.text;
 
        abr = bundle.LoadAssetAsync<AudioClip>("MazeMusic");
        yield return abr;
        assetAudio.clip = (AudioClip)abr.asset;
        assetAudio.Play();
 
        bundle.Unload(false);
    }
cs



LoadCacheOrDownload() 함수를 이용하는 방법

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
    //방법 2
    IEnumerator AssetBundleLoad()
    {
        while (!Caching.ready)
            yield return null;
 
        WWW www = WWW.LoadFromCacheOrDownload(bundleURL, bundleVer);
 
        yield return www;
 
        bundle = www.assetBundle;
 
        AssetBundleRequest abr = bundle.LoadAssetAsync<Sprite>("TestImage");
        yield return abr;
        assetImage.sprite = (Sprite)abr.asset;
 
        abr = bundle.LoadAssetAsync<TextAsset>("AssetBundleTest");
        yield return abr;
        TextAsset textAsset = (TextAsset)abr.asset;
        assetText.text = textAsset.text;
 
        abr = bundle.LoadAssetAsync<AudioClip>("MazeMusic");
        yield return abr;
        assetAudio.clip = (AudioClip)abr.asset;
        assetAudio.Play();
 
        bundle.Unload(false);
    }
cs



에셋번들에서 리소를 가져올 때는 리소스의 이름을 사용하여 리소스를 찾고(확장자는 필요 없음)

AssetBundleRequest를 이용하여 받습니다.



출처: http://undercode.tistory.com/21 [UnderCode]

반응형
Posted by blueasa
, |

[링크] ETC1 + Alpha

Unity3D/Tips / 2017. 4. 6. 17:36


[링크] http://twocap.tistory.com/11



[참조] https://www.assetstore.unity3d.com/kr/#!/content/23722

반응형
Posted by blueasa
, |

MAC OS
 ㄴ 어플리케이션 : ~/Library/Preferences
 ㄴ 웹플레이어 : ~/Library/Preferences/Unity/WebPlayerPrefs

unity.[company name].[product name].plist 파일


Windows OS
 ㄴ 어플리케이션 : 레지스트리 HKCU\Software\
 ㄴ 웹플레이어 : %APPDATA%\Unity\WebPlayerPrefs

\[company name]\[product name] 폴더


시작 단추, 실행을 차례로 누르고 REGEDIT를 입력




[출처] http://ancardwineugene.blogspot.kr/2015/07/unity3d-playerprefs.html

반응형
Posted by blueasa
, |


[링크] http://superfelix.tistory.com/78

반응형
Posted by blueasa
, |
[키워드] MovieTexture, Handheld.PlayFullScreenMovie(path)


[링크] http://blog.naver.com/crazylulu/120173323897

반응형
Posted by blueasa
, |