- Home /
Saving Runtime Changes (JS)
When using rotation snapping, it creates a floating point onto the platform and misplaces them.
So I made this simple javascript code which snaps the platforms 4 degrees apart on runtime:
var PermChanges : boolean;
var Degree : float = 4;
function Start () {
transform.localRotation.eulerAngles.y = 0;
transform.localRotation.eulerAngles.z =(Mathf.Round(transform.localRotation.eulerAngles.z/4)*4);
transform.localRotation.eulerAngles.x = (Mathf.Round(transform.localRotation.eulerAngles.x/4)*4);
}
When I go back to editor mode, the platforms get back out of the snapped place.
How do I set the code up so if I tick the PermChanges boolean, after exiting play mode it will keep the changes made on runtime (making the tiles be snapped on editor).
Thanks!
Answer by Jessespike · Feb 21, 2015 at 07:47 AM
Unit Snapping
While dragging any Gizmo Axis using the Translate Tool, you can hold the Control key (Command on Mac) to snap to increments defined in the Snap Settings.
You can change the unit distance that is used for the unit snapping using the menu Edit->Snap Settings…
http://docs.unity3d.com/Manual/PositioningGameObjects.html
I don't think there's a non-hacky way to do what you're asking. Play mode and edit mode are obviously different. What you could possibly do is: Make your changes in play mode, copy your transform values and paste them back in when you return to edit mode. Another solution could be write your own editor script, but that's not much different the existing Snap Preferenes.
I use the rotation snapping control, but it always adds a floating point. Thanks.
I noticed that too, but that's the nature of floats. Is that 0.0001 really causing problems? If so, you'll have to write your own editor tool. I wrote a test snippet this morning, it might help you. You'll probably want to expand it or write your own. http://docs.unity3d.com/$$anonymous$$anual/editor-CustomEditors.html
using UnityEngine;
using UnityEditor;
public class SnapTransformEditor : ScriptableWizard {
[$$anonymous$$enuItem ("Selection/Truncate Transforms")]
static void RemoveFloatPrecision() {
foreach( GameObject obj in Selection.GetFiltered( typeof( GameObject ), Selection$$anonymous$$ode.ExcludePrefab ) )
{
obj.transform.position = new Vector3($$anonymous$$athf.Round(obj.transform.position.x),
$$anonymous$$athf.Round(obj.transform.position.y),
$$anonymous$$athf.Round(obj.transform.position.z));
obj.transform.rotation = Quaternion.Euler($$anonymous$$athf.Round(obj.transform.rotation.eulerAngles.x),
$$anonymous$$athf.Round(obj.transform.rotation.eulerAngles.y),
$$anonymous$$athf.Round(obj.transform.rotation.eulerAngles.z));
}
}
}
Your answer
Follow this Question
Related Questions
2d javascript How to change a sprite during runtime 1 Answer
Why does my rotation lock? 2 Answers
transform.rotation.z gives different value than expected 1 Answer
Euler Angle problem in If check 1 Answer
Store initial rotation in JavaScript 2 Answers