- Home /
What is the correct syntax for UnityEditor.VersionControl.Provider.GetAssetByPath?
I tried the following as a test,
if (!Provider.enabled || !Provider.isActive) { return false; }
var asset = Provider.GetAssetByPath(Path.GetFullPath(Application.dataPath));
yet asset is always null.
This logic is in a function that is being called from a MenuItem so it is running in the context of the UnityEditor (not in play mode). The path returned from Path.GetFullPath(Application.dataPath) looks perfectly valid.
I am on Windows 10, using Unity 5.2.3f1. Version Control is Perforce.
Answer by Dave-Carlile · Dec 01, 2015 at 01:29 PM
According to the Provider.GetAssetByPath documentation:
Returns null if the path is not known by the Unity Editor.
It seems likely that only assets within the project folder and below would be "known" to the editor. You're trying to get version control information for an object that isn't in the project folder.
I did read that, I also read that according to the Application.dataPath documentation [1],
"Contains the path to the game data folder (Read Only).
The value depends on which platform you are running on:
Unity Editor: /Assets"
In this example, Path.GetFullPath(Application.dataPath) ends up creating a string (I added the quotation marks for readability), "D:\\src\\P4ROOT\\PlutoP4\\DemoV2\\Assets" that when passed to Provider.GetAssetByPath causes a return of null.
Application.dataPath creates "D:/src/P4ROOT/PlutoP4/DemoV2/Assets" and when passed to Provider.GetAssetByPath it also returns null.
However, just "Assets" works fine. I'm thinking the paths may need to be relative rather than fully qualified?
[1]: http://docs.unity3d.com/ScriptReference/Application-dataPath.html
$$anonymous$$y bad - I was thinking of Application.persistentDataPath. But yes, it would make sense that the paths are relative paths. That would be consistent with how Resources.Load works for example. I'm not seeing anything that specific in the documentation but your testing seems to support it.