- Home /
Unity Standard Assets' CrossPlatformInputInitialize has errors
I have imported the CrossPlatformInputInitialize.cs from Unity Standard Assets so that I can use the unity first person controller. In the editor, I have no issues what-so-ever. The game runs without an errors, and console show no errors. However, once I attempt to build the game, I get the following in the console:
Assets/Scripts/CrossPlatformInput/CrossPlatformInputInitialize.cs(3,7): error CS0246: The type or namespace name
UnityEditor' could not be found. Are you missing a using directive or an assembly reference? - Assets/Scripts/CrossPlatformInput/CrossPlatformInputInitialize.cs(98,24): error CS0246: The type or namespace name
BuildTargetGroup' could not be found. Are you missing a using directive or an assembly reference?Assets/Scripts/CrossPlatformInput/CrossPlatformInputInitialize.cs(7,6): error CS0246: The type or namespace name
InitializeOnLoad' could not be found. Are you missing a using directive or an assembly reference? - Assets/Scripts/CrossPlatformInput/CrossPlatformInputInitialize.cs(7,6): error CS0246: The type or namespace name
InitializeOnLoadAttribute' could not be found. Are you missing a using directive or an assembly reference?Assets/Scripts/CrossPlatformInput/CrossPlatformInputInitialize.cs(141,52): error CS0246: The type or namespace name
BuildTargetGroup' could not be found. Are you missing a using directive or an assembly reference? - Assets/Scripts/CrossPlatformInput/CrossPlatformInputInitialize.cs(3,7): error CS0246: The type or namespace name
UnityEditor' could not be found. Are you missing a using directive or an assembly reference?Error building Player because scripts had compiler errors
My script hasn't been modified and looks like this:
using System;
using System.Collections.Generic;
using UnityEditor;
namespace UnityStandardAssets.CrossPlatformInput.Inspector
{
[InitializeOnLoad]
public class CrossPlatformInitialize
{
// Custom compiler defines:
//
// CROSS_PLATFORM_INPUT : denotes that cross platform input package exists, so that other packages can use their CrossPlatformInput functions.
// EDITOR_MOBILE_INPUT : denotes that mobile input should be used in editor, if a mobile build target is selected. (i.e. using Unity Remote app).
// MOBILE_INPUT : denotes that mobile input should be used right now!
static CrossPlatformInitialize()
{
var defines = GetDefinesList(buildTargetGroups[0]);
if (!defines.Contains("CROSS_PLATFORM_INPUT"))
{
SetEnabled("CROSS_PLATFORM_INPUT", true, false);
SetEnabled("MOBILE_INPUT", true, true);
}
}
[MenuItem("Mobile Input/Enable")]
private static void Enable()
{
SetEnabled("MOBILE_INPUT", true, true);
switch (EditorUserBuildSettings.activeBuildTarget)
{
case BuildTarget.Android:
case BuildTarget.iOS:
case BuildTarget.WP8Player:
case BuildTarget.BlackBerry:
case BuildTarget.PSM:
case BuildTarget.Tizen:
case BuildTarget.WSAPlayer:
EditorUtility.DisplayDialog("Mobile Input",
"You have enabled Mobile Input. You'll need to use the Unity Remote app on a connected device to control your game in the Editor.",
"OK");
break;
default:
EditorUtility.DisplayDialog("Mobile Input",
"You have enabled Mobile Input, but you have a non-mobile build target selected in your build settings. The mobile control rigs won't be active or visible on-screen until you switch the build target to a mobile platform.",
"OK");
break;
}
}
[MenuItem("Mobile Input/Enable", true)]
private static bool EnableValidate()
{
var defines = GetDefinesList(mobileBuildTargetGroups[0]);
return !defines.Contains("MOBILE_INPUT");
}
[MenuItem("Mobile Input/Disable")]
private static void Disable()
{
SetEnabled("MOBILE_INPUT", false, true);
switch (EditorUserBuildSettings.activeBuildTarget)
{
case BuildTarget.Android:
case BuildTarget.iOS:
case BuildTarget.WP8Player:
case BuildTarget.BlackBerry:
EditorUtility.DisplayDialog("Mobile Input",
"You have disabled Mobile Input. Mobile control rigs won't be visible, and the Cross Platform Input functions will always return standalone controls.",
"OK");
break;
}
}
[MenuItem("Mobile Input/Disable", true)]
private static bool DisableValidate()
{
var defines = GetDefinesList(mobileBuildTargetGroups[0]);
return defines.Contains("MOBILE_INPUT");
}
private static BuildTargetGroup[] buildTargetGroups = new BuildTargetGroup[]
{
BuildTargetGroup.Standalone,
BuildTargetGroup.WebPlayer,
BuildTargetGroup.Android,
BuildTargetGroup.iOS,
BuildTargetGroup.WP8,
BuildTargetGroup.BlackBerry
};
private static BuildTargetGroup[] mobileBuildTargetGroups = new BuildTargetGroup[]
{
BuildTargetGroup.Android,
BuildTargetGroup.iOS,
BuildTargetGroup.WP8,
BuildTargetGroup.BlackBerry,
BuildTargetGroup.PSM,
BuildTargetGroup.Tizen,
BuildTargetGroup.WSA
};
private static void SetEnabled(string defineName, bool enable, bool mobile)
{
//Debug.Log("setting "+defineName+" to "+enable);
foreach (var group in mobile ? mobileBuildTargetGroups : buildTargetGroups)
{
var defines = GetDefinesList(group);
if (enable)
{
if (defines.Contains(defineName))
{
return;
}
defines.Add(defineName);
}
else
{
if (!defines.Contains(defineName))
{
return;
}
while (defines.Contains(defineName))
{
defines.Remove(defineName);
}
}
string definesString = string.Join(";", defines.ToArray());
PlayerSettings.SetScriptingDefineSymbolsForGroup(group, definesString);
}
}
private static List<string> GetDefinesList(BuildTargetGroup group)
{
return new List<string>(PlayerSettings.GetScriptingDefineSymbolsForGroup(group).Split(';'));
}
}
}
I don't know what is wrong, can anyone help?
I can tell it's because the compiler can't find UnityEditor, BuildTergetGroup, and InitializeOnLoadAttribute; but I don't know what to do to fix it
Is there a way for me to simply disable this script, without breaking the player controllers?
Could someone please help me understand line 113? Is this a foreach-ternary combo? Does it mean foreach variable 'group' in 'mobile' if 'group' actually was in 'mobile' then 'mobileBuildTargetGroups' otherwise 'buildTargetGroups'? How do I read this line correctly?
Answer by 14ercooper · Aug 11, 2015 at 03:36 PM
I managed to fix the error. It now only works as a standalone build, but it can be compiled. using System; using System.Collections.Generic; using UnityEngine;
namespace UnityStandardAssets.CrossPlatformInput.Inspector
{
//[InitializeOnLoad]
public class CrossPlatformInitialize
{
// Custom compiler defines:
//
// CROSS_PLATFORM_INPUT : denotes that cross platform input package exists, so that other packages can use their CrossPlatformInput functions.
// EDITOR_MOBILE_INPUT : denotes that mobile input should be used in editor, if a mobile build target is selected. (i.e. using Unity Remote app).
// MOBILE_INPUT : denotes that mobile input should be used right now!
static CrossPlatformInitialize()
{
return;
}
private static void Enable()
{
return;
}
private static bool EnableValidate()
{
return true;
}
private static void Disable()
{
return;
}
private static bool DisableValidate()
{
return true;
}
//private static BuildTargetGroup[] buildTargetGroups = new BuildTargetGroup[]
// {
// BuildTargetGroup.Standalone,
// BuildTargetGroup.WebPlayer,
// BuildTargetGroup.Android,
// BuildTargetGroup.iOS,
// BuildTargetGroup.WP8,
// BuildTargetGroup.BlackBerry
// };
//private static BuildTargetGroup[] mobileBuildTargetGroups = new BuildTargetGroup[]
// {
// BuildTargetGroup.Android,
// BuildTargetGroup.iOS,
// BuildTargetGroup.WP8,
// BuildTargetGroup.BlackBerry,
// BuildTargetGroup.PSM,
// BuildTargetGroup.Tizen,
// BuildTargetGroup.WSA
// };
private static void SetEnabled(string defineName, bool enable, bool mobile)
{
return;
}
//private static List<string> GetDefinesList(BuildTargetGroup group)
//{
// return new List<string>(PlayerSettings.GetScriptingDefineSymbolsForGroup(group).Split(';'));
//}
}
}
Your answer
Follow this Question
Related Questions
importing standard assets fails 2 Answers
Standard assets broken? 0 Answers
Modifying Waypoint Circuit script 3 Answers
Where did Sunshafts go? 1 Answer
Water/Beach foam with unity water 0 Answers