Skip to content

Instantly share code, notes, and snippets.

What would you like to do?
Read Only Attribute for Unity (just mark stuff as [ReadOnly] the same way you would use [HideInInspector])
using UnityEngine;
using System;
using System.Reflection;
using System.Text.RegularExpressions;
[AttributeUsage (AttributeTargets.Field,Inherited = true)]
public class ReadOnlyAttribute : PropertyAttribute {}
[UnityEditor.CustomPropertyDrawer (typeof(ReadOnlyAttribute))]
public class ReadOnlyAttributeDrawer : UnityEditor.PropertyDrawer
public override void OnGUI(Rect rect, UnityEditor.SerializedProperty prop, GUIContent label)
bool wasEnabled = GUI.enabled;
GUI.enabled = false;
GUI.enabled = wasEnabled;
Copy link

Flavelius commented May 3, 2018

UnityEditor.EditorGUI.PropertyField(rect,prop, true); //to include children

Copy link

nico202 commented Feb 18, 2019

Hi, what's the license of ReadOnlyAttribute.cs?
Can I use it in a BSD-3 clause project?

Thanks, Nicolò

Copy link

Yolo-Jerome commented Apr 2, 2019

Unfortunately it doesn't fully work for Lists:

[ReadOnly] public List<int> test = new List<int>(){ 1,2,3};


The most "dangerous" value to change is till available.

And it especially doesn't work for nested elements:


where the elements are of type

public class TestClass
    public int num;
    public string text;

[ReadOnly] public List<TestClass> test = new List<TestClass>(){
    new TestClass(),
    new TestClass{num = 2, text = "Hi"},
    new TestClass{num = 3, text = "asd"}

also if it is not in a list like

[ReadOnly] public TestClass test = new TestClass();

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment