feat/add-throwable-items #9

Merged
Pierre1901 merged 6 commits from feat/add-throwable-items into Prototype 2026-04-06 21:50:28 +02:00
3 changed files with 243 additions and 219 deletions
Showing only changes of commit f593bc2e20 - Show all commits

View File

@@ -2,18 +2,25 @@ using UnityEngine;
public class PlayerHeadController : MonoBehaviour
{
[Header("Head")]
public Transform Head;
public Transform CameraTransform;
public Transform BodyTransform;
public float ThrowForce;
public float PickupDistance;
public bool isHoldingHead;
private Rigidbody m_headRigidbody;
[Header("Grabbable")]
public Transform HandTransform; // in teh future hand maybe grab items but for now its an empty object
BoxOfPandor marked this conversation as resolved Outdated

Juste une typo sur le "teh", sinon tous est bon

Juste une typo sur le "teh", sinon tous est bon
public float ItemThrowForce = 10f;
public float ItemPickupDistance = 5f;
private bool isHoldingItem;
private Rigidbody m_itemRigidbody;
private Collider m_itemCollider;
private Transform m_currentItem;
private Rigidbody m_headRigidbody;
private Vector3 m_headInitialLocalPos;
private Quaternion m_headInitialLocalRot;
@@ -31,7 +38,6 @@ public class PlayerHeadController : MonoBehaviour
Cursor.lockState = CursorLockMode.Locked;
Vector3 offset = new Vector3(0f, -0.5f, 0.5f);
m_headInitialLocalPos = BodyTransform.localPosition + offset;
m_headInitialLocalRot = BodyTransform.localRotation;
m_headRigidbody = Head.GetComponent<Rigidbody>();
@@ -42,14 +48,20 @@ public class PlayerHeadController : MonoBehaviour
void Update()
{
if (input.HeadInteractionPressed)
{
InteractHead();
}
if (input.ThrowPressed)
{
if (input.ThrowPressed && isHoldingHead)
ThrowHead();
if (input.InteractPressed)
{
if (!isHoldingItem)
TryPickupItem();
else
DropItem();
}
if (input.ThrowPressed && isHoldingItem)
ThrowItem();
}
private void InteractHead()
@@ -60,61 +72,84 @@ public class PlayerHeadController : MonoBehaviour
DropHead();
}
private void TryPickupHead()
{
if (isHoldingHead || isHoldingItem)
return;
if (Vector3.Distance(transform.position, Head.position) <= PickupDistance)
PickupHead();
}
private void PickupHead()
{
isHoldingHead = true;
if (m_headRigidbody != null)
Destroy(m_headRigidbody);
Head.SetParent(transform);
Head.localPosition = m_headInitialLocalPos;
Head.localRotation = m_headInitialLocalRot;
}
private void DropHead()
{
Debug.Log("DropHead");
animator.SetTrigger("Throw");
isHoldingHead = false;
Head.SetParent(null);
m_headRigidbody = Head.gameObject.AddComponent<Rigidbody>();
m_headRigidbody.mass = 1f;
m_headRigidbody.constraints =
RigidbodyConstraints.FreezeRotationX |
RigidbodyConstraints.FreezeRotationZ |
RigidbodyConstraints.FreezeRotationY;
}
private void ThrowHead()
{
Debug.Log("ThrowHead");
if (!isHoldingHead)
return;
DropHead();
m_headRigidbody.AddForce(CameraTransform.forward * ThrowForce, ForceMode.Impulse);
}
private void TryPickupHead()
private void TryPickupItem()
{
if (isHoldingHead)
if (isHoldingHead || isHoldingItem)
return;
int grabbableLayer = LayerMask.GetMask("Grabbable");
Collider[] hits = Physics.OverlapSphere(transform.position, ItemPickupDistance, grabbableLayer);
float distance = Vector3.Distance(transform.position, Head.position);
if (distance <= PickupDistance)
foreach (Collider hit in hits)
{
PickupHead();
m_currentItem = hit.transform;
m_itemRigidbody = hit.GetComponent<Rigidbody>();
m_itemCollider = hit.GetComponent<Collider>();
PickupItem();
return;
}
}
private void PickupHead()
private void PickupItem()
{
Debug.Log("PickupHead");
isHoldingHead = true;
isHoldingItem = true;
m_itemRigidbody.isKinematic = true;
m_itemCollider.enabled = false;
if (m_headRigidbody != null)
{
Destroy(m_headRigidbody);
}
m_currentItem.SetParent(HandTransform);
m_currentItem.localPosition = Vector3.zero;
m_currentItem.localRotation = Quaternion.identity;
}
Head.SetParent(transform);
private void DropItem()
{
isHoldingItem = false;
m_currentItem.SetParent(null);
m_itemRigidbody.isKinematic = false;
m_itemCollider.enabled = true;
m_currentItem = null;
}
Head.localPosition = m_headInitialLocalPos;
Head.localRotation = m_headInitialLocalRot;
private void ThrowItem()
{
DropItem();
m_itemRigidbody.AddForce(BodyTransform.forward * ItemThrowForce, ForceMode.Impulse);
}
}

View File

@@ -297,6 +297,11 @@ Mesh:
- serializedVersion: 1
m_IndexStart: 0
m_IndexCount: 0
--- !u!4 &53730944 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 8258725777112540271, guid: d7417f9daec269d43bdfd5a35f2da89a, type: 3}
m_PrefabInstance: {fileID: 2031184782}
m_PrefabAsset: {fileID: 0}
--- !u!43 &70226124
Mesh:
m_ObjectHideFlags: 0
@@ -2443,181 +2448,6 @@ Mesh:
- serializedVersion: 1
m_IndexStart: 0
m_IndexCount: 0
--- !u!1 &830206780
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 830206784}
- component: {fileID: 830206783}
- component: {fileID: 830206782}
- component: {fileID: 830206781}
- component: {fileID: 830206786}
- component: {fileID: 830206785}
- component: {fileID: 830206787}
m_Layer: 0
m_Name: Cube
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!65 &830206781
BoxCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 830206780}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 3
m_Size: {x: 1, y: 1, z: 1}
m_Center: {x: 0, y: 0, z: 0}
--- !u!23 &830206782
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 830206780}
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_RayTracingAccelStructBuildFlagsOverride: 0
m_RayTracingAccelStructBuildFlags: 1
m_SmallMeshCulling: 1
m_ForceMeshLod: -1
m_MeshLodSelectionBias: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2}
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_GlobalIlluminationMeshLod: 0
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_MaskInteraction: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!33 &830206783
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 830206780}
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
--- !u!4 &830206784
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 830206780}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: -39.38, y: 6.56, z: -9.27}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!65 &830206785
BoxCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 830206780}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 3
m_Size: {x: 1, y: 1, z: 1}
m_Center: {x: 0, y: 0, z: 0}
--- !u!54 &830206786
Rigidbody:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 830206780}
serializedVersion: 5
m_Mass: 1
m_LinearDamping: 0
m_AngularDamping: 0.05
m_CenterOfMass: {x: 0, y: 0, z: 0}
m_InertiaTensor: {x: 1, y: 1, z: 1}
m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_ImplicitCom: 1
m_ImplicitTensor: 1
m_UseGravity: 1
m_IsKinematic: 0
m_Interpolate: 0
m_Constraints: 0
m_CollisionDetection: 0
--- !u!114 &830206787
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 830206780}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: a36af2e55a3732eb2abc110ae2365702, type: 3}
m_Name:
m_EditorClassIdentifier: '::'
--- !u!43 &883770463
Mesh:
m_ObjectHideFlags: 0
@@ -6431,6 +6261,11 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 2da51dfecccc45b469912e3bb3f1953b, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::PlayerHeadController
--- !u!4 &1707402985 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 7821156882341915560, guid: d7417f9daec269d43bdfd5a35f2da89a, type: 3}
m_PrefabInstance: {fileID: 2031184782}
m_PrefabAsset: {fileID: 0}
--- !u!43 &1732395164
Mesh:
m_ObjectHideFlags: 0
@@ -7203,6 +7038,80 @@ MonoBehaviour:
textColor: {r: 1, g: 1, b: 1, a: 1}
speakerColor: {r: 1, g: 0.85, b: 0.35, a: 1}
backgroundColor: {r: 0, g: 0, b: 0, a: 0.62}
--- !u!1001 &1902652822
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 53541677567227536, guid: c786dcd5f720bb47dbf843bd97137452, type: 3}
propertyPath: HandTransform
value:
objectReference: {fileID: 2137556223}
- target: {fileID: 53541677567227536, guid: c786dcd5f720bb47dbf843bd97137452, type: 3}
propertyPath: CameraTransform
value:
objectReference: {fileID: 53730944}
- target: {fileID: 53541677567227536, guid: c786dcd5f720bb47dbf843bd97137452, type: 3}
propertyPath: PlayerTransform
value:
objectReference: {fileID: 1707402985}
- target: {fileID: 1945301683602458784, guid: c786dcd5f720bb47dbf843bd97137452, type: 3}
propertyPath: m_LocalPosition.x
value: -35.48739
objectReference: {fileID: 0}
- target: {fileID: 1945301683602458784, guid: c786dcd5f720bb47dbf843bd97137452, type: 3}
propertyPath: m_LocalPosition.y
value: 0.49999958
objectReference: {fileID: 0}
- target: {fileID: 1945301683602458784, guid: c786dcd5f720bb47dbf843bd97137452, type: 3}
propertyPath: m_LocalPosition.z
value: 2.5272882
objectReference: {fileID: 0}
- target: {fileID: 1945301683602458784, guid: c786dcd5f720bb47dbf843bd97137452, type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 1945301683602458784, guid: c786dcd5f720bb47dbf843bd97137452, type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1945301683602458784, guid: c786dcd5f720bb47dbf843bd97137452, type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1945301683602458784, guid: c786dcd5f720bb47dbf843bd97137452, type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1945301683602458784, guid: c786dcd5f720bb47dbf843bd97137452, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1945301683602458784, guid: c786dcd5f720bb47dbf843bd97137452, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1945301683602458784, guid: c786dcd5f720bb47dbf843bd97137452, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8295937476714018201, guid: c786dcd5f720bb47dbf843bd97137452, type: 3}
propertyPath: m_Name
value: ThrowableCube (1)
objectReference: {fileID: 0}
- target: {fileID: 8295937476714018201, guid: c786dcd5f720bb47dbf843bd97137452, type: 3}
propertyPath: m_Layer
value: 6
objectReference: {fileID: 0}
m_RemovedComponents:
- {fileID: 53541677567227536, guid: c786dcd5f720bb47dbf843bd97137452, type: 3}
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: c786dcd5f720bb47dbf843bd97137452, type: 3}
--- !u!43 &1929503721
Mesh:
m_ObjectHideFlags: 0
@@ -7976,14 +7885,14 @@ PrefabInstance:
serializedVersion: 3
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 4313489822343726709, guid: d7417f9daec269d43bdfd5a35f2da89a, type: 3}
propertyPath: HandTransform
value:
objectReference: {fileID: 2137556223}
- target: {fileID: 6544026473454475707, guid: d7417f9daec269d43bdfd5a35f2da89a, type: 3}
propertyPath: m_Name
value: Player
objectReference: {fileID: 0}
- target: {fileID: 6975610370707183838, guid: d7417f9daec269d43bdfd5a35f2da89a, type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7821156882341915560, guid: d7417f9daec269d43bdfd5a35f2da89a, type: 3}
propertyPath: m_LocalPosition.x
value: -30.54
@@ -8207,6 +8116,11 @@ Mesh:
- serializedVersion: 1
m_IndexStart: 0
m_IndexCount: 0
--- !u!4 &2137556223 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 3832855070939641903, guid: d7417f9daec269d43bdfd5a35f2da89a, type: 3}
m_PrefabInstance: {fileID: 2031184782}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &2029273738738782450
PrefabInstance:
m_ObjectHideFlags: 0
@@ -8749,6 +8663,80 @@ PrefabInstance:
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 93cf9d955f7e24b6aa0837b955d009e3, type: 3}
--- !u!1001 &5783770961855197083
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 53541677567227536, guid: c786dcd5f720bb47dbf843bd97137452, type: 3}
propertyPath: HandTransform
value:
objectReference: {fileID: 2137556223}
- target: {fileID: 53541677567227536, guid: c786dcd5f720bb47dbf843bd97137452, type: 3}
propertyPath: CameraTransform
value:
objectReference: {fileID: 53730944}
- target: {fileID: 53541677567227536, guid: c786dcd5f720bb47dbf843bd97137452, type: 3}
propertyPath: PlayerTransform
value:
objectReference: {fileID: 1707402985}
- target: {fileID: 1945301683602458784, guid: c786dcd5f720bb47dbf843bd97137452, type: 3}
propertyPath: m_LocalPosition.x
value: -39.38
objectReference: {fileID: 0}
- target: {fileID: 1945301683602458784, guid: c786dcd5f720bb47dbf843bd97137452, type: 3}
propertyPath: m_LocalPosition.y
value: 6.56
objectReference: {fileID: 0}
- target: {fileID: 1945301683602458784, guid: c786dcd5f720bb47dbf843bd97137452, type: 3}
propertyPath: m_LocalPosition.z
value: -9.27
objectReference: {fileID: 0}
- target: {fileID: 1945301683602458784, guid: c786dcd5f720bb47dbf843bd97137452, type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 1945301683602458784, guid: c786dcd5f720bb47dbf843bd97137452, type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1945301683602458784, guid: c786dcd5f720bb47dbf843bd97137452, type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1945301683602458784, guid: c786dcd5f720bb47dbf843bd97137452, type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1945301683602458784, guid: c786dcd5f720bb47dbf843bd97137452, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1945301683602458784, guid: c786dcd5f720bb47dbf843bd97137452, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1945301683602458784, guid: c786dcd5f720bb47dbf843bd97137452, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8295937476714018201, guid: c786dcd5f720bb47dbf843bd97137452, type: 3}
propertyPath: m_Name
value: ThrowableCube
objectReference: {fileID: 0}
- target: {fileID: 8295937476714018201, guid: c786dcd5f720bb47dbf843bd97137452, type: 3}
propertyPath: m_Layer
value: 6
objectReference: {fileID: 0}
m_RemovedComponents:
- {fileID: 53541677567227536, guid: c786dcd5f720bb47dbf843bd97137452, type: 3}
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: c786dcd5f720bb47dbf843bd97137452, type: 3}
--- !u!1001 &8573843940365930253
PrefabInstance:
m_ObjectHideFlags: 0
@@ -9204,4 +9192,5 @@ SceneRoots:
- {fileID: 1539339757}
- {fileID: 2031184782}
- {fileID: 1368253247}
- {fileID: 830206784}
- {fileID: 5783770961855197083}
- {fileID: 1902652822}

View File

@@ -13,7 +13,7 @@ TagManager:
- Ground
- Water
- UI
-
- Grabbable
-
-
-