Fix clearing cluster property

This commit is contained in:
Pascal Serrarens 2026-05-26 12:54:37 +02:00
parent 1a7ca0e298
commit b7288b676a
6 changed files with 1824 additions and 25 deletions

View File

@ -19,24 +19,21 @@ namespace NanoBrain.Unity {
clusterView.initialized = false;
}
private const float padding = 4f;
private const float elementHeight = 64f; // height reserved for the VisualElement
private const float padding = 0f;//4f;
private const float graphHeight = 500f; // height reserved for the VisualElement
private static ClusterView clusterView;
private static UnityEngine.Object selectedTarget;
public override float GetPropertyHeight(SerializedProperty property, GUIContent label) {
if (Cluster_Drawer.clusterView == null)
return 0;
float height = EditorGUIUtility.singleLineHeight + padding;
if (Cluster_Drawer.clusterView == null)
// When no cluster is viewed
return height;
SerializedProperty prefabProp = property.FindPropertyRelative(nameof(Cluster.prefab));
if (prefabProp.objectReferenceValue != null && Cluster_Drawer.clusterView.isOpen) {
height += padding + elementHeight;
height = 500;
height = graphHeight;
}
else
height = 18;
return height;
}
@ -56,26 +53,33 @@ namespace NanoBrain.Unity {
SerializedProperty prefabProp = property.FindPropertyRelative(nameof(Cluster.prefab));
// Draw the object field on the top line
Rect fieldRect = new(position.x, position.y, position.width, EditorGUIUtility.singleLineHeight);
Rect fieldRect = new(position.x, position.y, position.width, EditorGUIUtility.singleLineHeight + padding);
EditorGUI.BeginChangeCheck();
EditorGUI.PropertyField(fieldRect, prefabProp, label);
// If a new prefab has been selected
if (EditorGUI.EndChangeCheck()) {
// Ensure the changed prefab is changed in the object
prefabProp.serializedObject.ApplyModifiedProperties();
ClusterPrefab clusterPrefab = prefabProp.objectReferenceValue as ClusterPrefab;
if (clusterPrefab != null) {
Cluster newCluster = new(clusterPrefab);
SerializedObject serializedObject = property.serializedObject;
foreach (UnityEngine.Object targetObject in serializedObject.targetObjects) {
var parent = SerializedPropertyUtility.GetParentObjectAndMember(targetObject, property.propertyPath, out var memberInfo, out int outIndex);
if (parent != null && memberInfo is FieldInfo fieldInfo) {
fieldInfo.SetValue(parent, newCluster);
EditorUtility.SetDirty(targetObject);
}
}
SetInstance(property, newCluster);
// SerializedObject serializedObject = property.serializedObject;
// foreach (UnityEngine.Object targetObject in serializedObject.targetObjects) {
// object parent = SerializedPropertyUtility.GetParentObjectAndMember(targetObject, property.propertyPath, out var memberInfo, out int outIndex);
// if (parent != null && memberInfo is FieldInfo fieldInfo) {
// fieldInfo.SetValue(parent, newCluster);
// EditorUtility.SetDirty(targetObject);
// }
// }
}
else {
// No prefab selected -> no cluster instance
SetInstance(property, null);
}
}
// If a brain has been selected
if (prefabProp.objectReferenceValue != null) {
// Graph is not shown when multi-editing
if (property.serializedObject.targetObjects.Length == 1) {
@ -123,6 +127,17 @@ namespace NanoBrain.Unity {
EditorGUI.EndProperty();
}
private static void SetInstance(SerializedProperty property, Cluster newCluster) {
SerializedObject serializedObject = property.serializedObject;
foreach (UnityEngine.Object targetObject in serializedObject.targetObjects) {
object parent = SerializedPropertyUtility.GetParentObjectAndMember(targetObject, property.propertyPath, out var memberInfo, out int outIndex);
if (parent != null && memberInfo is FieldInfo fieldInfo) {
fieldInfo.SetValue(parent, newCluster);
EditorUtility.SetDirty(targetObject);
}
}
}
private static void OnSceneGUI(SceneView sceneView) {
if (Application.isPlaying == false || selectedTarget == null)
return;

View File

@ -67,7 +67,6 @@ namespace NanoBrain {
/// All nuclei in this cluster
/// </summary>
[SerializeReference]
[HideInInspector]
public List<Nucleus> nuclei = new();
#region Init
@ -451,7 +450,7 @@ namespace NanoBrain {
/// </summary>
public virtual Neuron defaultOutput {//=> this.nuclei[0] as Nucleus;
get {
if (this.nuclei.Count > 0)
if (this.nuclei != null && this.nuclei.Count > 0)
return this.nuclei[0] as Neuron;
return null;
}
@ -471,6 +470,9 @@ namespace NanoBrain {
get {
if (this._outputs == null || this._outputs.Count == 0) {
this._outputs = new();
if (this.nuclei == null)
return this._outputs;
foreach (Nucleus nucleus in this.nuclei) {
if (nucleus is Neuron neuron && neuron.receivers.Count == 0)
this._outputs.Add(neuron);

View File

@ -32,7 +32,10 @@ namespace NanoBrain {
public Neuron(Cluster parent, string name) {
this.parent = parent;
this.name = name;
this.parent?.nuclei.Add(this);
if (this.parent != null) {
this.parent.nuclei ??= new();
this.parent.nuclei.Add(this);
}
}
#region Serialization

View File

@ -72,10 +72,350 @@ PrefabInstance:
propertyPath: m_Name
value: Vehicle 1
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: brain.name
value: Braitenberg 1
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: sensorRight
value:
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: brain.prefab
value:
objectReference: {fileID: 11400000, guid: c2d142058a073d6fdba2c8fab05834e3, type: 2}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: brain.version
value: 8
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: brain.instanceCount
value: 1
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: brain.nuclei.Array.size
value: 2
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: 'brain.nuclei.Array.data[0]'
value: 4201950310209421437
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: 'brain.nuclei.Array.data[1]'
value: 4201950310209421438
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: 'managedReferences[4201950310209421372]'
value: Assembly-CSharp NanoBrain.Neuron
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: 'managedReferences[4201950310209421373]'
value: Assembly-CSharp NanoBrain.Neuron
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: 'managedReferences[4201950310209421374]'
value: Assembly-CSharp NanoBrain.Cluster
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: 'managedReferences[4201950310209421437]'
value: Assembly-CSharp NanoBrain.Neuron
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: 'managedReferences[4201950310209421438]'
value: Assembly-CSharp NanoBrain.Neuron
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: 'managedReferences[4201950310209421439]'
value: Assembly-CSharp NanoBrain.Cluster
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: managedReferences[4201950310209421372].name
value: Output
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: managedReferences[4201950310209421373].name
value: Sensor
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: managedReferences[4201950310209421374].name
value: Braitenberg 1
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: managedReferences[4201950310209421437].name
value: Output
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: managedReferences[4201950310209421438].name
value: Sensor
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: managedReferences[4201950310209421439].name
value: Braitenberg 1
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: managedReferences[4201950310209421372].bias.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: managedReferences[4201950310209421372].bias.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: managedReferences[4201950310209421372].bias.z
value: 1
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: managedReferences[4201950310209421372].parent
value: 4201950310209421374
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: managedReferences[4201950310209421373].bias.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: managedReferences[4201950310209421373].bias.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: managedReferences[4201950310209421373].bias.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: managedReferences[4201950310209421373].parent
value: 4201950310209421374
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: managedReferences[4201950310209421374].parent
value: -2
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: managedReferences[4201950310209421374].prefab
value:
objectReference: {fileID: 11400000, guid: c2d142058a073d6fdba2c8fab05834e3, type: 2}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: managedReferences[4201950310209421437].bias.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: managedReferences[4201950310209421437].bias.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: managedReferences[4201950310209421437].bias.z
value: 1
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: managedReferences[4201950310209421437].parent
value: 4201950310209421439
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: managedReferences[4201950310209421438].bias.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: managedReferences[4201950310209421438].bias.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: managedReferences[4201950310209421438].bias.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: managedReferences[4201950310209421438].parent
value: 4201950310209421439
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: managedReferences[4201950310209421439].parent
value: -2
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: managedReferences[4201950310209421439].prefab
value:
objectReference: {fileID: 11400000, guid: c2d142058a073d6fdba2c8fab05834e3, type: 2}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: managedReferences[4201950310209421374].version
value: 1
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: managedReferences[4201950310209421439].version
value: 8
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: managedReferences[4201950310209421372]._activator
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: managedReferences[4201950310209421372].combinator
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: managedReferences[4201950310209421372].lastUpdate
value: 96.72535
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: managedReferences[4201950310209421373]._activator
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: managedReferences[4201950310209421373].combinator
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: managedReferences[4201950310209421373].lastUpdate
value: 96.72535
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: managedReferences[4201950310209421437]._activator
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: managedReferences[4201950310209421437].combinator
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: managedReferences[4201950310209421437].lastUpdate
value: 305.44333
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: managedReferences[4201950310209421438]._activator
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: managedReferences[4201950310209421438].combinator
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: managedReferences[4201950310209421438].lastUpdate
value: 305.44333
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: managedReferences[4201950310209421372].breakOnUpdate
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: managedReferences[4201950310209421372].persistOutput
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: managedReferences[4201950310209421373].breakOnUpdate
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: managedReferences[4201950310209421373].persistOutput
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: managedReferences[4201950310209421374].instanceCount
value: 1
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: managedReferences[4201950310209421437].breakOnUpdate
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: managedReferences[4201950310209421437].persistOutput
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: managedReferences[4201950310209421438].breakOnUpdate
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: managedReferences[4201950310209421438].persistOutput
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: managedReferences[4201950310209421439].instanceCount
value: 1
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: managedReferences[4201950310209421374].nuclei.Array.size
value: 2
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: managedReferences[4201950310209421439].nuclei.Array.size
value: 2
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: managedReferences[4201950310209421372]._synapses.Array.size
value: 1
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: managedReferences[4201950310209421373]._synapses.Array.size
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: managedReferences[4201950310209421374].instances.Array.size
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: 'managedReferences[4201950310209421374].nuclei.Array.data[0]'
value: 4201950310209421372
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: 'managedReferences[4201950310209421374].nuclei.Array.data[1]'
value: 4201950310209421373
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: managedReferences[4201950310209421437]._synapses.Array.size
value: 1
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: managedReferences[4201950310209421438]._synapses.Array.size
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: managedReferences[4201950310209421439].instances.Array.size
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: 'managedReferences[4201950310209421439].nuclei.Array.data[0]'
value: 4201950310209421437
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: 'managedReferences[4201950310209421439].nuclei.Array.data[1]'
value: 4201950310209421438
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: managedReferences[4201950310209421372]._receivers.Array.size
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: managedReferences[4201950310209421373]._receivers.Array.size
value: 1
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: managedReferences[4201950310209421437]._receivers.Array.size
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: managedReferences[4201950310209421438]._receivers.Array.size
value: 1
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: 'managedReferences[4201950310209421373]._receivers.Array.data[0]'
value: 4201950310209421372
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: 'managedReferences[4201950310209421438]._receivers.Array.data[0]'
value: 4201950310209421437
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: managedReferences[4201950310209421372]._synapses.Array.data[0].neuron
value: 4201950310209421373
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: managedReferences[4201950310209421372]._synapses.Array.data[0].weight
value: 4
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: managedReferences[4201950310209421437]._synapses.Array.data[0].neuron
value: 4201950310209421438
objectReference: {fileID: 0}
- target: {fileID: 8280937452374640854, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}
propertyPath: managedReferences[4201950310209421437]._synapses.Array.data[0].weight
value: 4
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects:
- {fileID: 449746320909641321, guid: c0398fc7a48853d47acb42e4e3498383, type: 3}

File diff suppressed because it is too large Load Diff

View File

@ -2,8 +2,11 @@ using System.Collections;
using UnityEngine;
namespace NanoBrain.Braitenberg {
using Unity;
/// <summary>
/// A non-directional sensor
/// </summary>
/// The sensor has a field of view, but the signal returned does not include a direction
public class Sensor : MonoBehaviour {
[Tooltip("Max distance sensor detects anything")]
public float sensorRange = 10f;
@ -60,7 +63,7 @@ namespace NanoBrain.Braitenberg {
float angle = Mathf.Lerp(-halfAngle, halfAngle, t);
Vector3 dir = Quaternion.AngleAxis(angle, this.transform.up) * this.transform.forward;
Debug.DrawRay(this.transform.position, dir * sensorRange);
//Debug.DrawRay(this.transform.position, dir * sensorRange);
if (Physics.Raycast(this.transform.position, dir, out RaycastHit hit, sensorRange, senseLayer)) {
// Strength inversely proportional to distance, clamped to [0,1]
float str = 1f - (hit.distance / sensorRange);