diff --git a/Unity/Assets/Graphics.meta b/Unity/Assets/Graphics.meta deleted file mode 100644 index 2dfd40d..0000000 --- a/Unity/Assets/Graphics.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: e98adec30da1be64c8e25d911ea4f7ca -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity/Assets/Prefabs/CoronaObstacle.prefab b/Unity/Assets/Prefabs/CoronaObstacle.prefab index b0836ab..b9ca7e8 100644 --- a/Unity/Assets/Prefabs/CoronaObstacle.prefab +++ b/Unity/Assets/Prefabs/CoronaObstacle.prefab @@ -12,7 +12,7 @@ GameObject: - component: {fileID: 6420280404981083013} m_Layer: 0 m_Name: CoronaObstacle - m_TagString: Untagged + m_TagString: Obstacle m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 4294967295 @@ -60,7 +60,7 @@ GameObject: - component: {fileID: 7705045784659795140} m_Layer: 0 m_Name: Sphere - m_TagString: Untagged + m_TagString: Obstacle m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 4294967295 @@ -213,6 +213,11 @@ PrefabInstance: propertyPath: m_StaticEditorFlags value: 4294967295 objectReference: {fileID: 0} + - target: {fileID: -927199367670048503, guid: 245cb1e3f7a32524aa3b4d54daf4357d, + type: 3} + propertyPath: m_TagString + value: Obstacle + objectReference: {fileID: 0} - target: {fileID: 2534866581884222612, guid: 245cb1e3f7a32524aa3b4d54daf4357d, type: 3} propertyPath: m_StaticEditorFlags diff --git a/Unity/Assets/Prefabs/CylinderObstacle.prefab b/Unity/Assets/Prefabs/CylinderObstacle.prefab index 105e2e9..8be997a 100644 --- a/Unity/Assets/Prefabs/CylinderObstacle.prefab +++ b/Unity/Assets/Prefabs/CylinderObstacle.prefab @@ -11,7 +11,7 @@ GameObject: - component: {fileID: 235087896767986407} m_Layer: 0 m_Name: CylinderObstacle - m_TagString: Untagged + m_TagString: Obstacle m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 4294967295 @@ -45,7 +45,7 @@ GameObject: - component: {fileID: 3952956512997007577} m_Layer: 0 m_Name: Cylinder - m_TagString: Untagged + m_TagString: Obstacle m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 4294967295 diff --git a/Unity/Assets/Prefabs/SphereObstacle.prefab b/Unity/Assets/Prefabs/SphereObstacle.prefab index 42ea7ba..5674c36 100644 --- a/Unity/Assets/Prefabs/SphereObstacle.prefab +++ b/Unity/Assets/Prefabs/SphereObstacle.prefab @@ -11,7 +11,7 @@ GameObject: - component: {fileID: 3410795304565842202} m_Layer: 0 m_Name: SphereObstacle - m_TagString: Untagged + m_TagString: Obstacle m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 4294967295 @@ -45,7 +45,7 @@ GameObject: - component: {fileID: 5149887578041336147} m_Layer: 0 m_Name: Sphere - m_TagString: Untagged + m_TagString: Obstacle m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 4294967295 diff --git a/Unity/Assets/Prefabs/WallObstacle.prefab b/Unity/Assets/Prefabs/WallObstacle.prefab index f56e398..ce4a84c 100644 --- a/Unity/Assets/Prefabs/WallObstacle.prefab +++ b/Unity/Assets/Prefabs/WallObstacle.prefab @@ -14,7 +14,7 @@ GameObject: - component: {fileID: 3856744250248823490} m_Layer: 0 m_Name: Cube - m_TagString: Untagged + m_TagString: Obstacle m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 @@ -104,7 +104,7 @@ GameObject: - component: {fileID: 235087896767986407} m_Layer: 0 m_Name: WallObstacle - m_TagString: Untagged + m_TagString: Obstacle m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 4294967295 diff --git a/Unity/Assets/RosSharpModules/ControlSubscriber.cs b/Unity/Assets/RosSharpModules/ControlSubscriber.cs index 0aefc8d..874e42a 100644 --- a/Unity/Assets/RosSharpModules/ControlSubscriber.cs +++ b/Unity/Assets/RosSharpModules/ControlSubscriber.cs @@ -1,4 +1,5 @@ -using UnityEngine; +using System.Threading; +using UnityEngine; namespace RosSharp.RosBridgeClient.MessageTypes.swc_msgs { @@ -7,17 +8,26 @@ public class ControlSubscriber : UnitySubscriber { private AckermannController car; + private Control lastMessage; + private float angleNoiseStdDev = 0.4f; private float powerNoiseStdDev = 0.1f; private bool firstMessage = true; private bool begingame = false; + private bool newMessage = false; private float startTime = 100000; protected override void Start() { - if (ConfigLoader.simulator.ManualControl) - return; + base.Start(); + car = GetComponent(); + lastMessage = new Control(); + startTime = Time.realtimeSinceStartup; + + if (ConfigLoader.simulator.ManualControl) { + this.enabled = false; + } switch (ConfigLoader.competition.NoiseLevel) { case ConfigLoader.CompetitionConfig.NoiseLevels.none: @@ -30,10 +40,6 @@ protected override void Start() break; } - base.Start(); - car = GetComponent(); - startTime = Time.realtimeSinceStartup; - if (!ConfigLoader.simulator.CompetitionMode) { // Don't care about the stopsim stuff begingame = false; @@ -43,11 +49,17 @@ protected override void Start() } private void FixedUpdate() { + if (newMessage) { + car.SetControl(lastMessage.speed + SimUtils.getRandNormal(0, powerNoiseStdDev), lastMessage.turn_angle + SimUtils.getRandNormal(0, angleNoiseStdDev)); + newMessage = false; + } + if (begingame) { begingame = false; GameManager.instance.StartSim(); } + if (firstMessage && !begingame && Time.realtimeSinceStartup - startTime >= 30) { GameManager.instance.StopSim("Did not start in 30 seconds!"); } @@ -55,8 +67,8 @@ private void FixedUpdate() { protected override void ReceiveMessage(Control control) { - car.CntrlAngle = control.turn_angle + SimUtils.getRandNormal(0, angleNoiseStdDev); - car.CntrlPower = control.speed + SimUtils.getRandNormal(0, powerNoiseStdDev); + lastMessage = control; + newMessage = true; if (firstMessage) { diff --git a/Unity/Assets/Scenes/Loading.unity b/Unity/Assets/Scenes/Loading.unity index b15f758..56db427 100644 --- a/Unity/Assets/Scenes/Loading.unity +++ b/Unity/Assets/Scenes/Loading.unity @@ -486,6 +486,7 @@ GameObject: - component: {fileID: 435357146} - component: {fileID: 435357145} - component: {fileID: 435357144} + - component: {fileID: 435357147} m_Layer: 0 m_Name: Main Camera m_TagString: MainCamera @@ -558,6 +559,18 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &435357147 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 435357143} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a30d84b5887c8df45b0ffed826a200d4, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!1 &477782510 GameObject: m_ObjectHideFlags: 0 diff --git a/Unity/Assets/Scenes/MainScene.unity b/Unity/Assets/Scenes/MainScene.unity index 73c0803..14805c5 100644 --- a/Unity/Assets/Scenes/MainScene.unity +++ b/Unity/Assets/Scenes/MainScene.unity @@ -668,7 +668,6 @@ GameObject: m_Component: - component: {fileID: 829615085} - component: {fileID: 829615086} - - component: {fileID: 829615088} - component: {fileID: 829615087} - component: {fileID: 829615089} - component: {fileID: 829615090} @@ -678,6 +677,8 @@ GameObject: - component: {fileID: 829615091} - component: {fileID: 829615093} - component: {fileID: 829615094} + - component: {fileID: 829615088} + - component: {fileID: 829615098} m_Layer: 0 m_Name: Robot m_TagString: Untagged @@ -726,8 +727,6 @@ MonoBehaviour: frontAxleTf: {fileID: 360597449} robotCamera: {fileID: 1822220454} ManualTopSpeed: 1 - CntrlAngle: 0 - CntrlPower: 0 --- !u!114 &829615087 MonoBehaviour: m_ObjectHideFlags: 0 @@ -822,7 +821,7 @@ Rigidbody: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 829615084} serializedVersion: 2 - m_Mass: 2 + m_Mass: 10 m_Drag: 0 m_AngularDrag: 0 m_UseGravity: 1 @@ -951,6 +950,18 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: Topic: /sim/velocity +--- !u!114 &829615098 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 829615084} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b9e9655389f72214098993bf1e7e3a04, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!1 &874833490 GameObject: m_ObjectHideFlags: 0 @@ -1204,13 +1215,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 952696884} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalRotation: {x: 0, y: 0.7071068, z: 0, w: 0.7071068} m_LocalPosition: {x: 0.3, y: 0.2, z: 0} m_LocalScale: {x: 0.06, y: 0.015, z: 0.06} m_Children: [] m_Father: {fileID: 829615085} m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} --- !u!1 &963194225 GameObject: m_ObjectHideFlags: 0 @@ -1223,6 +1234,7 @@ GameObject: - component: {fileID: 963194227} - component: {fileID: 963194226} - component: {fileID: 963194229} + - component: {fileID: 963194230} m_Layer: 0 m_Name: Main Camera m_TagString: MainCamera @@ -1308,6 +1320,18 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: speed: 0.1 +--- !u!114 &963194230 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 963194225} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a30d84b5887c8df45b0ffed826a200d4, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!1 &1065359071 GameObject: m_ObjectHideFlags: 0 @@ -1387,6 +1411,36 @@ MeshFilter: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1065359071} m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1147577412 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1147577413} + m_Layer: 0 + m_Name: blah + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1147577413 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1147577412} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1340088700 GameObject: m_ObjectHideFlags: 0 diff --git a/Unity/Assets/Scripts/AckermannController.cs b/Unity/Assets/Scripts/AckermannController.cs index 196d52c..6ddc5da 100644 --- a/Unity/Assets/Scripts/AckermannController.cs +++ b/Unity/Assets/Scripts/AckermannController.cs @@ -1,5 +1,6 @@ using System.Collections; using System.Collections.Generic; +using System.Threading; using RosSharp.RosBridgeClient; using UnityEngine; @@ -18,8 +19,8 @@ public class AckermannController : MonoBehaviour public GameObject frontAxleTf; public GameObject robotCamera; - [Range(0.0F, 1.0F)] - private float drag = 0.85f; + private float turnDrag = 0.8f; + private float maxAccel = 20.0f; private float L = 0.3f; private float T = 0.26f; @@ -30,9 +31,8 @@ public class AckermannController : MonoBehaviour public float Angle { get; private set; } public float Power { get; private set; } - [Range(-30.0F, 30.0F)] - public float CntrlAngle = 0; - public float CntrlPower = 0; + public float CntrlAngle { get; private set; } = 0; + public float CntrlPower { get; private set; } = 0; public Vector3 linear_vel { get; private set; } = new Vector3(); public Vector3 angular_vel { get; private set; } = new Vector3(); @@ -56,24 +56,32 @@ void Start() rb = GetComponent(); rb.centerOfMass = new Vector3(0,0,0); + rb.inertiaTensor = new Vector3(100,100,100); rb.inertiaTensorRotation = Quaternion.identity; rb.maxAngularVelocity = 100f; + + maxAccel *= Time.fixedDeltaTime; } // Update is called once per frame void Update() { - if (!ConfigLoader.simulator.ManualControl) - return; + if (ConfigLoader.simulator.ManualControl) { + CntrlPower = Input.GetAxis("Speed") * ManualTopSpeed; + CntrlAngle = Input.GetAxis("Angle") * 20; + } + } - CntrlPower = Input.GetAxis("Speed") * ManualTopSpeed; - CntrlAngle = Input.GetAxis("Angle") * 20; + public void SetControl(float power, float angle) { + CntrlPower = power; + CntrlAngle = angle; } private void FixedUpdate() { - Angle += (1.0f - drag) * (CntrlAngle - Angle); - Power += (1.0f - drag) * (CntrlPower - Power); + + Angle += (1.0f - turnDrag) * (CntrlAngle - Angle); + Power += Mathf.Clamp(CntrlPower - Power, -maxAccel, maxAccel); Angle = Mathf.Clamp(Angle, -30, 30); Power = Mathf.Clamp(Power, -8, 8); @@ -97,6 +105,7 @@ private void FixedUpdate() linear_vel = new_linear_vel; //transform.Translate(linear_vel * Time.fixedDeltaTime, Space.World); rb.velocity = linear_vel; + //rb.MovePosition(rb.position + linear_vel * Time.fixedDeltaTime); angular_vel = new Vector3(0, Power / L * Mathf.Tan(radAngle), 0); // transform.Rotate(angular_vel * Mathf.Rad2Deg * Time.fixedDeltaTime, Space.World); diff --git a/Unity/Assets/Scripts/GameManager.cs b/Unity/Assets/Scripts/GameManager.cs index 685ab9f..01b216e 100644 --- a/Unity/Assets/Scripts/GameManager.cs +++ b/Unity/Assets/Scripts/GameManager.cs @@ -1,4 +1,5 @@ using RosSharp.RosBridgeClient; +using System; using System.Collections.Generic; using System.IO; using TMPro; @@ -23,6 +24,9 @@ public class GameManager : MonoBehaviour private RosConnector rosConnector; + private static float maxHealth = 100f; + private float currentHealth = maxHealth; + public enum GameState { INIT, @@ -79,11 +83,11 @@ void Initalize() waypoints.Add(new Vector2(-37, 0)); // Start Pos - Random.InitState(ConfigLoader.simulator.Seed); + UnityEngine.Random.InitState(ConfigLoader.simulator.Seed); - waypoints.Add(new Vector2(Random.Range(-20, -5), Random.Range(-10, 10))); - waypoints.Add(new Vector2(Random.Range(0, 15), Random.Range(-20, 20))); - waypoints.Add(new Vector2(Random.Range(20, 35), Random.Range(-15, 15))); + waypoints.Add(new Vector2(UnityEngine.Random.Range(-20, -5), UnityEngine.Random.Range(-10, 10))); + waypoints.Add(new Vector2(UnityEngine.Random.Range(0, 15), UnityEngine.Random.Range(-20, 20))); + waypoints.Add(new Vector2(UnityEngine.Random.Range(20, 35), UnityEngine.Random.Range(-15, 15))); waypoints.Add(new Vector2(48, 15)); // Goal Pos @@ -116,6 +120,22 @@ private void FixedUpdate() { } } + internal void TakeDamage(float damage) + { + if (State != GameState.PLAYING) { + return; + } + + currentHealth -= damage; + + Debug.Log(currentHealth); + + if (ConfigLoader.simulator.CompetitionMode && currentHealth <= 0) { + currentHealth = 0; + StopSim(null); + } + } + public Vector2[] GetWaypoints() { return waypoints.ToArray(); } @@ -177,14 +197,29 @@ public void StopSim(string error) if (State == GameState.QUITTING) { return; // Already quitting } + + Debug.Log("Job's done!"); + State = GameState.QUITTING; float finalTime = Time.time - startTime; - if (finalTime > maxTime) { + if (finalTime > maxTime || currentHealth == 0) { finalTime = maxTime; } - Debug.Log("Job's done!"); + float damageTaken = maxHealth - currentHealth; + + ScoreAdjust damageScore = new ScoreAdjust(); + if (currentHealth > 0) { + damageScore.adjustment = 1.0f + damageTaken * (9.0f/100.0f); + damageScore.reason = $"{(int)damageTaken}% Damaged"; + } else { + damageScore.adjustment = 100.0f; + damageScore.reason = "Robot Destroyed"; + } + + if (currentHealth < maxHealth) + adjustments.Add(damageScore); StreamWriter writer = new StreamWriter("results.txt"); diff --git a/Unity/Assets/Scripts/HealthController.cs b/Unity/Assets/Scripts/HealthController.cs new file mode 100644 index 0000000..106760f --- /dev/null +++ b/Unity/Assets/Scripts/HealthController.cs @@ -0,0 +1,22 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class HealthController : MonoBehaviour +{ + private AckermannController car; + private float lastHitTime = 0f; + private float iFrameTime = 0.2f; // Can't get hit until this time (seconds) has passed + + void Start() + { + car = GetComponent(); + } + + private void OnCollisionEnter(Collision other) { + if (other.gameObject.CompareTag("Obstacle") && Time.realtimeSinceStartup - lastHitTime >= iFrameTime) { + lastHitTime = Time.realtimeSinceStartup; + GameManager.instance.TakeDamage(Mathf.Max(5f, car.linear_vel.magnitude * 7f)); + } + } +} diff --git a/Unity/Assets/Scripts/HealthController.cs.meta b/Unity/Assets/Scripts/HealthController.cs.meta new file mode 100644 index 0000000..e6ed7b8 --- /dev/null +++ b/Unity/Assets/Scripts/HealthController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b9e9655389f72214098993bf1e7e3a04 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Assets/Scripts/KillOnServer.cs b/Unity/Assets/Scripts/KillOnServer.cs new file mode 100644 index 0000000..4246773 --- /dev/null +++ b/Unity/Assets/Scripts/KillOnServer.cs @@ -0,0 +1,12 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class KillOnServer : MonoBehaviour +{ + void Awake() { + if (SystemInfo.graphicsDeviceName == null) { + Destroy(this.gameObject); + } + } +} diff --git a/Unity/Assets/Scripts/KillOnServer.cs.meta b/Unity/Assets/Scripts/KillOnServer.cs.meta new file mode 100644 index 0000000..9c59633 --- /dev/null +++ b/Unity/Assets/Scripts/KillOnServer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a30d84b5887c8df45b0ffed826a200d4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Packages/manifest.json b/Unity/Packages/manifest.json index 276c3d7..1e6fe5d 100644 --- a/Unity/Packages/manifest.json +++ b/Unity/Packages/manifest.json @@ -4,7 +4,7 @@ "com.unity.ide.rider": "1.1.4", "com.unity.ide.vscode": "1.1.4", "com.unity.probuilder": "4.2.3", - "com.unity.test-framework": "1.1.11", + "com.unity.test-framework": "1.1.13", "com.unity.textmeshpro": "2.0.1", "com.unity.timeline": "1.2.13", "com.unity.ugui": "1.0.0", diff --git a/Unity/ProjectSettings/ProjectSettings.asset b/Unity/ProjectSettings/ProjectSettings.asset index d320871..4d910f1 100644 --- a/Unity/ProjectSettings/ProjectSettings.asset +++ b/Unity/ProjectSettings/ProjectSettings.asset @@ -119,7 +119,7 @@ PlayerSettings: 16:10: 1 16:9: 1 Others: 1 - bundleVersion: 3.0 + bundleVersion: 4.0 preloadedAssets: [] metroInputSource: 0 wsaTransparentSwapchain: 0 @@ -549,6 +549,7 @@ PlayerSettings: ps4UseResolutionFallback: 0 ps4ReprojectionSupport: 0 ps4UseAudio3dBackend: 0 + ps4UseLowGarlicFragmentationMode: 1 ps4SocialScreenEnabled: 0 ps4ScriptOptimizationLevel: 0 ps4Audio3dVirtualSpeakerCount: 14 @@ -654,6 +655,7 @@ PlayerSettings: XboxOnePersistentLocalStorageSize: 0 XboxOneXTitleMemory: 8 XboxOneOverrideIdentityName: + XboxOneOverrideIdentityPublisher: vrEditorSettings: daydream: daydreamIconForeground: {fileID: 0} diff --git a/Unity/ProjectSettings/ProjectVersion.txt b/Unity/ProjectSettings/ProjectVersion.txt index e76bfbe..1c8f32f 100644 --- a/Unity/ProjectSettings/ProjectVersion.txt +++ b/Unity/ProjectSettings/ProjectVersion.txt @@ -1,2 +1,2 @@ -m_EditorVersion: 2019.3.6f1 -m_EditorVersionWithRevision: 2019.3.6f1 (5c3fb0a11183) +m_EditorVersion: 2019.3.10f1 +m_EditorVersionWithRevision: 2019.3.10f1 (5968d7f82152) diff --git a/Unity/ProjectSettings/TagManager.asset b/Unity/ProjectSettings/TagManager.asset index 1c92a78..b10395d 100644 --- a/Unity/ProjectSettings/TagManager.asset +++ b/Unity/ProjectSettings/TagManager.asset @@ -3,7 +3,8 @@ --- !u!78 &1 TagManager: serializedVersion: 2 - tags: [] + tags: + - Obstacle layers: - Default - TransparentFX