No edit summary |
No edit summary |
||
Line 8: | Line 8: | ||
<pre class="code"><span style="background: white; color: black;">PM> <span style="background-color: #ffff00;">Install-Package EcoCore</span> | <pre class="code"><span style="background: white; color: black;">PM> <span style="background-color: #ffff00;">Install-Package EcoCore</span> | ||
Attempting to gather dependency information for package 'EcoCore.7.0.0.8536' with respect to project 'ClassLibrary1', targeting <span style="background-color: #ffff00;">'.NETFramework,Version=v3.5,Profile=Unity Full v3.5'</span> | Attempting to gather dependency information for package 'EcoCore.7.0.0.8536' with respect to project 'ClassLibrary1', targeting <span style="background-color: #ffff00;">'.NETFramework,Version=v3.5,Profile=Unity Full v3.5'</span> | ||
Attempting to resolve dependencies for package 'EcoCore.7.0.0.8536' with DependencyBehavior 'Lowest' | |||
Resolving actions to install package 'EcoCore.7.0.0.8536' | |||
Resolved actions to install package 'EcoCore.7.0.0.8536' | |||
GET https://api.nuget.org/packages/ecocore.7.0.0.8536.nupkg | |||
Installing EcoCore 7.0.0.8536. | |||
Adding package 'EcoCore.7.0.0.8536' to folder 'c:\users\hasse\documents\visual studio 2015\Projects\ClassLibrary2\packages' | |||
Added package 'EcoCore.7.0.0.8536' to folder 'c:\users\hasse\documents\visual studio 2015\Projects\ClassLibrary2\packages' | |||
Added package 'EcoCore.7.0.0.8536' to 'packages.config' | |||
Successfully installed 'EcoCore 7.0.0.8536' to ClassLibrary1 | |||
</span></pre> </html> | </span></pre> </html> | ||
Revision as of 20:47, 28 October 2018
Unity3D use Mono – and Mono builds do not really follow the usual .net versioning with 2.0,3.5 etc… There is a special .net Framework edition you must use. You get this by installing the Visual Studio 2015 Tools for Unity. I would paste link – but I think its better if you google “Visual Studio 2015 Tools for Unity”.
This framework will show up like this:
I have added this to our build script and it will be part of the EcoCore package on nuget – so once you have a class library with Target Framework Unity 3.5 .net full Base Class Libraries you can go like this in the package manager console:
PM> Install-Package EcoCore
Attempting to gather dependency information for package 'EcoCore.7.0.0.8536' with respect to project 'ClassLibrary1', targeting '.NETFramework,Version=v3.5,Profile=Unity Full v3.5'
Attempting to resolve dependencies for package 'EcoCore.7.0.0.8536' with DependencyBehavior 'Lowest'
Resolving actions to install package 'EcoCore.7.0.0.8536'
Resolved actions to install package 'EcoCore.7.0.0.8536'
GET https://api.nuget.org/packages/ecocore.7.0.0.8536.nupkg
Installing EcoCore 7.0.0.8536.
Adding package 'EcoCore.7.0.0.8536' to folder 'c:\users\hasse\documents\visual studio 2015\Projects\ClassLibrary2\packages'
Added package 'EcoCore.7.0.0.8536' to folder 'c:\users\hasse\documents\visual studio 2015\Projects\ClassLibrary2\packages'
Added package 'EcoCore.7.0.0.8536' to 'packages.config'
Successfully installed 'EcoCore 7.0.0.8536' to ClassLibrary1
After that you will find the MDriven Assemblies in you project:
That was requirement 1.
Next step is to provide an EcoSpace and a Model for the project.
I suggest that you add a temporary project that has these – drag them over – then throw away the left overs:
Also delete the Class1 if you have it – since we don't want it and our default model contains another Class1.
Of course we might want use an existing model – then you would use a file link to this model and Package folder (EcoProject1).
Do a little modeling and then generate code:
We will still have some errors but they will easily fixed:
We do not have access to the PersistenceMapperSharer here (its main use is server side when many clients share the same PersistenceMapper). I will change to a PersistenceMapperXml for local storage in an xml file.
private Eco.Persistence.PersistenceMapperSharer persistenceMapperSharer1; /// <summary> /// Clean up any resources being used. /// </summary> protected override void Dispose(bool disposing) { if (disposing) { Active = false; if (this.components != null) { this.components.Dispose(); } } base.Dispose(disposing); } private void InitializeComponent() { this.persistenceMapperSharer1 = new Eco.Persistence.PersistenceMapperSharer(); this.persistenceMapperSharer1.MapperProviderTypeName = "EcoProject1.EcoSpaceAndModel1.EcoProject1PMP"; this.PersistenceMapper = this.persistenceMapperSharer1; Eco.Persistence.PersistenceMapperXml xmlpm = new Eco.Persistence.PersistenceMapperXml(); xmlpm.FileName = @"c:\temp\Gamedata10.xml"; this.PersistenceMapper = xmlpm; }
That was requirement 2.
To get access to Unity3D I must reference the UnityEngine: I found it here C:\Program Files\Unity\Editor\Data\PlaybackEngines\WindowsStandaloneSupport\Managed\UnityEngine.dll
Once we have that we can construct our Information access
using System; using System.Collections.Generic; using System.Linq; using System.Text; using UnityEngine; namespace ClassLibrary1 { public class MyScriptThatUseMDriven: MonoBehaviour { } }
MonoBehaviour will be found by the Unity runtime – and it will see if the object has a Start and an Update Method:
void Start() { Debug.Log("Start!!! works?"); } void Update() { Debug.Log("works?"); }
Now let us start Unity – create a project or find the project we want to use our information in.
I need to make my Assmbly and its dependcies available to unity.
I set a build event on my project to copy over everything from my bin folder – but I set the “Copy Local” of UnityEngine.dll to FALSE. This is because Unity will have its own copy of this important assembly:
The text in Post-Build is: “xcopy "$(TargetDir)*.*" "C:\temp\TheMDrivenTestProject1000\Assets\MyVSAssemblies" /Y” (I created a Folder in Unity called MyVSAssemblies)
I now build my assembly in VS and then the post-build-event copies the result to my Unity project. As a result Unity should find out class that implements MonoBehaviour:
To get Unity to find any reason for actually executing our script as part of the game – we must associate the script with a GameObject. So I add an empty GameObject that has the only purpose to be a reference to our script.
I then drag my script onto this game object:
I can now verify that the script works by hitting Play in Unity and watch for my Debug.Log messages:
So we have come pretty far. Now we can now make a prefab in Unity (look up this on a Unity blog) and call it “Player”.
Oh and one note about the Console – you will find compilation errors here like this:
In this case it says I am missing a reference to WindowsBase – and they I need to add it – and set Copy Local.
I create a Prefab and call it MyCarPrefab:
It has a Text Mesh and I use that to show the score. In Start I create prefabs from my Player objects, and spread them over the terrain:
void Start() { Debug.Log("Start!!! works?"); _es=new EcoProject1EcoSpace(); _es.Active = true; var players=_es.Extents.AllInstances<Player>(); int c = 0; foreach (var x in players) { c++; GameObject go = (GameObject)Instantiate(Resources.Load("MyCarPrefab")); var p = go.transform.position; p.Set(p.x + (c * 2.5f), p.y + (c * 2), p.z/*+ (c * 1)*/); go.transform.position = p; go.GetComponentInChildren<TextMesh>().text = x.Score.ToString(); } }
Put since I do not have any Player-objects yet I turn to the MDriven debugger to create a few in the xml file c:\temp\Gamedata10.xml
Lastly I save them by switching to DirtyObjects tab and press Update selected:
And then I get my cars and their scores like this:
Ok – that’s it for now
We also did this clip that shows the process: