You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			77 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C#
		
	
			
		
		
	
	
			77 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C#
		
	
using System.Collections;
 | 
						|
using System.Collections.Generic;
 | 
						|
using UnityEngine;
 | 
						|
 | 
						|
 | 
						|
namespace Valve.VR.InteractionSystem
 | 
						|
{
 | 
						|
    [ExecuteInEditMode]
 | 
						|
    public class TeleportURPHelper : MonoBehaviour
 | 
						|
    {
 | 
						|
#if UNITY_URP && UNITY_EDITOR
 | 
						|
        void Start()
 | 
						|
        {
 | 
						|
            if (UnityEditor.PrefabUtility.IsPartOfPrefabInstance(this) == false)
 | 
						|
                return;
 | 
						|
 | 
						|
            string teleportAssetPath = UnityEditor.PrefabUtility.GetPrefabAssetPathOfNearestInstanceRoot(this);
 | 
						|
            GameObject teleportPrefab = UnityEditor.AssetDatabase.LoadAssetAtPath<GameObject>(teleportAssetPath);
 | 
						|
 | 
						|
            Teleport teleport = teleportPrefab.GetComponent<Teleport>();
 | 
						|
            UnityEditor.SerializedObject serializedTeleport = new UnityEditor.SerializedObject(teleport);
 | 
						|
            serializedTeleport.Update();
 | 
						|
            bool changed = false;
 | 
						|
 | 
						|
            changed |= FindURPVersion(serializedTeleport, "areaHighlightedMaterial");
 | 
						|
 | 
						|
            changed |= FindURPVersion(serializedTeleport, "areaLockedMaterial");
 | 
						|
 | 
						|
            changed |= FindURPVersion(serializedTeleport, "areaVisibleMaterial");
 | 
						|
 | 
						|
            changed |= FindURPVersion(serializedTeleport, "pointHighlightedMaterial");
 | 
						|
 | 
						|
            changed |= FindURPVersion(serializedTeleport, "pointLockedMaterial");
 | 
						|
 | 
						|
            changed |= FindURPVersion(serializedTeleport, "pointVisibleMaterial");
 | 
						|
 | 
						|
            if (changed)
 | 
						|
            {
 | 
						|
                serializedTeleport.ApplyModifiedProperties();
 | 
						|
                UnityEditor.EditorUtility.SetDirty(teleport);
 | 
						|
            }
 | 
						|
 | 
						|
            TeleportArc arc = teleportPrefab.GetComponent<TeleportArc>();
 | 
						|
            UnityEditor.SerializedObject serializedArc = new UnityEditor.SerializedObject(arc);
 | 
						|
            serializedArc.Update();
 | 
						|
 | 
						|
            changed = FindURPVersion(serializedArc, "material");
 | 
						|
 | 
						|
            if (changed)
 | 
						|
            {
 | 
						|
                serializedArc.ApplyModifiedProperties();
 | 
						|
                UnityEditor.EditorUtility.SetDirty(arc);
 | 
						|
            }
 | 
						|
 | 
						|
        }
 | 
						|
 | 
						|
        private bool FindURPVersion(UnityEditor.SerializedObject teleportObject, string propertyName)
 | 
						|
        {
 | 
						|
            UnityEditor.SerializedProperty materialProp = teleportObject.FindProperty(propertyName);
 | 
						|
            Material original = materialProp.objectReferenceValue as Material;
 | 
						|
            if (original != null && !original.name.StartsWith("URP"))
 | 
						|
            {
 | 
						|
                string[] mats = UnityEditor.AssetDatabase.FindAssets(string.Format("URP{0} t:material", original.name));
 | 
						|
                if (mats.Length > 0)
 | 
						|
                {
 | 
						|
                    string path = UnityEditor.AssetDatabase.GUIDToAssetPath(mats[0]);
 | 
						|
                    materialProp.objectReferenceValue = UnityEditor.AssetDatabase.LoadAssetAtPath<Material>(path);
 | 
						|
                    return true;
 | 
						|
                }
 | 
						|
 | 
						|
            }
 | 
						|
 | 
						|
            return false;
 | 
						|
        }
 | 
						|
#endif
 | 
						|
    }
 | 
						|
} |