UdonSharp - Make a Field editable but not accessible

If a field needs to be editable on the Inspector but not accessed by other UdonBehaviours, declare it [SerializeField] private

[SerializeField] private Vector3 YourField;

Internally, this is still considered to be a public variable, so it can be modified with editor scripts and Get/Set public variable. You won't be able to access it via a field access from other UdonSharp scripts, which is the point.

UdonSharp - Make a Field accessible but not editable

If a field needs to be accessed by other UdonBehaviours but not editable on the inspector, declare it [NonSerialized] public

[NonSerialized] public Vector3 YourField;

This is different to [HideInInspector] in that it may not have an unexpected value if its value was ever serialized into the UdonBehaviour. This will not show up in the Inspector when debugging in Play mode.

UdonSharp - Be more productive by editing and recompiling UdonSharp without refreshing the entire project

If you disable auto-refresh on the project, UdonSharp can still manage to recompile modified UdonSharp files automatically without requiring the entire project to be refreshed.

In order to refresh the project manually, press CTRL-R. You will need to do this if you add files to your project, or edit existing assets such as textures. You don't need to do this if you only edited the contents of a UdonSharp script; the Udon program will be recompiled.

In "Editor > Preferences > General":

This modification will affect all of your projects, not just this one.

Untitled

A small caveat is that some newly added Attributes will not be visible by Editor Scripts.

Use SyncMode.None whenever possible

If there is a very high number (think 500) of UdonBehaviours with SyncMode set anything other than None, the owner of the objects may not be able to send manual synchronizations for several seconds after a player joins.