Hello, I have this problem when i hit build on the android 1) Library\PackageCache\com.unity.textmeshpro@2.0.1\Scripts\Runtime\TMP_UpdateManager.cs(134,43): error CS0246: The type or namespace name 'ScriptableRenderContext' could not be found (are you missing a using directive or an assembly reference?) 2) C:\Program Files\Unity\Hub\Editor\2019.1.12f1\Editor\Data\Resources\PackageManager\BuiltInPackages\com.unity.timeline\Runtime\Animation\AnimationOutputWeightProcessor.cs(21,16): error CS0122: 'AnimationMotionXToDeltaPlayable' is inaccessible due to its protection level 3)C:\Program Files\Unity\Hub\Editor\2019.1.12f1\Editor\Data\Resources\PackageManager\BuiltInPackages\com.unity.timeline\Runtime\Events\Signals\SignalAsset.cs(11,6): error CS0122: 'AssetFileNameExtensionAttribute' is inaccessible due to its protection level Help please! Code for the first one (cs0246): Code (CSharp): using UnityEngine; using UnityEngine.UI; using System.Collections.Generic; #if UNITY_2019_1_OR_NEWER using UnityEngine.Rendering; #elif UNITY_2018_1_OR_NEWER using UnityEngine.Experimental.Rendering; #endif namespace TMPro { public class TMP_UpdateManager { private static TMP_UpdateManager s_Instance; private readonly List<TMP_Text> m_LayoutRebuildQueue = new List<TMP_Text>(); private Dictionary<int, int> m_LayoutQueueLookup = new Dictionary<int, int>(); private readonly List<TMP_Text> m_GraphicRebuildQueue = new List<TMP_Text>(); private Dictionary<int, int> m_GraphicQueueLookup = new Dictionary<int, int>(); private readonly List<TMP_Text> m_InternalUpdateQueue = new List<TMP_Text>(); private Dictionary<int, int> m_InternalUpdateLookup = new Dictionary<int, int>(); //private bool m_PerformingGraphicRebuild; //private bool m_PerformingLayoutRebuild; /// <summary> /// Get a singleton instance of the registry /// </summary> public static TMP_UpdateManager instance { get { if (TMP_UpdateManager.s_Instance == null) TMP_UpdateManager.s_Instance = new TMP_UpdateManager(); return TMP_UpdateManager.s_Instance; } } /// <summary> /// Register to receive rendering callbacks. /// </summary> protected TMP_UpdateManager() { Camera.onPreCull += OnCameraPreCull; #if UNITY_2019_1_OR_NEWER RenderPipelineManager.beginFrameRendering += OnBeginFrameRendering; #elif UNITY_2018_1_OR_NEWER RenderPipeline.beginFrameRendering += OnBeginFrameRendering; #endif } /// <summary> /// Function used as a replacement for LateUpdate() to handle SDF Scale updates and Legacy Animation updates. /// </summary> /// <param name="textObject"></param> internal static void RegisterTextObjectForUpdate(TMP_Text textObject) { TMP_UpdateManager.instance.InternalRegisterTextObjectForUpdate(textObject); } private void InternalRegisterTextObjectForUpdate(TMP_Text textObject) { int id = textObject.GetInstanceID(); if (this.m_InternalUpdateLookup.ContainsKey(id)) return; m_InternalUpdateLookup[id] = id; this.m_InternalUpdateQueue.Add(textObject); return; } /// <summary> /// Function to register elements which require a layout rebuild. /// </summary> /// <param name="element"></param> public static void RegisterTextElementForLayoutRebuild(TMP_Text element) { TMP_UpdateManager.instance.InternalRegisterTextElementForLayoutRebuild(element); } private bool InternalRegisterTextElementForLayoutRebuild(TMP_Text element) { int id = element.GetInstanceID(); if (this.m_LayoutQueueLookup.ContainsKey(id)) return false; m_LayoutQueueLookup[id] = id; this.m_LayoutRebuildQueue.Add(element); return true; } /// <summary> /// Function to register elements which require a layout rebuild. /// </summary> /// <param name="element"></param> public static void RegisterTextElementForGraphicRebuild(TMP_Text element) { TMP_UpdateManager.instance.InternalRegisterTextElementForGraphicRebuild(element); } private bool InternalRegisterTextElementForGraphicRebuild(TMP_Text element) { int id = element.GetInstanceID(); if (this.m_GraphicQueueLookup.ContainsKey(id)) return false; m_GraphicQueueLookup[id] = id; this.m_GraphicRebuildQueue.Add(element); return true; } /// <summary> /// Callback which occurs just before the Scriptable Render Pipeline (SRP) begins rendering. /// </summary> /// <param name="cameras"></param> #if UNITY_2019_1_OR_NEWER public void OnBeginFrameRendering(ScriptableRenderContext renderContext, Camera[] cameras) #elif UNITY_2018_1_OR_NEWER void OnBeginFrameRendering(Camera[] cameras) #endif { // Exclude the PreRenderCamera #if UNITY_EDITOR if (cameras.Length == 1 && cameras[0].cameraType == CameraType.Preview) return; #endif DoRebuilds(); } /// <summary> /// Callback which occurs just before the cam is rendered. /// </summary> /// <param name="cam"></param> void OnCameraPreCull(Camera cam) { // Exclude the PreRenderCamera #if UNITY_EDITOR if (cam.cameraType == CameraType.Preview) return; #endif DoRebuilds(); } /// <summary> /// Process the rebuild requests in the rebuild queues. /// </summary> void DoRebuilds() { // Handle text objects the require an update either as a result of scale changes or legacy animation. for (int i = 0; i < m_InternalUpdateQueue.Count; i++) { m_InternalUpdateQueue[i].InternalUpdate(); } // Handle Layout Rebuild Phase for (int i = 0; i < m_LayoutRebuildQueue.Count; i++) { m_LayoutRebuildQueue[i].Rebuild(CanvasUpdate.Prelayout); } if (m_LayoutRebuildQueue.Count > 0) { m_LayoutRebuildQueue.Clear(); m_LayoutQueueLookup.Clear(); } // Handle Graphic Rebuild Phase for (int i = 0; i < m_GraphicRebuildQueue.Count; i++) { m_GraphicRebuildQueue[i].Rebuild(CanvasUpdate.PreRender); } // If there are no objects in the queue, we don't need to clear the lists again. if (m_GraphicRebuildQueue.Count > 0) { m_GraphicRebuildQueue.Clear(); m_GraphicQueueLookup.Clear(); } } internal static void UnRegisterTextObjectForUpdate(TMP_Text textObject) { TMP_UpdateManager.instance.InternalUnRegisterTextObjectForUpdate(textObject); } /// <summary> /// Function to unregister elements which no longer require a rebuild. /// </summary> /// <param name="element"></param> public static void UnRegisterTextElementForRebuild(TMP_Text element) { TMP_UpdateManager.instance.InternalUnRegisterTextElementForGraphicRebuild(element); TMP_UpdateManager.instance.InternalUnRegisterTextElementForLayoutRebuild(element); TMP_UpdateManager.instance.InternalUnRegisterTextObjectForUpdate(element); } private void InternalUnRegisterTextElementForGraphicRebuild(TMP_Text element) { int id = element.GetInstanceID(); TMP_UpdateManager.instance.m_GraphicRebuildQueue.Remove(element); m_GraphicQueueLookup.Remove(id); } private void InternalUnRegisterTextElementForLayoutRebuild(TMP_Text element) { int id = element.GetInstanceID(); TMP_UpdateManager.instance.m_LayoutRebuildQueue.Remove(element); m_LayoutQueueLookup.Remove(id); } private void InternalUnRegisterTextObjectForUpdate(TMP_Text textObject) { int id = textObject.GetInstanceID(); TMP_UpdateManager.instance.m_InternalUpdateQueue.Remove(textObject); m_InternalUpdateLookup.Remove(id); } } } code for the 2: (3 is kind of the same i think) Code (CSharp): using System.Collections.Generic; using UnityEngine.Animations; using UnityEngine.Playables; namespace UnityEngine.Timeline { // Does a post processing of the weights on an animation track to properly normalize // the mixer weights so that blending does not bring default poses and subtracks, layers and // layer graphs blend correctly class AnimationOutputWeightProcessor : ITimelineEvaluateCallback { struct WeightInfo { public Playable mixer; public Playable parentMixer; public int port; public bool modulate; } public AnimationPlayableOutput m_Output; public AnimationMotionXToDeltaPlayable m_MotionXPlayable; public AnimationMixerPlayable m_PoseMixer; public AnimationLayerMixerPlayable m_LayerMixer; readonly List<WeightInfo> m_Mixers = new List<WeightInfo>(); public AnimationOutputWeightProcessor(AnimationPlayableOutput output) { m_Output = output; output.SetWeight(0); FindMixers(); } static Playable FindFirstAnimationPlayable(Playable p) { var currentNode = p; while (currentNode.IsValid() && currentNode.GetInputCount() > 0 && !currentNode.IsPlayableOfType<AnimationLayerMixerPlayable>() && !currentNode.IsPlayableOfType<AnimationMotionXToDeltaPlayable>() && !currentNode.IsPlayableOfType<AnimationMixerPlayable>()) currentNode = currentNode.GetInput(0); return currentNode; } void FindMixers() { m_Mixers.Clear(); m_PoseMixer = AnimationMixerPlayable.Null; m_LayerMixer = AnimationLayerMixerPlayable.Null; m_MotionXPlayable = AnimationMotionXToDeltaPlayable.Null; var playable = m_Output.GetSourcePlayable(); var outputPort = m_Output.GetSourceOutputPort(); if (!playable.IsValid() || outputPort < 0 || outputPort >= playable.GetInputCount()) return; var mixer = FindFirstAnimationPlayable(playable.GetInput(outputPort)); Playable motionXPlayable = mixer; if (motionXPlayable.IsPlayableOfType<AnimationMotionXToDeltaPlayable>()) { m_MotionXPlayable = (AnimationMotionXToDeltaPlayable)motionXPlayable; mixer = m_MotionXPlayable.GetInput(0); } if (mixer.IsValid() && mixer.IsPlayableOfType<AnimationMixerPlayable>()) { m_PoseMixer = (AnimationMixerPlayable)mixer; Playable layerMixer = m_PoseMixer.GetInput(0); if (layerMixer.IsValid() && layerMixer.IsPlayableOfType<AnimationLayerMixerPlayable>()) m_LayerMixer = (AnimationLayerMixerPlayable)layerMixer; } else if (mixer.IsValid() && mixer.IsPlayableOfType<AnimationLayerMixerPlayable>()) { m_LayerMixer = (AnimationLayerMixerPlayable)mixer; } if (!m_LayerMixer.IsValid()) return; var count = m_LayerMixer.GetInputCount(); for (var i = 0; i < count; i++) { FindMixers(m_LayerMixer, i, m_LayerMixer.GetInput(i)); } } // Recursively accumulates mixers. void FindMixers(Playable parent, int port, Playable node) { if (!node.IsValid()) return; var type = node.GetPlayableType(); if (type == typeof(AnimationMixerPlayable) || type == typeof(AnimationLayerMixerPlayable)) { // use post fix traversal so children come before parents int subCount = node.GetInputCount(); for (int j = 0; j < subCount; j++) { FindMixers(node, j, node.GetInput(j)); } // if we encounter a layer mixer, we assume there is nesting occuring // and we modulate the weight instead of overwriting it. var weightInfo = new WeightInfo { parentMixer = parent, mixer = node, port = port, modulate = (type == typeof(AnimationLayerMixerPlayable)) }; m_Mixers.Add(weightInfo); } else { var count = node.GetInputCount(); for (var i = 0; i < count; i++) { FindMixers(parent, port, node.GetInput(i)); } } } public void Evaluate() { m_Output.SetWeight(1); for (int i = 0; i < m_Mixers.Count; i++) { var mixInfo = m_Mixers[i]; float weight = mixInfo.modulate ? mixInfo.parentMixer.GetInputWeight(mixInfo.port) : 1.0f; mixInfo.parentMixer.SetInputWeight(mixInfo.port, weight * WeightUtility.NormalizeMixer(mixInfo.mixer)); } float normalizedWeight = WeightUtility.NormalizeMixer(m_LayerMixer); var animator = m_Output.GetTarget(); if (animator == null) return; // AnimationMotionXToDeltaPlayable must blend with default values when previewing tracks with absolute root motion. bool blendMotionX = !Application.isPlaying && m_MotionXPlayable.IsValid() && m_MotionXPlayable.IsAbsoluteMotion(); if (blendMotionX) { m_PoseMixer.SetInputWeight(0, normalizedWeight); m_PoseMixer.SetInputWeight(1, 1.0f - normalizedWeight); } else { if (!m_PoseMixer.Equals(AnimationMixerPlayable.Null)) { m_PoseMixer.SetInputWeight(0, 1.0f); m_PoseMixer.SetInputWeight(1, 0.0f); } m_Output.SetWeight(normalizedWeight); } } } }
Are you actually using TextMesh Pro and Timeline? If not, I would suggest going to Package Manager and removing those packages (if Timeline is a package, I don't recall off-hand). Not exactly a solution to the problem, but a way to avoid it.