From 3c7a4014878f40485eb8240730fa8115e76ea9c4 Mon Sep 17 00:00:00 2001 From: Noah4ever <66632359+Noah4ever@users.noreply.github.com> Date: Tue, 19 Oct 2021 14:36:53 +0200 Subject: [PATCH] Weapon --- Assets/Objects/Weapons/Weapon1.prefab | 17 -- Assets/Scenes/TestScene.unity | 239 +++++++++++++++--- Assets/Scripts/Weapons/Weapon.cs | 77 +++--- Assets/Scripts/Weapons/WeaponManager.cs | 63 +++++ ...onSwitch.cs.meta => WeaponManager.cs.meta} | 2 +- Assets/Scripts/Weapons/WeaponSwitch.cs | 20 -- ProjectSettings/InputManager.asset | 32 +++ 7 files changed, 330 insertions(+), 120 deletions(-) create mode 100644 Assets/Scripts/Weapons/WeaponManager.cs rename Assets/Scripts/Weapons/{WeaponSwitch.cs.meta => WeaponManager.cs.meta} (83%) delete mode 100644 Assets/Scripts/Weapons/WeaponSwitch.cs diff --git a/Assets/Objects/Weapons/Weapon1.prefab b/Assets/Objects/Weapons/Weapon1.prefab index 05d0312..bdd4e58 100644 --- a/Assets/Objects/Weapons/Weapon1.prefab +++ b/Assets/Objects/Weapons/Weapon1.prefab @@ -12,7 +12,6 @@ GameObject: - component: {fileID: 4085778817478341875} - component: {fileID: 4085778817478341874} - component: {fileID: 4085778817478341837} - - component: {fileID: 4085778817478341836} m_Layer: 7 m_Name: CrazyWeapon m_TagString: Untagged @@ -97,22 +96,6 @@ BoxCollider: serializedVersion: 2 m_Size: {x: 1, y: 1, z: 1} m_Center: {x: 0, y: 0, z: 0} ---- !u!54 &4085778817478341836 -Rigidbody: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4085778817478341838} - serializedVersion: 2 - m_Mass: 1 - m_Drag: 0 - m_AngularDrag: 0.05 - m_UseGravity: 1 - m_IsKinematic: 0 - m_Interpolate: 0 - m_Constraints: 0 - m_CollisionDetection: 0 --- !u!1 &4085778817558063964 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Scenes/TestScene.unity b/Assets/Scenes/TestScene.unity index 6923e94..47d5b84 100644 --- a/Assets/Scenes/TestScene.unity +++ b/Assets/Scenes/TestScene.unity @@ -38,7 +38,7 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} m_Sun: {fileID: 705507994} - m_IndirectSpecularColor: {r: 0.44657874, g: 0.49641258, b: 0.5748172, a: 1} + m_IndirectSpecularColor: {r: 0.44657898, g: 0.4964133, b: 0.5748178, a: 1} m_UseRadianceAmbientProbe: 0 --- !u!157 &3 LightmapSettings: @@ -347,6 +347,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: - {fileID: 1995791058} + - {fileID: 1087855705} m_Father: {fileID: 963194228} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -359,9 +360,15 @@ MonoBehaviour: m_GameObject: {fileID: 316118901} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 430a0b8472192ab42b0101154932f4ad, type: 3} + m_Script: {fileID: 11500000, guid: 98dadd30ba25ec34db3b45d0dca2827b, type: 3} m_Name: m_EditorClassIdentifier: + currentWeaponIndex: 0 + allWeapons: + - {fileID: 1995791057} + - {fileID: 710610056} + activeWeapons: [] + cam: {fileID: 963194225} --- !u!1 &340159597 GameObject: m_ObjectHideFlags: 0 @@ -431,7 +438,7 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 340159597} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalRotation: {x: -0, y: 0.9998384, z: -0, w: -0.01797648} m_LocalPosition: {x: 1.56, y: 2.88, z: -2.62} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: @@ -439,7 +446,7 @@ Transform: - {fileID: 963194228} m_Father: {fileID: 0} m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_LocalEulerAnglesHint: {x: 0, y: 182.06, z: 0} --- !u!1 &450235891 stripped GameObject: m_CorrespondingSourceObject: {fileID: -466329591000292508, guid: 823e8b39d52b71b4eb5a91dbc8d6d59e, type: 3} @@ -619,25 +626,30 @@ GameObject: m_CorrespondingSourceObject: {fileID: 4085778817558063964, guid: decdb19fa1f98b14fb2639db82e266c8, type: 3} m_PrefabInstance: {fileID: 892341459} m_PrefabAsset: {fileID: 0} ---- !u!95 &710610057 -Animator: - serializedVersion: 3 +--- !u!114 &710610057 +MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 710610056} m_Enabled: 1 - m_Avatar: {fileID: 0} - m_Controller: {fileID: 0} - m_CullingMode: 0 - m_UpdateMode: 0 - m_ApplyRootMotion: 0 - m_LinearVelocityBlending: 0 - m_WarningMessage: - m_HasTransformHierarchy: 1 - m_AllowConstantClipSamplingOptimization: 1 - m_KeepAnimatorControllerStateOnDisable: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c98f5c47a8b7dd64f86fd6f42c4d6e5e, type: 3} + m_Name: + m_EditorClassIdentifier: + weaponKind: 1 + active: 0 + damage: 0 + firerate: 0 + recoilStrength: 0 + currentAmmunition: 0 + magazinSize: 0 + totalAmmunition: 0 + flash: {fileID: 1447530107} + smoke: {fileID: 1458153373} + bulletExit: {fileID: 964267714} + cam: {fileID: 963194225} --- !u!54 &710610058 Rigidbody: m_ObjectHideFlags: 0 @@ -968,6 +980,30 @@ PrefabInstance: propertyPath: m_Layer value: 6 objectReference: {fileID: 0} + - target: {fileID: 4085778817478341839, guid: decdb19fa1f98b14fb2639db82e266c8, type: 3} + propertyPath: m_LocalPosition.x + value: 1.02 + objectReference: {fileID: 0} + - target: {fileID: 4085778817478341839, guid: decdb19fa1f98b14fb2639db82e266c8, type: 3} + propertyPath: m_LocalPosition.y + value: 2.9450002 + objectReference: {fileID: 0} + - target: {fileID: 4085778817478341839, guid: decdb19fa1f98b14fb2639db82e266c8, type: 3} + propertyPath: m_LocalPosition.z + value: -1.97 + objectReference: {fileID: 0} + - target: {fileID: 4085778817478341839, guid: decdb19fa1f98b14fb2639db82e266c8, type: 3} + propertyPath: m_LocalRotation.w + value: 0.9566878 + objectReference: {fileID: 0} + - target: {fileID: 4085778817478341839, guid: decdb19fa1f98b14fb2639db82e266c8, type: 3} + propertyPath: m_LocalRotation.y + value: 0.29111606 + objectReference: {fileID: 0} + - target: {fileID: 4085778817478341839, guid: decdb19fa1f98b14fb2639db82e266c8, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 33.85 + objectReference: {fileID: 0} - target: {fileID: 4085778817558063964, guid: decdb19fa1f98b14fb2639db82e266c8, type: 3} propertyPath: m_Name value: Weapon1 @@ -1020,8 +1056,7 @@ PrefabInstance: propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 4085778817478341836, guid: decdb19fa1f98b14fb2639db82e266c8, type: 3} + m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: decdb19fa1f98b14fb2639db82e266c8, type: 3} --- !u!1 &963194225 GameObject: @@ -1189,6 +1224,37 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1087855704 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1087855705} + m_Layer: 7 + m_Name: Hammer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1087855705 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1087855704} + 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: + - {fileID: 1308256818} + m_Father: {fileID: 316118902} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1111479331 stripped GameObject: m_CorrespondingSourceObject: {fileID: 2550463727306718371, guid: 823e8b39d52b71b4eb5a91dbc8d6d59e, type: 3} @@ -1459,6 +1525,102 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1308256817 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1308256818} + - component: {fileID: 1308256821} + - component: {fileID: 1308256820} + - component: {fileID: 1308256819} + m_Layer: 7 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1308256818 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1308256817} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.052215002, y: 0.42723, z: 0.089824274} + m_Children: [] + m_Father: {fileID: 1087855705} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1308256819 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1308256817} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1308256820 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1308256817} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1308256821 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1308256817} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &1447530104 GameObject: m_ObjectHideFlags: 0 @@ -21391,28 +21553,25 @@ Transform: m_CorrespondingSourceObject: {fileID: 4085778817478341839, guid: decdb19fa1f98b14fb2639db82e266c8, type: 3} m_PrefabInstance: {fileID: 892341459} m_PrefabAsset: {fileID: 0} ---- !u!114 &1946722407 -MonoBehaviour: +--- !u!95 &1946722411 +Animator: + serializedVersion: 3 m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1946722405} m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c98f5c47a8b7dd64f86fd6f42c4d6e5e, type: 3} - m_Name: - m_EditorClassIdentifier: - active: 0 - damage: 0 - firerate: 0 - recoilStrength: 0 - currentAmmunition: 0 - totalAmmunition: 0 - flash: {fileID: 1447530107} - smoke: {fileID: 1458153373} - bulletExit: {fileID: 964267714} - camera: {fileID: 963194225} + m_Avatar: {fileID: 0} + m_Controller: {fileID: 0} + m_CullingMode: 0 + m_UpdateMode: 0 + m_ApplyRootMotion: 0 + m_LinearVelocityBlending: 0 + m_WarningMessage: + m_HasTransformHierarchy: 1 + m_AllowConstantClipSamplingOptimization: 1 + m_KeepAnimatorControllerStateOnDisable: 0 --- !u!1 &1960893053 GameObject: m_ObjectHideFlags: 0 @@ -21703,16 +21862,18 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: c98f5c47a8b7dd64f86fd6f42c4d6e5e, type: 3} m_Name: m_EditorClassIdentifier: + weaponKind: 0 active: 1 damage: 20 firerate: 0.2 recoilStrength: 15 - currentAmmunition: 12 - totalAmmunition: 12 + currentAmmunition: 10 + magazinSize: 12 + totalAmmunition: 24 flash: {fileID: 1869164905} smoke: {fileID: 1612241555} bulletExit: {fileID: 964267714} - camera: {fileID: 963194225} + cam: {fileID: 963194225} --- !u!95 &1995791060 Animator: serializedVersion: 3 @@ -21870,7 +22031,7 @@ Transform: m_GameObject: {fileID: 2125254906} 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_LocalScale: {x: 1, y: 1, z: 0.35526} m_Children: [] m_Father: {fileID: 963194228} m_RootOrder: 0 diff --git a/Assets/Scripts/Weapons/Weapon.cs b/Assets/Scripts/Weapons/Weapon.cs index 5b6ff83..7de29ef 100644 --- a/Assets/Scripts/Weapons/Weapon.cs +++ b/Assets/Scripts/Weapons/Weapon.cs @@ -4,43 +4,36 @@ using UnityEngine; public class Weapon : MonoBehaviour { + public enum weaponKinds + { + Rifle, Pistole, Knife, Granade + } + [SerializeField] weaponKinds weaponKind; [SerializeField] bool active = false; [SerializeField] float damage = 0; [SerializeField] float firerate = 0; [SerializeField] float recoilStrength = 0; [SerializeField] int currentAmmunition = 0; + [SerializeField] int magazinSize = 0; [SerializeField] int totalAmmunition = 0; [SerializeField] ParticleSystem flash; [SerializeField] ParticleSystem smoke; [SerializeField] GameObject bulletExit; - [SerializeField] GameObject camera; - + [SerializeField] GameObject cam; + [SerializeField] GameObject model; + + private bool allowShoot = true, isReloading = false; + public bool Active { get => active; set => active = value; } - - private bool allowShoot = true, isShooting = false; - Animator anim; - - - - /* - * - * + Weapon Pickup - * + Weapon Manage - * + Weapon Inventory - * + Weapon Drop - * - * - */ - - - - + public weaponKinds WeaponKind { get => weaponKind; set => weaponKind = value; } + + //Animator anim; private void Start() { - anim = GetComponent(); - - if (Physics.Raycast(camera.transform.position, camera.transform.forward, out RaycastHit hit)) + //anim = GetComponent(); + currentAmmunition = magazinSize; + if (Physics.Raycast(cam.transform.position, cam.transform.forward, out RaycastHit hit)) // Not Working { transform.rotation = Quaternion.Euler(0f, hit.point.y, 0f); } @@ -49,34 +42,32 @@ public class Weapon : MonoBehaviour { if (Input.GetButton("Fire") && allowShoot && currentAmmunition > 0) { - anim.Play("USP_Shooting"); - isShooting = true; + //anim.Play("USP_Shooting"); StartCoroutine(fireRate()); fire(); currentAmmunition--; } - else - { - isShooting = false; - } if (Input.GetButton("Reload")) { - currentAmmunition = totalAmmunition; + if (isReloading == false && totalAmmunition > 0) + { + isReloading = true; + int dif = magazinSize - currentAmmunition; + + if(totalAmmunition >= dif) { + currentAmmunition += dif; + totalAmmunition -= dif; + } + else{ + currentAmmunition += totalAmmunition; + totalAmmunition = 0; + } + isReloading = false; + } } if (Input.GetButton("Aim")) // Not working properly, maybe Animations are not correct to use { - anim.Play("USP_Aim"); - } - if (Input.GetButton("Interact")) - { - if(Physics.Raycast(camera.transform.position, camera.transform.forward, out RaycastHit hit)) - { - Debug.DrawLine(camera.transform.position, hit.point); - if (hit.collider.transform.name == transform.name) - { - Debug.Log("Hit me!"); - } - } + //anim.Play("USP_Aim"); } } diff --git a/Assets/Scripts/Weapons/WeaponManager.cs b/Assets/Scripts/Weapons/WeaponManager.cs new file mode 100644 index 0000000..8062000 --- /dev/null +++ b/Assets/Scripts/Weapons/WeaponManager.cs @@ -0,0 +1,63 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class WeaponManager : MonoBehaviour +{ + public int currentWeaponIndex = 0; + public List allWeapons = new List(); + public GameObject[] activeWeapons; + + [SerializeField] GameObject cam; + + private void Awake() + { + activeWeapons = new GameObject[4]; + } + + void Update() { + if(Input.GetAxis("Mouse ScrollWheel") > 0f){ // Scroll up + if (currentWeaponIndex <= 0) + { currentWeaponIndex = activeWeapons.Length; } + else { currentWeaponIndex--; } + } + if (Input.GetAxis("Mouse ScrollWheel") < 0f){ // Scroll down + if (currentWeaponIndex >= activeWeapons.Length) + { currentWeaponIndex = 0; } + else { currentWeaponIndex++; } + } + if (Input.GetButton("Interact")) // e + { + if (Physics.Raycast(cam.transform.position, cam.transform.forward, out RaycastHit hit)) + { + Debug.DrawLine(cam.transform.position, hit.point); + if (allWeapons.Contains(hit.transform.gameObject) && !searchInArray(activeWeapons, hit.transform.gameObject)) // If Object is a weapon and the weapon is not in the current active weapons + { + switch (hit.transform.GetComponent().WeaponKind.ToString()) // Adding weapon to inventory slot + { + case "Rifle": activeWeapons[0] = hit.transform.gameObject; break; + case "Pistole": activeWeapons[1] = hit.transform.gameObject; break; + case "Knife": activeWeapons[2] = hit.transform.gameObject; break; + case "Granade": activeWeapons[3] = hit.transform.gameObject; break; + default: break; + } + } + } + } + if (Input.GetButton("Drop")) // q Droping weapon + { + activeWeapons[currentWeaponIndex] = null; + } + } + + + private bool searchInArray(GameObject[] arr, GameObject searchObj) + { + foreach(GameObject obj in arr) + { + if (obj == searchObj) return true; + } + return false; + } + +} diff --git a/Assets/Scripts/Weapons/WeaponSwitch.cs.meta b/Assets/Scripts/Weapons/WeaponManager.cs.meta similarity index 83% rename from Assets/Scripts/Weapons/WeaponSwitch.cs.meta rename to Assets/Scripts/Weapons/WeaponManager.cs.meta index 14b70af..dcee112 100644 --- a/Assets/Scripts/Weapons/WeaponSwitch.cs.meta +++ b/Assets/Scripts/Weapons/WeaponManager.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 430a0b8472192ab42b0101154932f4ad +guid: 98dadd30ba25ec34db3b45d0dca2827b MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/Scripts/Weapons/WeaponSwitch.cs b/Assets/Scripts/Weapons/WeaponSwitch.cs deleted file mode 100644 index 1c11083..0000000 --- a/Assets/Scripts/Weapons/WeaponSwitch.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -public class WeaponSwitch : MonoBehaviour -{ - - // Start is called before the first frame update - void Start() - { - - } - - // Update is called once per frame - void Update() - { - - } - -} diff --git a/ProjectSettings/InputManager.asset b/ProjectSettings/InputManager.asset index 85ac599..29e6c6a 100644 --- a/ProjectSettings/InputManager.asset +++ b/ProjectSettings/InputManager.asset @@ -341,3 +341,35 @@ InputManager: type: 0 axis: 0 joyNum: 0 + - serializedVersion: 3 + m_Name: Drop + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: q + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Pickup + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: e + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0