game: info collecting mechanic, can build off to add as data in web
This commit is contained in:
parent
10b5abbfdc
commit
d228d1cd34
5 changed files with 229 additions and 24 deletions
|
@ -19,7 +19,7 @@ GameObject:
|
|||
- component: {fileID: 5684876363966156978}
|
||||
m_Layer: 0
|
||||
m_Name: Needle_Reza
|
||||
m_TagString: Untagged
|
||||
m_TagString: InfoObject
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
|
|
|
@ -695,7 +695,7 @@ RectTransform:
|
|||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||
m_AnchoredPosition: {x: 367, y: 191}
|
||||
m_AnchoredPosition: {x: 370, y: 181}
|
||||
m_SizeDelta: {x: 200, y: 50}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!114 &9836844
|
||||
|
@ -745,8 +745,8 @@ MonoBehaviour:
|
|||
m_faceColor:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_fontSize: 30
|
||||
m_fontSizeBase: 30
|
||||
m_fontSize: 16
|
||||
m_fontSizeBase: 16
|
||||
m_fontWeight: 400
|
||||
m_enableAutoSizing: 0
|
||||
m_fontSizeMin: 18
|
||||
|
@ -781,7 +781,7 @@ MonoBehaviour:
|
|||
m_VertexBufferAutoSizeReduction: 0
|
||||
m_useMaxVisibleDescender: 1
|
||||
m_pageToDisplay: 1
|
||||
m_margin: {x: -231.23126, y: 0, z: 45.508484, w: 0}
|
||||
m_margin: {x: -231.23126, y: 0, z: 116.85144, w: -79.70676}
|
||||
m_isUsingLegacyAnimationComponent: 0
|
||||
m_isVolumetricText: 0
|
||||
m_hasFontAssetChanged: 0
|
||||
|
@ -62387,7 +62387,7 @@ MeshCollider:
|
|||
serializedVersion: 5
|
||||
m_Convex: 0
|
||||
m_CookingOptions: 30
|
||||
m_Mesh: {fileID: 1837428087}
|
||||
m_Mesh: {fileID: 2012346953}
|
||||
--- !u!33 &907749283
|
||||
MeshFilter:
|
||||
m_ObjectHideFlags: 10
|
||||
|
@ -73219,11 +73219,11 @@ PrefabInstance:
|
|||
objectReference: {fileID: 2105633704}
|
||||
- target: {fileID: 2618367384921537347, guid: 115e0f30c5ec185489b02437aec67077, type: 3}
|
||||
propertyPath: m_VersionIndex
|
||||
value: 3215
|
||||
value: 3221
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3510408986590439666, guid: 115e0f30c5ec185489b02437aec67077, type: 3}
|
||||
propertyPath: m_Name
|
||||
value: Needle_Reza (1)
|
||||
value: Needles
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4226959381646210589, guid: 115e0f30c5ec185489b02437aec67077, type: 3}
|
||||
propertyPath: m_Mesh
|
||||
|
@ -80808,6 +80808,140 @@ MonoBehaviour:
|
|||
m_SelectedFaces:
|
||||
m_SelectedEdges: []
|
||||
m_SelectedVertices:
|
||||
--- !u!1 &1177838948
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 1177838949}
|
||||
- component: {fileID: 1177838951}
|
||||
- component: {fileID: 1177838950}
|
||||
m_Layer: 5
|
||||
m_Name: Crosshair
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &1177838949
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1177838948}
|
||||
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_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 1776114652}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 200, y: 50}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!114 &1177838950
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1177838948}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_text: +
|
||||
m_isRightToLeft: 0
|
||||
m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||
m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||
m_fontSharedMaterials: []
|
||||
m_fontMaterial: {fileID: 0}
|
||||
m_fontMaterials: []
|
||||
m_fontColor32:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_fontColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_enableVertexGradient: 0
|
||||
m_colorMode: 3
|
||||
m_fontColorGradient:
|
||||
topLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||
topRight: {r: 1, g: 1, b: 1, a: 1}
|
||||
bottomLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||
bottomRight: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_fontColorGradientPreset: {fileID: 0}
|
||||
m_spriteAsset: {fileID: 0}
|
||||
m_tintAllSprites: 0
|
||||
m_StyleSheet: {fileID: 0}
|
||||
m_TextStyleHashCode: -1183493901
|
||||
m_overrideHtmlColors: 0
|
||||
m_faceColor:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_fontSize: 18
|
||||
m_fontSizeBase: 18
|
||||
m_fontWeight: 400
|
||||
m_enableAutoSizing: 0
|
||||
m_fontSizeMin: 18
|
||||
m_fontSizeMax: 72
|
||||
m_fontStyle: 0
|
||||
m_HorizontalAlignment: 2
|
||||
m_VerticalAlignment: 512
|
||||
m_textAlignment: 65535
|
||||
m_characterSpacing: 0
|
||||
m_wordSpacing: 0
|
||||
m_lineSpacing: 0
|
||||
m_lineSpacingMax: 0
|
||||
m_paragraphSpacing: 0
|
||||
m_charWidthMaxAdj: 0
|
||||
m_enableWordWrapping: 1
|
||||
m_wordWrappingRatios: 0.4
|
||||
m_overflowMode: 0
|
||||
m_linkedTextComponent: {fileID: 0}
|
||||
parentLinkedComponent: {fileID: 0}
|
||||
m_enableKerning: 1
|
||||
m_enableExtraPadding: 0
|
||||
checkPaddingRequired: 0
|
||||
m_isRichText: 1
|
||||
m_parseCtrlCharacters: 1
|
||||
m_isOrthographic: 1
|
||||
m_isCullingEnabled: 0
|
||||
m_horizontalMapping: 0
|
||||
m_verticalMapping: 0
|
||||
m_uvLineOffset: 0
|
||||
m_geometrySortingOrder: 0
|
||||
m_IsTextObjectScaleStatic: 0
|
||||
m_VertexBufferAutoSizeReduction: 0
|
||||
m_useMaxVisibleDescender: 1
|
||||
m_pageToDisplay: 1
|
||||
m_margin: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_isUsingLegacyAnimationComponent: 0
|
||||
m_isVolumetricText: 0
|
||||
m_hasFontAssetChanged: 0
|
||||
m_baseMaterial: {fileID: 0}
|
||||
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
|
||||
--- !u!222 &1177838951
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1177838948}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!1 &1184053919
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
|
@ -114248,6 +114382,7 @@ RectTransform:
|
|||
m_Children:
|
||||
- {fileID: 707184550}
|
||||
- {fileID: 5551323}
|
||||
- {fileID: 1177838949}
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
|
@ -122441,6 +122576,8 @@ MonoBehaviour:
|
|||
gazeTimeRequired: 2
|
||||
displayTime: 5
|
||||
infoText: {fileID: 9836844}
|
||||
audioSource: {fileID: 1898819871}
|
||||
scribbleSound: {fileID: 8300000, guid: 28757b19d93f6db4bb4b45260f18bc87, type: 3}
|
||||
--- !u!1 &1853702029
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
|
@ -148129,11 +148266,11 @@ PrefabInstance:
|
|||
objectReference: {fileID: 1425780483}
|
||||
- target: {fileID: 2618367384921537347, guid: 115e0f30c5ec185489b02437aec67077, type: 3}
|
||||
propertyPath: m_VersionIndex
|
||||
value: 3215
|
||||
value: 3221
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3510408986590439666, guid: 115e0f30c5ec185489b02437aec67077, type: 3}
|
||||
propertyPath: m_Name
|
||||
value: Needle_Reza
|
||||
value: Needles
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4226959381646210589, guid: 115e0f30c5ec185489b02437aec67077, type: 3}
|
||||
propertyPath: m_Mesh
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
Author: Reza
|
||||
Date: 3/2/25
|
||||
Description: To keep track of tasks and game mechanics
|
||||
Description: To keep track of tasks, which level the player is at, and game mechanics
|
||||
*/
|
||||
|
||||
using System.Collections;
|
||||
|
@ -10,6 +10,45 @@ using UnityEngine;
|
|||
|
||||
public class GameManager : MonoBehaviour
|
||||
{
|
||||
/* Game Story Flow:
|
||||
- Player cleans room while waiting for parents to leave
|
||||
- The door unlocks after room is cleaned and explored and player either sweeps floor or brushes teeth
|
||||
-
|
||||
*/
|
||||
|
||||
/// <summary>
|
||||
/// singleton pattern: define instance field for accessing the singleton elsewhere
|
||||
/// </summary>
|
||||
public static GameManager Instance;
|
||||
|
||||
/// <summary>
|
||||
/// enforces singleton behaviour; sets doesn't destroy on load and checks for multiple instances
|
||||
/// </summary>
|
||||
private void Awake()
|
||||
{
|
||||
// check if instance hasn't been set yet
|
||||
if (Instance == null)
|
||||
{
|
||||
Debug.Log("awake as singleton instance, setting self as the forever-alive instance");
|
||||
Instance = this;
|
||||
DontDestroyOnLoad(gameObject);
|
||||
}
|
||||
// check if instance is already set and it's not this instance
|
||||
else if (Instance != null && Instance != this)
|
||||
{
|
||||
Debug.Log("awake as non-singleton instance, destroying self");
|
||||
Destroy(gameObject);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// trackable game tasks (Reza)
|
||||
/// </summary>
|
||||
private bool bedroomCleaned = false;
|
||||
private bool teethBrushed = false;
|
||||
private bool floorSweeped = false;
|
||||
|
||||
|
||||
// Start is called before the first frame update
|
||||
void Start()
|
||||
{
|
||||
|
|
|
@ -15,10 +15,10 @@ public class InfoCollector : MonoBehaviour
|
|||
public float detectionRange = 2f;
|
||||
|
||||
// Defines how long the player must look at the object for to collect information
|
||||
public float gazeTimeRequired = 2f;
|
||||
public float gazeTimeRequired = 1.5f;
|
||||
|
||||
// Defines how long the information UI will remain on screen
|
||||
public float displayTime = 5f;
|
||||
public float displayTime = 7f;
|
||||
|
||||
// Defines the UI text to display
|
||||
public TMP_Text infoText;
|
||||
|
@ -34,6 +34,13 @@ public class InfoCollector : MonoBehaviour
|
|||
|
||||
// Tracks how long the player has been looking at the object
|
||||
private float gazeTimer = 0f;
|
||||
|
||||
// Defines Audio References
|
||||
public AudioSource audioSource;
|
||||
public AudioClip scribbleSound;
|
||||
|
||||
// Store objects that have already been collected
|
||||
private HashSet<GameObject> collectedObjects = new HashSet<GameObject>();
|
||||
|
||||
void Start()
|
||||
{
|
||||
|
@ -56,23 +63,29 @@ public class InfoCollector : MonoBehaviour
|
|||
// Ensures that relevant info objects are detected
|
||||
if (hit.collider.CompareTag("InfoObject"))
|
||||
{
|
||||
// If the player is still looking at the same object, the gaze time
|
||||
if (currentObject == hit.collider.gameObject)
|
||||
GameObject targetObject = hit.collider.gameObject;
|
||||
|
||||
// **Fix: Stop gaze timer if object has been collected**
|
||||
if (collectedObjects.Contains(targetObject))
|
||||
{
|
||||
return; // Exit without increasing gaze time
|
||||
}
|
||||
|
||||
// If the player is still looking at the same object, increase gaze time
|
||||
if (currentObject == targetObject)
|
||||
{
|
||||
// Increases gaze time
|
||||
gazeTimer += Time.deltaTime;
|
||||
|
||||
// If gaze time reaches required time and is not displaying yet, display the information
|
||||
// If gaze time reaches required time and info is not displayed yet
|
||||
if (gazeTimer >= gazeTimeRequired && !isDisplaying)
|
||||
{
|
||||
// Display object information
|
||||
CollectInfo(currentObject);
|
||||
CollectInfo(targetObject);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Reset timer if looking at a new object
|
||||
currentObject = hit.collider.gameObject;
|
||||
// Reset timer when looking at a new object
|
||||
currentObject = targetObject;
|
||||
gazeTimer = 0f;
|
||||
}
|
||||
}
|
||||
|
@ -91,9 +104,20 @@ public class InfoCollector : MonoBehaviour
|
|||
// Prevents spamming of display
|
||||
isDisplaying = true;
|
||||
|
||||
// **Fix: Mark object as collected**
|
||||
collectedObjects.Add(obj);
|
||||
|
||||
// Displays information
|
||||
infoText.text = "Info Collected: " + obj.name + "\n" + GetObjectInfo(obj);
|
||||
infoText.text = "<size=15>Info Collected:</size>\n\n" +
|
||||
"<size=20>" + obj.name + "</size>\n" +
|
||||
"<size=16>" + GetObjectInfo(obj) + "</size>";
|
||||
Debug.Log("Collected information from: " + obj.name);
|
||||
|
||||
// Play sound only if no other sound is currently playing
|
||||
if (!audioSource.isPlaying)
|
||||
{
|
||||
audioSource.PlayOneShot(scribbleSound);
|
||||
}
|
||||
|
||||
// Clears text after displayed time
|
||||
Invoke(nameof(ClearText), displayTime);
|
||||
|
@ -112,9 +136,13 @@ public class InfoCollector : MonoBehaviour
|
|||
string GetObjectInfo(GameObject obj)
|
||||
{
|
||||
// Check if the object's name is the same
|
||||
if (obj.CompareTag("Needles"))
|
||||
if (obj.name == "Needles")
|
||||
// Returns predefined information
|
||||
return "Test";
|
||||
return "A used needle. If my parents finds out they would murder me.";
|
||||
|
||||
if (obj.name == "Bottles")
|
||||
// Returns predefined information
|
||||
return "An empty bottle. It numbs the pain... but not for long enough";
|
||||
|
||||
// Default information if there is no specific case
|
||||
return "An unknown object with mysterious origins.";
|
||||
|
|
|
@ -11,6 +11,7 @@ TagManager:
|
|||
- InfoObject
|
||||
- Bottle
|
||||
- Dirt
|
||||
- Needles
|
||||
layers:
|
||||
- Default
|
||||
- TransparentFX
|
||||
|
|
Loading…
Add table
Reference in a new issue