I am tying to make a proper radio button since Unity’s Toggle is implemented incorrectly. If you add the toggle to a Toggle Group then it makes it so that one of the group must always be selected which is correct. However the onValueChanged is being fired even if the radio button does not change, which is incorrect. I am guessing that there is no check being done to prevent toggles added to groups from firing the event if their value does not actually change. It is just being fired as though it were a checkbox. Unfortunately there is no good way to fix this without being able to see the source code for void Toggle::OnPointerClick(). So to fix this I just add my own event handler that checks if the state actually changed and then fire an event to my playmaker fsm if it does actually change.

using UnityEngine;
using UnityEngine.UI;
using System.Collections;

[AddComponentMenu ("UI/Radio Button")]
public class RadioButton : Toggle {
	public string eventName;
	protected PlayMakerFSM fsm;

	protected override void Awake() {
		base.Awake ();
		fsm = GetComponentInParent<PlayMakerFSM>();
		this.onValueChanged.AddListener((value)=> {
			if(value && !isOn) fsm.SendEvent(eventName);
		});
	}
}

But alas, Unity is being intolerably difficult. It will not make the public string eventName visible in the inspector. ARAHRAHR#!#!!!#@$$!@#!#@#!@#!@!

Actually as I posted this I came up with a solution. You can override OnPointerClick because all you have to do is ignore the event if the toggle is already on.

using UnityEngine;
using UnityEngine.UI;
using System.Collections;

[AddComponentMenu ("UI/Radio Button")]
public class RadioButton : Toggle {
	public override void OnPointerClick (UnityEngine.EventSystems.PointerEventData eventData) {
		if(!isOn) {
			base.OnPointerClick(eventData);
		}
	}
}

But I still want to know, why is public string eventName not made visible in the inspector?

Toggle uses a custom editor which you will have to extend to show your new property.
The editor can be found here: https://bitbucket.org/Unity-Technologies/ui/src/0155c39e05ca5d7dcc97d9974256ef83bc122586/UnityEditor.UI/UI/ToggleEditor.cs?at=5.2&fileviewer=file-view-default

override is used on abstract and virtual objects.

You cannot override a non-virtual or static method. The overridden base method must be virtual, abstract, or override.

To use OnPointerClick you can simply ‘implements’ the IPointerClickHandler in the class declaration and the callback will then receive eventData.