こちらはUnity Advent Calendar 2018 2日目の投稿になります。
今回はタイトル通り音楽経験は1瞬ドラムを触って遊んでた事があるレベルのサウンドがナンモワカランマンが今製作中の某VRADVゲームのBGM周りの実装をしている話(現在進行系)を紹介して行きます。
どんな事をするかというと、Bgmのパーツ化とレイヤー分けをザックリと実装した事の紹介です。
こちらはUnity Advent Calendar 2018 2日目の投稿になります。
今回はタイトル通り音楽経験は1瞬ドラムを触って遊んでた事があるレベルのサウンドがナンモワカランマンが今製作中の某VRADVゲームのBGM周りの実装をしている話(現在進行系)を紹介して行きます。
どんな事をするかというと、Bgmのパーツ化とレイヤー分けをザックリと実装した事の紹介です。
今回はかなり走り書きのメモ的なやつなので、そのうち出来たら追記します。
タイトル通り、アンドロイド(Oculus GO)でビルドしようとした時にエラーが出るようになりまして、見てみたら
「A problem occurred configuring root project ‘gradleOut’」
と出てきたので、Gradleでエラー・・・で???ってなりました。
これについて検索している時にちょこちょこ違う解決策が出てきたので、自分の環境で上手く行ったやつをメモ書きとして残しておきます。
ドーモ、お久しぶりですー。
皆さん複数人で制作している際に、UnityがデフォルトでライトマップのAuto GenerateをONにしている事を伝え忘れて沢山のシーンがライトマップ勝手に作る状態でpushされている経験ありませんか?そしてシーンを開いたらPCが唸り初めたりした事はありませんか??私は勿論ありますよコンチクショー!!
自業自得ではありますが、そんな状況に陥った時に手動でやらなくて良いようにスクリプトから自動で設定を変えられないか探してみた所、下記2つのページが見つかったので、メモしておきます:
エディター拡張入門:DLLをデコンパイル
https://anchan828.github.io/editor-manual/web/decompile_dll.html
Unity Forum – Access Lighting window properties in Script?
https://forum.unity.com/threads/access-lighting-window-properties-in-script.328342/
上の方は安定の安藤さんの記事ですねー。ここで欲しい内部API機能の探し方や、リフレクションを使ってのアクセスが紹介されています。2つ目の方はフォーラムの質問で色々のっています。2個目の方でスクリプトが紹介されていますので、それをメモ用に置いておきます。書いてくれたALIyerEdon氏に圧倒的感謝・・・! m_ _m
まずはシーンに纏めて処理を行うスクリプトを書きます
using System; using System.IO; using System.Linq; using UnityEditor; using UnityEditor.SceneManagement; public static class EditorSceneUtility { public static void ApplyToScenesByDirectoryList(string[] directoryList, Action methods) { ApplyToScenes(GetSceneFiles(directoryList), methods); } public static void ApplyToScenes(string[] pathList, Action methods) { var currentScene = EditorSceneManager.GetActiveScene(); foreach (var name in pathList) { var scene = EditorSceneManager.OpenScene(name); methods(scene); EditorSceneManager.SaveScene(scene); } EditorSceneManager.OpenScene(currentScene.path); } public static string[] GetSceneFiles(string[] directoryList) { return directoryList .SelectMany(c => Directory.GetFiles(c, "*.unity", SearchOption.AllDirectories)) .Select(c => c.Replace("\\", "/")) .ToArray(); } }
次にメインのライトマップ設定を作ります。
using System; using System.Reflection; using UnityEditor; using UnityEngine; using Object = UnityEngine.Object; public class TurnOffLightmapInAllScenes { [MenuItem("Tools/Turnoff Lightmaps")] static void TurnoffLightmap() { var dirList = new[] { // ディレクトリ。自分の物に変えたり、外に出したりしてください "Assets/JK/Scenes", }; // 適当にまとめてやる EditorSceneUtility.ApplyToScenesByDirectoryList(dirList, (scene) => { SetBakedGiEnabled(false); SetFinalGatherEnabled(false); SetRealtimeLightmaps(false); SetAutoGenerate(false); } ); } public static void SetAutoGenerate(bool isGenerate) { SetBool("m_GIWorkflowMode", !isGenerate); } public static void SetBounceIntensity(float val) { SetFloat("m_GISettings.m_IndirectOutputScale", val); } public static void SetIndirectSamples(int val) { SetInt("m_LightmapEditorSettings.m_PVRSampleCount", val); } public static void SetDirectSamples(int val) { SetInt("m_LightmapEditorSettings.m_PVRDirectSampleCount", val); } public static void SetIndirectResolution(float val) { SetFloat("m_LightmapEditorSettings.m_Resolution", val); } public static void SetAmbientOcclusion(bool val) { SetBool("m_LightmapEditorSettings.m_AO", val); } public static void SetAmbientOcclusionDirect(float val) { SetFloat("m_LightmapEditorSettings.m_CompAOExponentDirect", val); } public static void SetAmbientOcclusionIndirect(float val) { SetFloat("m_LightmapEditorSettings.m_CompAOExponent", val); } public static void SetAmbientOcclusionDistance(float val) { SetFloat("m_LightmapEditorSettings.m_AOMaxDistance", val); } public static void SetBakedGiEnabled(bool enabled) { SetBool("m_GISettings.m_EnableBakedLightmaps", enabled); } public static void SetFinalGatherEnabled(bool enabled) { SetBool("m_LightmapEditorSettings.m_FinalGather", enabled); } public static void SetFinalGatherRayCount(int val) { SetInt("m_LightmapEditorSettings.m_FinalGatherRayCount", val); } public static void SetRealtimeLightmaps(bool enabled) { SetBool("m_GISettings.m_EnableRealtimeLightmaps", enabled); } public static void SetFloat(string name, float val) { ChangeProperty(name, property => property.floatValue = val); } public static void SetInt(string name, int val) { ChangeProperty(name, property => property.intValue = val); } public static void SetBool(string name, bool val) { ChangeProperty(name, property => property.boolValue = val); } public static void ChangeProperty(string name, Action changer) { var lightmapSettings = getLighmapSettings(); var prop = lightmapSettings.FindProperty(name); if (prop != null) { changer(prop); lightmapSettings.ApplyModifiedProperties(); } else Debug.LogError("lighmap property not found: " + name); } static SerializedObject getLighmapSettings() { var getLightmapSettingsMethod = typeof(LightmapEditorSettings).GetMethod("GetLightmapSettings", BindingFlags.Static | BindingFlags.NonPublic); var lightmapSettings = getLightmapSettingsMethod.Invoke(null, null) as Object; return new SerializedObject(lightmapSettings); } }
これでメニューにToolsが追加され、Turnoff Lightmapsがあるのでそれを選択するとスクリプト内にあるディレクトリにあるシーンファイルを1個づつ開いていき、設定を行っていきます。今回はライトマップ使わない想定で色々切っていますが、必要に応じて設定を行ってください。
Unityさんや・・・何時公式で設定変えられる用にしてくれるんや・・・?
えー、はい。一応生きてます。
タイトル通りUnity 2018とVisual Studio2017でインテリセンスが起動しなかったり、slnファイルを作れなかった時に行った対処を忘れた時様にメモ書きしておきます。