update audio + switch to wwise

This commit is contained in:
mangorifo
2024-03-08 15:49:30 +08:00
parent 578388f144
commit d59237af1c
510 changed files with 110625 additions and 102 deletions
@@ -0,0 +1,145 @@
/*******************************************************************************
The content of this file includes portions of the proprietary AUDIOKINETIC Wwise
Technology released in source code form as part of the game integration package.
The content of this file may not be used without valid licenses to the
AUDIOKINETIC Wwise Technology.
Note that the use of the game engine is subject to the Unity(R) Terms of
Service at https://unity3d.com/legal/terms-of-service
License Usage
Licensees holding valid licenses to the AUDIOKINETIC Wwise Technology may use
this file in accordance with the end user license agreement provided with the
software or, alternatively, in accordance with the terms contained
in a written agreement between you and Audiokinetic Inc.
Copyright (c) 2024 Audiokinetic Inc.
*******************************************************************************/
#if UNITY_EDITOR
public class AkUnityIntegrationBuilderBase
{
private readonly string m_progTitle = "WwiseUnity: Rebuilding Unity Integration Progress";
protected string m_assetsDir = "Undefined";
protected string m_assetsPluginsDir = "Undefined";
protected string m_buildScriptDir = "Undefined";
protected string m_buildScriptFile = "Undefined";
protected string m_platform = "Undefined";
protected string m_shell = "python";
protected string m_wwiseSdkDir = "";
public AkUnityIntegrationBuilderBase()
{
var unityProjectRoot = System.IO.Directory.GetCurrentDirectory();
m_assetsDir = System.IO.Path.Combine(unityProjectRoot, "Assets");
m_assetsPluginsDir = System.IO.Path.Combine(m_assetsDir, "Plugins");
m_buildScriptDir =
System.IO.Path.Combine(System.IO.Path.Combine(System.IO.Path.Combine(m_assetsDir, "Wwise"), "AkSoundEngine"),
"Common");
m_buildScriptFile = "BuildWwiseUnityIntegration.py";
}
public void BuildByConfig(string config, string arch)
{
if (UnityEditor.EditorApplication.isPlaying)
{
UnityEngine.Debug.LogWarning("WwiseUnity: Editor is in play mode. Stop playing any scenes and retry. Aborted.");
return;
}
// Try to parse config to get Wwise location.
var configPath = System.IO.Path.Combine(m_buildScriptDir, "BuildWwiseUnityIntegration.json");
var fi = new System.IO.FileInfo(configPath);
if (fi.Exists)
{
var msg = string.Format("WwiseUnity: Found preference file: {0}. Use build variables defined in it.", configPath);
UnityEngine.Debug.Log(msg);
}
else
{
var msg = string.Format("WwiseUnity: Preference file: {0} is unavailable. Need user input.", configPath);
UnityEngine.Debug.Log(msg);
m_wwiseSdkDir = UnityEditor.EditorUtility.OpenFolderPanel("Choose Wwise SDK folder", ".", "");
var isUserCancelledBuild = m_wwiseSdkDir == "";
if (isUserCancelledBuild)
{
UnityEngine.Debug.Log("WwiseUnity: User cancelled the build.");
return;
}
}
if (!PreBuild())
return;
// On Windows, separate shell console window will open. When building is done, close the Window yourself if it stays active. Usually at the end you will see the last line says "Build succeeded" or "Build failed".
var progMsg = string.Format("WwiseUnity: Rebuilding Wwise Unity Integration for {0} ({1}) ...", m_platform, config);
UnityEngine.Debug.Log(progMsg);
var start = new System.Diagnostics.ProcessStartInfo();
start.FileName = m_shell;
start.Arguments = GetProcessArgs(config, arch);
if (start.Arguments == "")
return;
start.UseShellExecute = false;
start.RedirectStandardOutput = true;
UnityEditor.EditorUtility.DisplayProgressBar(m_progTitle, progMsg, 0.5f);
using (var process = System.Diagnostics.Process.Start(start))
{
using (var reader = process.StandardOutput)
{
process.WaitForExit();
try
{
//ExitCode throws InvalidOperationException if the process is hanging
var isBuildSucceeded = process.ExitCode == 0;
if (isBuildSucceeded)
{
UnityEditor.EditorUtility.DisplayProgressBar(m_progTitle, progMsg, 1.0f);
UnityEngine.Debug.Log("WwiseUnity: Build succeeded. Check detailed logs under the Logs folder.");
}
else
UnityEngine.Debug.LogError("WwiseUnity: Build failed. Check detailed logs under the Logs folder.");
UnityEditor.AssetDatabase.Refresh();
UnityEditor.EditorUtility.ClearProgressBar();
}
catch (System.Exception ex)
{
UnityEditor.AssetDatabase.Refresh();
UnityEngine.Debug.LogError(string.Format(
"WwiseUnity: Build process failed with exception: {}. Check detailed logs under the Logs folder.", ex));
UnityEditor.EditorUtility.ClearProgressBar();
}
}
}
}
protected virtual string GetProcessArgs(string config, string arch)
{
var scriptPath = System.IO.Path.Combine(m_buildScriptDir, m_buildScriptFile);
var args = string.Format("\"{0}\" -p {1} -c {2}", scriptPath, m_platform, config);
if (arch != null)
args += string.Format(" -a {0}", arch);
if (m_wwiseSdkDir != "")
args += string.Format(" -w \"{0}\" -u", m_wwiseSdkDir);
return args;
}
protected virtual bool PreBuild()
{
return true;
}
}
#endif // #if UNITY_EDITOR
@@ -0,0 +1,402 @@
/*******************************************************************************
The content of this file includes portions of the proprietary AUDIOKINETIC Wwise
Technology released in source code form as part of the game integration package.
The content of this file may not be used without valid licenses to the
AUDIOKINETIC Wwise Technology.
Note that the use of the game engine is subject to the Unity(R) Terms of
Service at https://unity3d.com/legal/terms-of-service
License Usage
Licensees holding valid licenses to the AUDIOKINETIC Wwise Technology may use
this file in accordance with the end user license agreement provided with the
software or, alternatively, in accordance with the terms contained
in a written agreement between you and Audiokinetic Inc.
Copyright (c) 2024 Audiokinetic Inc.
*******************************************************************************/
#if UNITY_EDITOR
public class AkUnityAssetsInstaller
{
public string[] m_arches = { };
protected string m_assetsDir = UnityEngine.Application.dataPath;
protected System.Collections.Generic.List<string> m_excludes = new System.Collections.Generic.List<string> { ".meta" };
protected string m_platform = "Undefined";
protected string m_pluginDir = System.IO.Path.Combine(UnityEngine.Application.dataPath, "Plugins");
// Copy file to destination directory and create the directory when none exists.
public static bool CopyFileToDirectory(string srcFilePath, string destDir)
{
var fi = new System.IO.FileInfo(srcFilePath);
if (!fi.Exists)
{
UnityEngine.Debug.LogError(string.Format("WwiseUnity: Failed to copy. Source is missing: {0}.", srcFilePath));
return false;
}
var di = new System.IO.DirectoryInfo(destDir);
if (!di.Exists)
di.Create();
const bool IsToOverwrite = true;
try
{
fi.CopyTo(System.IO.Path.Combine(di.FullName, fi.Name), IsToOverwrite);
}
catch (System.Exception ex)
{
UnityEngine.Debug.LogError(string.Format("WwiseUnity: Error during installation: {0}.", ex.Message));
return false;
}
return true;
}
// Copy or overwrite destination file with source file.
public static bool OverwriteFile(string srcFilePath, string destFilePath)
{
var fi = new System.IO.FileInfo(srcFilePath);
if (!fi.Exists)
{
UnityEngine.Debug.LogError(string.Format("WwiseUnity: Failed to overwrite. Source is missing: {0}.", srcFilePath));
return false;
}
var di = new System.IO.DirectoryInfo(System.IO.Path.GetDirectoryName(destFilePath));
if (!di.Exists)
di.Create();
const bool IsToOverwrite = true;
try
{
fi.CopyTo(destFilePath, IsToOverwrite);
}
catch (System.Exception ex)
{
UnityEngine.Debug.LogError(string.Format("WwiseUnity: Error during installation: {0}.", ex.Message));
return false;
}
return true;
}
// Move file to destination directory and create the directory when none exists.
public static void MoveFileToDirectory(string srcFilePath, string destDir)
{
var fi = new System.IO.FileInfo(srcFilePath);
if (!fi.Exists)
{
UnityEngine.Debug.LogError(string.Format("WwiseUnity: Failed to move. Source is missing: {0}.", srcFilePath));
return;
}
var di = new System.IO.DirectoryInfo(destDir);
if (!di.Exists)
di.Create();
var destFilePath = System.IO.Path.Combine(di.FullName, fi.Name);
try
{
fi.MoveTo(destFilePath);
}
catch (System.Exception ex)
{
UnityEngine.Debug.LogError(string.Format("WwiseUnity: Error during installation: {0}.", ex.Message));
}
}
// Recursively copy a directory to its destination.
public static bool RecursiveCopyDirectory(System.IO.DirectoryInfo srcDir, System.IO.DirectoryInfo destDir,
System.Collections.Generic.List<string> excludeExtensions = null)
{
if (!srcDir.Exists)
{
UnityEngine.Debug.LogError(string.Format("WwiseUnity: Failed to copy. Source is missing: {0}.", srcDir));
return false;
}
if (!destDir.Exists)
destDir.Create();
// Copy all files.
var files = srcDir.GetFiles();
foreach (var file in files)
{
if (excludeExtensions != null)
{
var fileExt = System.IO.Path.GetExtension(file.Name);
var isFileExcluded = false;
foreach (var ext in excludeExtensions)
{
if (fileExt.ToLower() == ext)
{
isFileExcluded = true;
break;
}
}
if (isFileExcluded)
continue;
}
const bool IsToOverwrite = true;
try
{
file.CopyTo(System.IO.Path.Combine(destDir.FullName, file.Name), IsToOverwrite);
}
catch (System.Exception ex)
{
UnityEngine.Debug.LogError(string.Format("WwiseUnity: Error during installation: {0}.", ex.Message));
return false;
}
}
// Process subdirectories.
var dirs = srcDir.GetDirectories();
foreach (var dir in dirs)
{
// Get destination directory.
var destFullPath = System.IO.Path.Combine(destDir.FullName, dir.Name);
// Recurse
var isSuccess = RecursiveCopyDirectory(dir, new System.IO.DirectoryInfo(destFullPath), excludeExtensions);
if (!isSuccess)
return false;
}
return true;
}
}
public class AkUnityPluginInstallerBase : AkUnityAssetsInstaller
{
private readonly string m_progTitle = "WwiseUnity: Plugin Installation Progress";
public bool InstallPluginByConfig(string config)
{
var pluginSrc = GetPluginSrcPathByConfig(config);
var pluginDest = GetPluginDestPath("");
var progMsg = string.Format("Installing plugin for {0} ({1}) from {2} to {3}.", m_platform, config, pluginSrc,
pluginDest);
UnityEditor.EditorUtility.DisplayProgressBar(m_progTitle, progMsg, 0.5f);
var isSuccess = RecursiveCopyDirectory(new System.IO.DirectoryInfo(pluginSrc),
new System.IO.DirectoryInfo(pluginDest), m_excludes);
if (!isSuccess)
{
UnityEngine.Debug.LogError(string.Format("WwiseUnity: Failed to install plugin for {0} ({1}) from {2} to {3}.",
m_platform, config, pluginSrc, pluginDest));
UnityEditor.EditorUtility.ClearProgressBar();
return false;
}
UnityEditor.EditorUtility.DisplayProgressBar(m_progTitle, progMsg, 1.0f);
UnityEditor.AssetDatabase.Refresh();
UnityEditor.EditorUtility.ClearProgressBar();
UnityEngine.Debug.Log(string.Format("WwiseUnity: Plugin for {0} {1} installed from {2} to {3}.", m_platform, config,
pluginSrc, pluginDest));
return true;
}
public virtual bool InstallPluginByArchConfig(string arch, string config)
{
var pluginSrc = GetPluginSrcPathByArchConfig(arch, config);
var pluginDest = GetPluginDestPath(arch);
var progMsg = string.Format("Installing plugin for {0} ({1}, {2}) from {3} to {4}.", m_platform, arch, config,
pluginSrc, pluginDest);
UnityEditor.EditorUtility.DisplayProgressBar(m_progTitle, progMsg, 0.5f);
var isSuccess = RecursiveCopyDirectory(new System.IO.DirectoryInfo(pluginSrc),
new System.IO.DirectoryInfo(pluginDest), m_excludes);
if (!isSuccess)
{
UnityEngine.Debug.LogError(string.Format("WwiseUnity: Failed to install plugin for {0} ({1}, {2}) from {3} to {4}.",
m_platform, arch, config, pluginSrc, pluginDest));
UnityEditor.EditorUtility.ClearProgressBar();
return false;
}
UnityEditor.EditorUtility.DisplayProgressBar(m_progTitle, progMsg, 1.0f);
UnityEditor.AssetDatabase.Refresh();
UnityEditor.EditorUtility.ClearProgressBar();
UnityEngine.Debug.Log(string.Format("WwiseUnity: Plugin for {0} {1} {2} installed from {3} to {4}.", m_platform, arch,
config, pluginSrc, pluginDest));
return true;
}
protected string GetPluginSrcPathByConfig(string config)
{
return System.IO.Path.Combine(
System.IO.Path.Combine(
System.IO.Path.Combine(System.IO.Path.Combine(System.IO.Path.Combine(m_assetsDir, "Wwise"), "API", "Runtime"),
"Plugins"), m_platform), config);
}
protected string GetPluginSrcPathByArchConfig(string arch, string config)
{
return System.IO.Path.Combine(
System.IO.Path.Combine(
System.IO.Path.Combine(
System.IO.Path.Combine(System.IO.Path.Combine(System.IO.Path.Combine(m_assetsDir, "Wwise"), "API", "Runtime"),
"Plugins"), m_platform), arch), config);
}
protected virtual string GetPluginDestPath(string arch)
{
return m_pluginDir;
}
}
public class AkUnityPluginInstallerMultiArchBase : AkUnityPluginInstallerBase
{
protected override string GetPluginDestPath(string arch)
{
return System.IO.Path.Combine(System.IO.Path.Combine(m_pluginDir, m_platform), arch);
}
}
public class AkDocHelper
{
private static string m_WwiseVersionString = string.Empty;
public static void OpenDoc(string platform)
{
if (m_WwiseVersionString == string.Empty)
{
var temp = AkSoundEngine.GetMajorMinorVersion();
var temp2 = AkSoundEngine.GetSubminorBuildVersion();
m_WwiseVersionString = (temp >> 16) + "." + (temp & 0xFFFF);
if (temp2 >> 16 != 0)
m_WwiseVersionString += "." + (temp2 >> 16);
m_WwiseVersionString += "_" + (temp2 & 0xFFFF);
}
var docUrl = "http://www.audiokinetic.com/library/" + m_WwiseVersionString + "/?source=Unity&id=index.html";
var isConnected = false;
try
{
var request = (System.Net.HttpWebRequest) System.Net.WebRequest.Create("http://www.audiokinetic.com/robots.txt");
request.Timeout = 1000;
request.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;
var response = (System.Net.HttpWebResponse) request.GetResponse();
isConnected = response.StatusCode == System.Net.HttpStatusCode.OK;
}
catch (System.Exception)
{
isConnected = false;
}
if (!isConnected)
{
// Can't access audiokinetic.com, open local doc.
docUrl = GetLocalDocUrl(platform);
if (string.IsNullOrEmpty(docUrl))
return;
}
UnityEngine.Application.OpenURL(docUrl);
}
private static string GetLocalDocUrl(string platform)
{
var docUrl = string.Empty;
var docPath = string.Empty;
var dataPath = UnityEngine.Application.dataPath;
#if UNITY_EDITOR_WIN
var format = (platform == "Windows")
? "{0}/Wwise/Documentation/{1}/en/WwiseUnityIntegrationHelp_en.chm"
: "{0}/Wwise/Documentation/{1}/en/WwiseUnityIntegrationHelp_{1}_en.chm";
docPath = string.Format(format, dataPath, platform);
#else
string DestPath = AkUtilities.GetFullPath(dataPath, "../WwiseUnityIntegrationHelp_en");
docPath = string.Format ("{0}/html/index.html", DestPath);
if (!System.IO.File.Exists(docPath))
UnzipHelp(DestPath);
if (!System.IO.File.Exists(docPath))
{
UnityEngine.Debug.Log("WwiseUnity: Unable to show documentation. Please unzip WwiseUnityIntegrationHelp_AppleCommon_en.zip manually.");
return string.Empty;
}
#endif
var fi = new System.IO.FileInfo(docPath);
if (!fi.Exists)
{
UnityEngine.Debug.LogError(string.Format("WwiseUnity: Failed to find documentation: {0}. Aborted.", docPath));
return string.Empty;
}
docUrl = string.Format("file:///{0}", docPath.Replace(" ", "%20"));
return docUrl;
}
public static void UnzipHelp(string DestPath)
{
// Start by extracting the zip, if it exists
var ZipPath = System.IO.Path.Combine(
System.IO.Path.Combine(
System.IO.Path.Combine(
System.IO.Path.Combine(System.IO.Path.Combine(UnityEngine.Application.dataPath, "Wwise"), "Documentation"),
"AppleCommon"), "en"), "WwiseUnityIntegrationHelp_en.zip");
if (System.IO.File.Exists(ZipPath))
{
var start = new System.Diagnostics.ProcessStartInfo();
start.FileName = "unzip";
start.Arguments = "\"" + ZipPath + "\" -d \"" + DestPath + "\"";
start.UseShellExecute = true;
start.RedirectStandardOutput = false;
var progMsg = "WwiseUnity: Unzipping documentation...";
var progTitle = "Unzipping Wwise documentation";
UnityEditor.EditorUtility.DisplayProgressBar(progTitle, progMsg, 0.5f);
using (var process = System.Diagnostics.Process.Start(start))
{
while (!process.WaitForExit(1000))
System.Threading.Thread.Sleep(100);
try
{
//ExitCode throws InvalidOperationException if the process is hanging
var returnCode = process.ExitCode;
var isBuildSucceeded = returnCode == 0;
if (isBuildSucceeded)
{
UnityEditor.EditorUtility.DisplayProgressBar(progTitle, progMsg, 1.0f);
UnityEngine.Debug.Log("WwiseUnity: Documentation extraction succeeded. ");
}
else
UnityEngine.Debug.LogError("WwiseUnity: Extraction failed.");
UnityEditor.EditorUtility.ClearProgressBar();
}
catch (System.Exception ex)
{
UnityEditor.EditorUtility.ClearProgressBar();
UnityEngine.Debug.LogError(ex.ToString());
UnityEditor.EditorUtility.ClearProgressBar();
}
}
}
}
}
#endif // #if UNITY_EDITOR
@@ -0,0 +1,80 @@
/*******************************************************************************
The content of this file includes portions of the proprietary AUDIOKINETIC Wwise
Technology released in source code form as part of the game integration package.
The content of this file may not be used without valid licenses to the
AUDIOKINETIC Wwise Technology.
Note that the use of the game engine is subject to the Unity(R) Terms of
Service at https://unity3d.com/legal/terms-of-service
License Usage
Licensees holding valid licenses to the AUDIOKINETIC Wwise Technology may use
this file in accordance with the end user license agreement provided with the
software or, alternatively, in accordance with the terms contained
in a written agreement between you and Audiokinetic Inc.
Copyright (c) 2024 Audiokinetic Inc.
*******************************************************************************/
#if UNITY_EDITOR
internal static class AkWwiseIDConverter
{
private static readonly string s_bankDir = UnityEngine.Application.dataPath;
private static readonly string s_converterScript = System.IO.Path.Combine(
System.IO.Path.Combine(System.IO.Path.Combine(UnityEngine.Application.dataPath, "Wwise"), "Tools"),
"WwiseIDConverter.py");
private static readonly string s_progTitle = "WwiseUnity: Converting SoundBank IDs";
[UnityEditor.MenuItem("Assets/Wwise/Convert Wwise SoundBank IDs", false, (int) AkWwiseMenuOrder.ConvertIDs)]
public static void ConvertWwiseSoundBankIDs()
{
var bankIdHeaderPath =
UnityEditor.EditorUtility.OpenFilePanel("Choose Wwise SoundBank ID C++ header", s_bankDir, "h");
if (string.IsNullOrEmpty(bankIdHeaderPath))
{
UnityEngine.Debug.Log("WwiseUnity: User canceled the action.");
return;
}
var start = new System.Diagnostics.ProcessStartInfo();
start.FileName = "python";
start.Arguments = string.Format("\"{0}\" \"{1}\"", s_converterScript, bankIdHeaderPath);
start.UseShellExecute = false;
start.RedirectStandardOutput = true;
var progMsg = "WwiseUnity: Converting C++ SoundBank IDs into C# ...";
UnityEditor.EditorUtility.DisplayProgressBar(s_progTitle, progMsg, 0.5f);
using (var process = System.Diagnostics.Process.Start(start))
{
process.WaitForExit();
try
{
//ExitCode throws InvalidOperationException if the process is hanging
if (process.ExitCode == 0)
{
UnityEditor.EditorUtility.DisplayProgressBar(s_progTitle, progMsg, 1.0f);
UnityEngine.Debug.Log(string.Format(
"WwiseUnity: SoundBank ID conversion succeeded. Find generated Unity script under {0}.", s_bankDir));
}
else
UnityEngine.Debug.LogError("WwiseUnity: Conversion failed.");
UnityEditor.AssetDatabase.Refresh();
}
catch (System.Exception ex)
{
UnityEditor.AssetDatabase.Refresh();
UnityEditor.EditorUtility.ClearProgressBar();
UnityEngine.Debug.LogError(string.Format(
"WwiseUnity: SoundBank ID conversion process failed with exception: {}. Check detailed logs under the folder: Assets/Wwise/Logs.",
ex));
}
UnityEditor.EditorUtility.ClearProgressBar();
}
}
}
#endif // #if UNITY_EDITOR
@@ -0,0 +1,27 @@
/*******************************************************************************
The content of this file includes portions of the proprietary AUDIOKINETIC Wwise
Technology released in source code form as part of the game integration package.
The content of this file may not be used without valid licenses to the
AUDIOKINETIC Wwise Technology.
Note that the use of the game engine is subject to the Unity(R) Terms of
Service at https://unity3d.com/legal/terms-of-service
License Usage
Licensees holding valid licenses to the AUDIOKINETIC Wwise Technology may use
this file in accordance with the end user license agreement provided with the
software or, alternatively, in accordance with the terms contained
in a written agreement between you and Audiokinetic Inc.
Copyright (c) 2024 Audiokinetic Inc.
*******************************************************************************/
#if UNITY_EDITOR
//public class AkWwiseMenu_Linux
//{
// private const string MENU_PATH = "Help/Wwise Help/";
// private const string Platform = "Linux";
// [UnityEditor.MenuItem(MENU_PATH + Platform, false, (int)AkWwiseHelpOrder.WwiseHelpOrder)]
// public static void OpenDoc() { AkDocHelper.OpenDoc(Platform); }
//}
#endif // #if UNITY_EDITOR
@@ -0,0 +1,30 @@
/*******************************************************************************
The content of this file includes portions of the proprietary AUDIOKINETIC Wwise
Technology released in source code form as part of the game integration package.
The content of this file may not be used without valid licenses to the
AUDIOKINETIC Wwise Technology.
Note that the use of the game engine is subject to the Unity(R) Terms of
Service at https://unity3d.com/legal/terms-of-service
License Usage
Licensees holding valid licenses to the AUDIOKINETIC Wwise Technology may use
this file in accordance with the end user license agreement provided with the
software or, alternatively, in accordance with the terms contained
in a written agreement between you and Audiokinetic Inc.
Copyright (c) 2024 Audiokinetic Inc.
*******************************************************************************/
#if UNITY_EDITOR
public class AkWwiseMenu_Mac
{
private const string MENU_PATH = "Help/Wwise Help/";
private const string Platform = "Mac";
[UnityEditor.MenuItem(MENU_PATH + Platform, false, (int) AkWwiseHelpOrder.WwiseHelpOrder)]
public static void OpenDoc()
{
AkDocHelper.OpenDoc(Platform);
}
}
#endif // #if UNITY_EDITOR
@@ -0,0 +1,30 @@
/*******************************************************************************
The content of this file includes portions of the proprietary AUDIOKINETIC Wwise
Technology released in source code form as part of the game integration package.
The content of this file may not be used without valid licenses to the
AUDIOKINETIC Wwise Technology.
Note that the use of the game engine is subject to the Unity(R) Terms of
Service at https://unity3d.com/legal/terms-of-service
License Usage
Licensees holding valid licenses to the AUDIOKINETIC Wwise Technology may use
this file in accordance with the end user license agreement provided with the
software or, alternatively, in accordance with the terms contained
in a written agreement between you and Audiokinetic Inc.
Copyright (c) 2024 Audiokinetic Inc.
*******************************************************************************/
#if UNITY_EDITOR
public class AkWwiseMenu_Windows
{
private const string MENU_PATH = "Help/Wwise Help/";
private const string Platform = "Windows";
[UnityEditor.MenuItem(MENU_PATH + Platform, false, (int) AkWwiseHelpOrder.WwiseHelpOrder)]
public static void OpenDoc()
{
AkDocHelper.OpenDoc(Platform);
}
}
#endif // #if UNITY_EDITOR