1
0
forked from cgvr/DeltaVR

56 Commits

Author SHA1 Message Date
4e55b7e9ab made shape scanner ray colliders higher 2026-03-25 13:46:57 +02:00
dea42068f7 cafe gen items slightly smaller 2026-03-25 13:38:30 +02:00
b021fd0110 remove whisper-small, add and use whisper base EN 2026-03-25 13:03:22 +02:00
7b45d623d1 add whisper-small and whisper-tiny, use tiny 2026-03-23 10:09:58 +02:00
f42356dd7a remove mic buffer clearing functionality 2026-03-23 09:55:58 +02:00
50002adb61 remove audio loopback functionality 2026-03-23 09:22:20 +02:00
ee629e2593 assigned correct collision layer to tutorial cubes 2026-03-20 14:51:27 +02:00
4796869a29 professor final voice line comes from himself, not radio 2026-03-20 14:50:15 +02:00
398f22efdd added 'END PLAYBACK' to removing strings 2026-03-17 10:36:12 +02:00
b40b075540 update TODO 2026-03-16 15:59:54 +02:00
cad4c2cbbc mouth animation correctly plays even if previous voiceline is interrupted 2026-03-16 15:40:31 +02:00
6a77893ed7 archery range npc voicelines for completing round and submitting name 2026-03-16 15:32:46 +02:00
439094f74a professor says thank you after player enters room 2026-03-16 15:09:14 +02:00
c78886e492 professor says good job after first config done 2026-03-16 14:59:10 +02:00
3edef118af add new voiceline files, remove FMOD cache folder 2026-03-16 14:23:02 +02:00
d6c2878491 simplify shape scanner code 2026-03-16 12:31:43 +02:00
f101de5390 remove SelectExit from shape scanner 2026-03-16 12:29:07 +02:00
58d5f24069 delete copy scene 2026-03-16 12:06:53 +02:00
2c8c146a5f fixed bug with shape scanner destroying not whole scannable object, deleted Parent-GeneratedModel objects from scene 2026-03-16 12:04:03 +02:00
db60947749 fix shapescanner incorrect ray counting and make asynchronous 2026-03-16 11:28:58 +02:00
717964affd fixed bug with radio not recording voice 2026-03-15 12:40:27 +02:00
e0492595e1 moved spawn point to cgvr lab, adjusted tp points heights 2026-03-14 17:43:43 +02:00
e56e3f3618 cheat keys also rotate player after teleport 2026-03-12 19:08:05 +02:00
fc083e7d81 npcs turn towards the player separately from being aggroed 2026-03-12 18:57:30 +02:00
a6a6b036ca reduced shape scanner conf count, fix bug with HUD 2026-03-12 18:07:55 +02:00
b1fe32bdf2 professor has his own radio 2026-03-12 17:32:53 +02:00
6e9e5cb4d4 releasing radio button starts feeding silence into Whisper stream 2026-03-12 17:16:34 +02:00
f6b46784bf archery range mic particles slower, wider cone area, shorter lifetime 2026-03-12 16:37:38 +02:00
fca8453a26 continuous collision for cafe spawned objects 2026-03-12 16:32:47 +02:00
07e42ea60b treat more words as positive, make serving tray larger 2026-03-12 16:27:58 +02:00
d85953e02f radio button is pressable only when radio is held 2026-03-12 16:10:49 +02:00
d969d3b77c update readme 2026-03-11 18:10:36 +02:00
9fbd08eb25 archery range spawned objects are rotated towards the player 2026-03-11 17:08:16 +02:00
c19026c0ac made archery range rounds shorter (30 sec) 2026-03-11 17:02:12 +02:00
7b740ea80d shape scanner updates display on start 2026-03-11 16:59:55 +02:00
7a37566296 change shape checker configurations + fix bug with rounding 2026-03-07 16:05:37 +02:00
944b4f0827 adjust insertion and ejection holes transforms 2026-03-07 14:28:43 +02:00
69ff74911c professor waits a few sec before starting to leave 2026-03-07 14:17:31 +02:00
68fe5357d2 professor walks away after having been saved 2026-03-07 13:46:26 +02:00
b583b00303 archery range npc waits a bit before speaking after mic usage 2026-03-07 12:40:17 +02:00
a3b0a20357 add particle effects to archery range model display 2026-03-07 12:33:43 +02:00
f1fc906ae5 add particle effects to 3d printer 2026-03-07 11:59:46 +02:00
96b21d0df9 shape scanner emits particles on config complete 2026-03-07 11:36:43 +02:00
dc077d5ac6 clear out highscores 2026-03-06 18:19:23 +02:00
08c9febd98 archery range mic emits particles + recording is clearer to player 2026-03-06 18:16:45 +02:00
c0e7f292a0 radio particle emission rate corresponds with mic input volume 2026-03-06 17:41:52 +02:00
1bef5a6815 radio button is disabled before radio is grabbed 2026-03-06 17:06:41 +02:00
ba4c7ed631 computer printer Enter key is disabled before radio has been used 2026-03-06 16:55:54 +02:00
2188f16cff radio transmitter emits particles towards computer screen 2026-03-05 13:44:32 +02:00
33b86e09ae radio transmitter keeps transmitting until text processing is completed 2026-03-05 12:52:29 +02:00
22f6982c4c cafe waiter brings food on a serving tray 2026-03-05 12:27:38 +02:00
73fad024c0 made radio button collision less flaky 2026-03-01 13:44:40 +02:00
5e6bb24c27 on shape scanner completion, door is unlocked, shape scanner initializes empty config, quest marker moves to npc 2026-03-01 13:15:51 +02:00
95e67b9870 shape scanner supports multiple object scanning, always destroys colliding objects on config completion 2026-03-01 11:30:33 +02:00
dfdb47b94a change mic icon colour to grey/green 2026-02-28 15:42:15 +02:00
d6a63a5de6 microphone stand has separate enter and exit proximity triggers 2026-02-28 15:18:57 +02:00
567 changed files with 28615 additions and 909 deletions

3
.gitignore vendored
View File

@@ -104,6 +104,9 @@ NetrworkManagerUI.prefab.meta
CustomNetworkManager.prefab
CustomNetworkManager.prefab.meta
#FMOD Studio
DeltaVRFMOD/.cache
# Project-specific files
config.json

View File

@@ -1,36 +1,24 @@
### TODO
* korralik teleportation minigame'idesse, kasutades TeleportProviderit, nagu button
* quest marker peaks jätma nähtavad noolekesed enda liikumise teele
* teha build kus archery range'is spawnitud objektid
* Unity crash after stopping the game - most likely due to FMOD trying to do something with invalid audio instances
* pidev krabamise heli, kui kahe käega korraga krabada: "(Un)requesting ownership of Cube"
* FMOD ChannelControl errorid
* keyboard numbrid ei tööta pärast minigame'i completemist?
* speech-to-text:
* vahepeal lakkab töötamast lih??? tundub et siis kui pikalt tühjust salvestab? ei, vahepeal läheb kohe alguses ka
* sööta talle nulle kui on disabled, sest ikka kuidagi tuvastab eelnevat rääkimist
* uurida miks buildis Whisper halvemini töötab
* proovida suuremat Whisperi mudelit, äkki töötab mürases keskkonnas paremini
* igal pool, kus mängija peab rääkima, peaks olema:
* helilained räägitava heli amplituudi põhjal
* "loading" dünaamiline ikoon kui mängija ootab protsessimise järel
* shape detection:
* raadio nupp võiks töötada recording mode'is, mitte streamina - kui lased lahti, siis hakkab processima
* professor võiks öelda "good job, continue..." pärast esimest successi
* kui kõik configurationid tehtud, siis midagi juhtub: uks avaneb, quest marker läheb ukse juurde, professor ütleb "thank you"
* peab mängijale kuidagi selgitama, kuidas scale'ida prinditud objekte
* prinditud objekti scale'imisele min ja max size limiit
* shape scanner mitte lihtsalt ontriggerenter ja -exit, sest kui mitu objekti lähevad samal ajal sisse
* shape scanneris prinditud objektid mõnikord ei kao ära kui config success
* archery range:
* mute/unmute ikooni värv mitte must (muted kollane, roheline)
* mikrofon peaks lõpetama protsessimise ka siis kui mängija läheb ära mikri juurest
* mikril ontriggerenter collider peaks olema väiksem kui ontriggerexit collider
* võiks jääda kordama viimast instruktsiooni, kui mängija ei progressi edasi
* kui archery range läbi, võiks npc öelda "good job, try again..."
* kui midagi laeb (wire aktiivne), siis particle'id võiks voolata mööda toru
* highscore json tühjaks
* cafe:
* npc võiks olla keeratud sinu poole juba kaugelt
* toit võiks tulla kandiku peal/sees
* npc character:
* klaas on näha temast eespool
* voicelines: list listidest, mille hulgast saab valida
* shape detection:
* peab mängijale kuidagi selgitama, kuidas scale'ida prinditud objekte
* prinditud objekti scale'imisele min ja max size limiit
* 3d printerile soft particle'id, et ei oleks teravaid ääri seina sisse minnes
* archery range:
* archery targetite rework, et buildis ka töötaks
* võiks jääda kordama viimast instruktsiooni, kui mängija ei progressi edasi
* UFO möödalendamise animation/cutscene alguses kui ütleb "delta attacked by ufos" + panna juba alguses kapsli sisse ufo pöörlema
* cafe:
* võiks saada hinnata saadud tellimust
* "order again" nupp
Can't/Won't Do:
* glTF loading: vahetada ära shader Universal render pipeline Lit, mitte panna buildi kaasa glTf oma - **ei saa, objekt on siis ilma tekstuurita, lihtsalt hall**
@@ -44,3 +32,8 @@ Can't/Won't Do:
* Getting Whisper stream to work with FMOD instead of Unity default audio
* TRELLIS: added functionality to specify texture baking optimisation total steps as an argument (`texture_opt_total_steps`), to replace the hardcoded 2500. But this is not tracked in Git (because modified this https://github.com/IgorAherne/trellis-stable-projectorz/releases/tag/latest)
* Custom Shader Variant Collection to include glTF-pbrMetallicRoughness shader in build
Katse tähelepanekud:
* peab väga proper english accenti tegema
* mõne inimese puhul kuuleb "cat" asemel "cut"
* kui helitugevus oli liiga suur siis cafe waiter kuulis kohviku taustaheli taldriku klirinat kui "piano music"

View File

@@ -6,9 +6,17 @@ import numpy as np
FRAME_DURATION = 0.02 # 20 ms windows
GAIN = 1.0 # multiply RMS values (set to e.g. 30.0 if you want larger values)
EXTENSION = ".txt" # output file extension
OVERWRITE = False # set True to regenerate even if .txt exists
def process_wav(filepath):
# Compute output path first (so we can decide whether to skip)
out_path = os.path.splitext(filepath)[0] + EXTENSION
if not OVERWRITE and os.path.exists(out_path):
print(f"Skipping (already exists): {out_path}")
return
print(f"Processing: {filepath}")
# Load audio
@@ -29,7 +37,6 @@ def process_wav(filepath):
rms = rms * GAIN
# Save to .txt
out_path = os.path.splitext(filepath)[0] + EXTENSION
np.savetxt(out_path, rms, fmt="%.8f")
print(f"Saved RMS → {out_path}")
@@ -49,4 +56,4 @@ def process_folder(folder_path):
# === Run script ===
if __name__ == "__main__":
folder = input("Enter folder path: ").strip()
process_folder(folder)
process_folder(folder)

View File

@@ -0,0 +1,242 @@
0.00000005
0.00000003
0.00000000
0.00000000
0.00000000
0.00036824
0.03882600
0.04177133
0.02403286
0.09960490
0.10405141
0.07374308
0.07527987
0.03196403
0.01316589
0.01331185
0.03220127
0.12253414
0.14686617
0.12083520
0.10250615
0.04661508
0.01492038
0.01040760
0.01080491
0.03343014
0.03452057
0.08047014
0.13933837
0.10572984
0.09591001
0.09608150
0.08540177
0.09933743
0.10790430
0.11058167
0.13160037
0.06650670
0.03915674
0.03693420
0.04971446
0.03620111
0.06649657
0.11552364
0.10445996
0.09714538
0.08278799
0.09152920
0.08658629
0.05098534
0.02467363
0.02987090
0.02563231
0.02510932
0.02980772
0.02069706
0.01281166
0.00566670
0.00150570
0.00020095
0.00000742
0.00000009
0.00000012
0.00000011
0.00000010
0.00000010
0.00000009
0.00000022
0.00000005
0.00001097
0.04429267
0.09924962
0.09210955
0.10632528
0.10751414
0.06163353
0.05821634
0.06596723
0.04842441
0.05856047
0.10333158
0.10103170
0.08816345
0.04771255
0.04730519
0.04158855
0.05243348
0.05098458
0.03500115
0.08092596
0.09854711
0.04113061
0.01454402
0.01907839
0.03828202
0.05046624
0.04319734
0.03666504
0.04976141
0.10466427
0.13796268
0.06061497
0.07129071
0.05450837
0.05630979
0.03684894
0.01367352
0.00608366
0.06432867
0.11517638
0.05077915
0.02521306
0.09515605
0.10619617
0.08939873
0.07993037
0.04875693
0.01546201
0.00356502
0.00079084
0.02424777
0.06102380
0.11638185
0.07587082
0.02516444
0.00761989
0.00276396
0.00242381
0.11056973
0.12456685
0.11282478
0.09799541
0.08472683
0.07964602
0.05019686
0.03458880
0.06462081
0.13280798
0.10013983
0.07293872
0.04550291
0.01720131
0.00380182
0.00101899
0.02245994
0.06382865
0.10524299
0.13267922
0.10135622
0.05452089
0.03518274
0.01694293
0.00530868
0.00184345
0.02273818
0.11510796
0.11920995
0.08493148
0.08406932
0.07499230
0.04316685
0.01455623
0.00360244
0.00098371
0.00005477
0.00000010
0.00000002
0.00000016
0.00000019
0.00000010
0.00000005
0.00000003
0.00000004
0.00000005
0.00000004
0.00000005
0.00000005
0.00000005
0.00000005
0.00000004
0.00000004
0.00000004
0.00000004
0.00000003
0.00000003
0.00000003
0.00000003
0.00000002
0.00000003
0.00000001
0.00000001
0.00000001
0.00000001
0.00000001
0.00000000
0.00000001
0.00000000
0.00000000
0.00000000
0.00000000
0.00000000
0.00000000
0.00000000
0.00000000
0.00464831
0.01679505
0.01644613
0.00761335
0.04794521
0.15165883
0.14422260
0.11421057
0.10831729
0.10226198
0.09510653
0.08230808
0.06091324
0.08704218
0.11292138
0.11823592
0.07064166
0.08501519
0.10195074
0.08617997
0.09215603
0.08520056
0.07150462
0.07387789
0.07179367
0.07710328
0.09889054
0.11394204
0.12855592
0.09594936
0.05344614
0.02629551
0.00702043
0.00639688
0.00356133
0.00343324
0.00178488
0.00017040

View File

@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: d9e3dd6a9520c354e998bd0ad3a81f46
guid: 38bc01876ee396a46b03ca91e612e687
DefaultImporter:
externalObjects: {}
userData:

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 42e58ab8243a8c3449d391cc548d895c
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,257 @@
0.00000005
0.00000003
0.00000000
0.00000000
0.00000000
0.00000000
0.00000000
0.00000000
0.00000000
0.00000000
0.02866505
0.03807113
0.04488242
0.10851473
0.09911134
0.08479626
0.10611577
0.12813284
0.08128907
0.07260925
0.04148039
0.01129543
0.03132603
0.04842420
0.12944126
0.12574370
0.09939571
0.08343700
0.04287383
0.01194310
0.00638063
0.00868709
0.01998390
0.03058048
0.05329744
0.13083695
0.12668352
0.10024661
0.10386836
0.08472306
0.11218496
0.14319295
0.13648318
0.13254981
0.04781179
0.03629516
0.03413614
0.03457404
0.03213657
0.05343652
0.09439317
0.12365869
0.09173419
0.09353486
0.07192323
0.03836626
0.01338022
0.00760281
0.01999712
0.02072252
0.01272902
0.00845736
0.00641201
0.00285632
0.00061737
0.00005392
0.00000020
0.00000018
0.00000019
0.00000017
0.00000015
0.00000016
0.00000013
0.00000011
0.00000011
0.00000008
0.00000010
0.00000006
0.00000007
0.00000003
0.00782415
0.01642422
0.02543612
0.05934152
0.07718527
0.11592234
0.11971953
0.06149256
0.03805179
0.05762681
0.05818856
0.04659332
0.08668210
0.10497145
0.12429776
0.11524499
0.04751239
0.02633372
0.03824132
0.04337949
0.03293408
0.03691372
0.03303327
0.07757192
0.13191013
0.09265970
0.02088793
0.02473713
0.02916055
0.03506608
0.05408846
0.03094980
0.10444548
0.15158002
0.08798907
0.04625344
0.06151570
0.05407208
0.03231843
0.01555239
0.00728854
0.04916612
0.10232492
0.07878979
0.06246471
0.05366619
0.10158715
0.11886908
0.07526539
0.02821623
0.01340943
0.00232617
0.00036846
0.03731488
0.03152382
0.03894958
0.03209079
0.00981623
0.00146699
0.00014517
0.00534313
0.06100523
0.15190409
0.10988420
0.12650685
0.11347217
0.05970725
0.04618064
0.05150063
0.03090077
0.03317851
0.08775605
0.13566470
0.10128807
0.04527346
0.01804154
0.00596208
0.00167694
0.00009594
0.00012192
0.01358539
0.07102436
0.12123850
0.12106773
0.10533741
0.13110749
0.05361572
0.02358464
0.01034726
0.00343355
0.00162977
0.03254148
0.12353230
0.12104879
0.10228956
0.07902068
0.03294208
0.01555405
0.00885278
0.00349990
0.00085096
0.00030811
0.00001531
0.00000017
0.00000016
0.00000014
0.00000013
0.00000013
0.00000011
0.00000029
0.00000028
0.00000010
0.00000008
0.00000007
0.00000007
0.00000005
0.00000005
0.00000003
0.00000005
0.00000002
0.00000002
0.00000001
0.00000001
0.00000001
0.00000001
0.00000000
0.00000001
0.00000001
0.00000001
0.00000001
0.00000002
0.00000002
0.00000001
0.00000002
0.00000001
0.00000001
0.00000001
0.00000001
0.00000456
0.01129090
0.01738315
0.02089866
0.01380159
0.13116765
0.11541200
0.10767516
0.11273928
0.10450145
0.08044391
0.08610874
0.07811639
0.08932848
0.09916812
0.08233824
0.07835159
0.08648565
0.08551071
0.11009068
0.12401471
0.09915505
0.07595969
0.06414745
0.06739331
0.06131895
0.09213228
0.09952611
0.08556054
0.09036897
0.08143000
0.04082204
0.01703065
0.00659234
0.00967564
0.00593357
0.00343951
0.00107827
0.00010090

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 5898d7a0def449d47856bcc1ca7a29d6
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 7cb93a4fb1b04374eaf023113b75af18
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,287 @@
0.00000005
0.00000003
0.00000000
0.00000000
0.00000000
0.00000000
0.00000000
0.01041133
0.11050373
0.11571781
0.09685160
0.06781394
0.06115836
0.02671054
0.01714665
0.01123293
0.00581291
0.00527384
0.03901498
0.11867370
0.15407452
0.09560385
0.05615886
0.04482845
0.02856232
0.08357130
0.12180025
0.11046895
0.08895491
0.08778770
0.09132081
0.04692575
0.01269024
0.00540550
0.01323932
0.03548777
0.09886734
0.10633425
0.06211413
0.04629371
0.03601964
0.03145342
0.03699398
0.02851260
0.09810046
0.12985127
0.10250688
0.07980689
0.08739660
0.04454322
0.01042159
0.02879480
0.04266862
0.01084313
0.04596614
0.13443977
0.10879387
0.04520948
0.04018075
0.02624859
0.00865528
0.00220818
0.00292230
0.00325043
0.01547375
0.10285073
0.13288546
0.06569756
0.04191129
0.00984927
0.00487799
0.00717907
0.07125617
0.14066201
0.12093860
0.12668209
0.08771859
0.08893538
0.11586918
0.09410246
0.11251948
0.06581375
0.01573470
0.00798749
0.00473720
0.00184862
0.00599098
0.01365598
0.00891943
0.00741468
0.00870850
0.12349596
0.20865980
0.11312929
0.08664145
0.12243897
0.12067145
0.08424711
0.05526139
0.04627320
0.10428049
0.08349684
0.07010089
0.02950357
0.01629749
0.01049282
0.01468810
0.02427274
0.02904649
0.02663092
0.02238721
0.01449317
0.00891655
0.00328868
0.00101202
0.00018072
0.00000018
0.00000022
0.00001380
0.00340936
0.01070781
0.02272540
0.02303817
0.01339627
0.01482264
0.02972042
0.16883568
0.13453023
0.14972425
0.08440456
0.09065786
0.05294919
0.02135629
0.00819955
0.00474883
0.00529746
0.00265304
0.00225529
0.01425153
0.08025608
0.12780648
0.10383718
0.06637228
0.06980769
0.06826495
0.05187644
0.03362885
0.01408524
0.02797011
0.04798624
0.04473467
0.06783500
0.07362254
0.03932714
0.01432003
0.00567656
0.02164616
0.02448191
0.12810233
0.14456984
0.12034076
0.12263951
0.10216748
0.08076008
0.06284898
0.04605800
0.01751118
0.04122978
0.05452909
0.06921396
0.07712647
0.05760632
0.03222826
0.02906787
0.05488998
0.05686560
0.04881791
0.06627714
0.07501493
0.06122237
0.04391065
0.04513443
0.05685579
0.06692855
0.11950159
0.09488340
0.05996871
0.12589936
0.12426486
0.08167235
0.08727088
0.09361180
0.05560031
0.02492296
0.01225502
0.02261247
0.10637776
0.10854032
0.08564665
0.06367619
0.03858946
0.01254055
0.00857360
0.00521010
0.03276831
0.05026552
0.07917455
0.12885508
0.09776132
0.04524392
0.02057937
0.00684326
0.00172701
0.00501310
0.00338763
0.00062568
0.00007869
0.00000011
0.07221141
0.13406493
0.11343215
0.06939244
0.05757182
0.05019560
0.02351180
0.00653620
0.01007761
0.03060259
0.07896144
0.11751062
0.06696402
0.03085680
0.01771194
0.05062816
0.12535316
0.09691679
0.05669325
0.03652356
0.04995165
0.10247808
0.14754270
0.10729573
0.09490211
0.08105871
0.03237764
0.01436423
0.02403967
0.06067147
0.09486736
0.11827907
0.06557996
0.01828207
0.00410462
0.00560886
0.02666351
0.10461742
0.12328171
0.11638515
0.07130920
0.06859463
0.04690340
0.02583032
0.02004467
0.04906425
0.06766128
0.10911208
0.11592212
0.09715220
0.03466866
0.01872768
0.01205066
0.03613232
0.09832279
0.14594945
0.10550399
0.13000724
0.09247153
0.04398929
0.06428571
0.04855256
0.05265495
0.02728924
0.01480956
0.01000638
0.00291081
0.00050468
0.00004996

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 7d61563367dd2174ebac733fc96d5a7c
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 264f1b0a1d60ee44fb83104376fe62d6
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,292 @@
0.00000005
0.00000003
0.00000000
0.00000000
0.00000000
0.00000000
0.00000000
0.00000000
0.00000000
0.00017371
0.00397631
0.00645893
0.03636703
0.11108588
0.09490587
0.05810735
0.03614677
0.01433622
0.02562395
0.03500152
0.11138436
0.11492082
0.08813144
0.11754254
0.09585521
0.05497217
0.08569790
0.10671677
0.09063023
0.10238150
0.10540754
0.07553490
0.04124249
0.01229520
0.00533037
0.00913266
0.02397980
0.10611945
0.10192107
0.07391837
0.05137710
0.05373237
0.05023317
0.03660126
0.04064788
0.03359168
0.05470684
0.14775619
0.13745435
0.10754745
0.10044444
0.08634765
0.04968073
0.02235863
0.00676216
0.01762132
0.03200046
0.01515087
0.02490337
0.03465642
0.08731771
0.05780291
0.04214677
0.03614981
0.01129049
0.00178883
0.00043622
0.00002077
0.00790669
0.03906181
0.13493988
0.12611340
0.10359488
0.05120334
0.02121265
0.00780912
0.02118601
0.08881138
0.13246961
0.13096575
0.08698378
0.07840307
0.08006902
0.08267396
0.07665613
0.06423858
0.02234341
0.00549498
0.00242034
0.00047552
0.00005966
0.03320520
0.06114354
0.05643975
0.11037107
0.13888292
0.16179177
0.10823945
0.09318663
0.08210272
0.05253165
0.04468418
0.08318146
0.09999528
0.05302287
0.02463017
0.00933137
0.00975701
0.01784607
0.02833371
0.03651267
0.04211179
0.03161097
0.02936525
0.02278606
0.01299867
0.00431430
0.00138863
0.00027162
0.00000123
0.00000004
0.00000005
0.00000004
0.00073564
0.00535114
0.01484067
0.02635980
0.02197363
0.01175617
0.01850840
0.13574521
0.13955091
0.16727531
0.10608624
0.09235191
0.08989335
0.03222363
0.01007234
0.00426795
0.00493753
0.00278311
0.00285112
0.00889112
0.02711722
0.11798907
0.12569274
0.08584248
0.06597847
0.07110602
0.05414321
0.04401594
0.01751132
0.01334137
0.03514252
0.04998326
0.05386503
0.08303778
0.05580477
0.03294466
0.01155389
0.01592658
0.01961545
0.04122524
0.14904048
0.13972428
0.12943657
0.10712221
0.08562635
0.07122923
0.05961891
0.02759550
0.01993110
0.04310589
0.07547285
0.08173466
0.06247975
0.04214621
0.03760689
0.03115748
0.05670190
0.05714985
0.06260712
0.07415769
0.07433423
0.05062892
0.04170515
0.04818286
0.05886082
0.10128240
0.10150870
0.05131475
0.11870202
0.12748007
0.09922212
0.09134800
0.11311474
0.05401089
0.04061917
0.01249508
0.00948702
0.04186318
0.11898167
0.09532230
0.09337173
0.04848767
0.02473678
0.01069614
0.00484177
0.01662082
0.04742326
0.06200481
0.12276933
0.10882907
0.08602326
0.03015586
0.00973329
0.00328402
0.00226518
0.00784843
0.00278660
0.00034507
0.00005544
0.00514254
0.11737227
0.11911432
0.06987587
0.06208072
0.05524339
0.03672045
0.01023218
0.00268005
0.02696391
0.03711095
0.11534176
0.07793026
0.06439523
0.02477391
0.02580977
0.12326863
0.10718736
0.06945094
0.04225161
0.04650784
0.05684860
0.14646806
0.12088709
0.10804930
0.09149216
0.06569657
0.01902741
0.00708923
0.03978205
0.06555759
0.13457091
0.07263914
0.03940162
0.01395208
0.00407308
0.00785582
0.07307136
0.14730501
0.12630911
0.09076075
0.05463418
0.05033695
0.03686942
0.02131259
0.03664210
0.03732653
0.07706883
0.10262816
0.11299729
0.08176315
0.03037785
0.01326680
0.01651880
0.08489019
0.12672557
0.12814839
0.13081826
0.10027778
0.06042381
0.05928643
0.04862963
0.05942964
0.03829884
0.02554955
0.01399406
0.00600915
0.00526958
0.00088941
0.00000848

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 0a12bca9c495f844788cac4b3dc01528
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 8ff483912820c0c458c2960593f32d01
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,306 @@
0.00000005
0.00000003
0.00000000
0.00000000
0.00008677
0.02555647
0.06356105
0.06754274
0.12535521
0.11968394
0.10654067
0.08807448
0.03094069
0.01887335
0.04522886
0.10707195
0.10807064
0.11986617
0.15139525
0.12412844
0.08856518
0.09356070
0.09514336
0.07740945
0.06272630
0.05835729
0.05653152
0.04069148
0.02248743
0.00993187
0.00186555
0.00107107
0.00120904
0.00187453
0.00111695
0.00004033
0.00000578
0.00000037
0.00000047
0.00000041
0.00000041
0.00000036
0.00000037
0.00000030
0.00000033
0.00000027
0.00000021
0.00000026
0.00000013
0.00000017
0.00000012
0.00000011
0.01054585
0.05012132
0.13717458
0.13160563
0.06083952
0.03850145
0.06312518
0.08917529
0.07733954
0.03812576
0.02091784
0.02317895
0.09112280
0.10568590
0.05461230
0.01764572
0.00752449
0.00855657
0.01883113
0.11905217
0.15466592
0.14110537
0.12407092
0.09104393
0.06492120
0.05765026
0.03929679
0.01446094
0.01584649
0.01906035
0.00225289
0.03853673
0.04068287
0.12364593
0.11614482
0.09028992
0.06433237
0.02383663
0.01381440
0.00635609
0.01836661
0.02473579
0.11016511
0.10806321
0.03348883
0.01009692
0.03878922
0.07220570
0.08639481
0.07928380
0.10606322
0.10445405
0.11997829
0.09822565
0.08011347
0.04837793
0.03226493
0.03607234
0.03278252
0.03711180
0.06834672
0.07951122
0.08939215
0.08045211
0.06378602
0.03623512
0.03542983
0.13810526
0.13145922
0.08724828
0.07982137
0.07484215
0.06310783
0.03040927
0.02398604
0.01799416
0.01170484
0.00820995
0.00466642
0.00173959
0.00026183
0.00000286
0.00000056
0.00000045
0.00000036
0.00000037
0.00000035
0.00000034
0.00000032
0.00000030
0.00000027
0.00000027
0.00000023
0.00000022
0.00000018
0.00000018
0.00000013
0.00000013
0.00000010
0.00000010
0.00000008
0.00000004
0.00000004
0.00000003
0.00000002
0.00000003
0.00000003
0.00000002
0.00000002
0.00000004
0.00000002
0.01210695
0.03104685
0.09687874
0.10992987
0.06612710
0.05232693
0.07025713
0.07789180
0.05726887
0.05102119
0.05531616
0.07071804
0.07324490
0.12500001
0.13551877
0.11463275
0.09164570
0.07969173
0.08745047
0.09294610
0.08758718
0.04984579
0.01199116
0.01887675
0.01864040
0.07235581
0.10418790
0.03615440
0.00980441
0.00221446
0.03594533
0.06812992
0.11332203
0.06093310
0.05594898
0.06496126
0.08740044
0.12233238
0.09580570
0.04772820
0.02361993
0.01078867
0.03802064
0.07909553
0.08012012
0.07333743
0.05754400
0.05097869
0.07664723
0.05694538
0.04448567
0.09419085
0.06582000
0.06082845
0.03704552
0.02209460
0.00290526
0.00198855
0.00014714
0.00000098
0.00000014
0.00000015
0.00003012
0.00101211
0.00025446
0.00000087
0.00000012
0.00000008
0.00000007
0.00000005
0.00017385
0.00057944
0.00056784
0.00059026
0.00004644
0.01499533
0.03538585
0.06983574
0.06200712
0.06784921
0.06938390
0.08049586
0.07614776
0.05881132
0.11806823
0.15041181
0.12342727
0.11753254
0.10245495
0.09522798
0.09911717
0.09732006
0.07817753
0.08756886
0.05415813
0.02474579
0.02446261
0.11357070
0.11718469
0.09938256
0.08500034
0.07520326
0.07641556
0.06648254
0.06731120
0.07971697
0.08603772
0.05109902
0.09391770
0.12228667
0.05145732
0.05202519
0.06156273
0.01560635
0.00427968
0.02421295
0.03267565
0.07683574
0.02789398
0.01183625
0.01795142
0.02549900
0.04912534
0.10022978
0.09703911
0.06528247
0.05660536
0.05310062
0.02857801
0.00309033
0.00894551
0.02781632
0.00307855
0.00136751
0.01259168
0.03591923
0.02849875
0.03123168
0.01485326
0.00356870
0.00102485
0.00086726
0.00025258

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 9e4ecb709f95cd241a9c5dc5558ab3b7
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 5aa14328feee8ad47a37f50a3b07ae47
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,309 @@
0.00000005
0.00000003
0.00000002
0.00000004
0.00001575
0.00056058
0.10512087
0.06247878
0.13907126
0.10796085
0.08928745
0.04296236
0.01589850
0.03041418
0.09944262
0.09935775
0.09998433
0.11296503
0.11884489
0.10825495
0.09847742
0.08814481
0.09157983
0.09493581
0.08478543
0.06469711
0.06443882
0.04607481
0.01910205
0.00103388
0.00010046
0.00071292
0.00033006
0.00008951
0.00007941
0.00000031
0.00011136
0.00000019
0.00000021
0.00000018
0.00000026
0.00000008
0.00000014
0.00000015
0.00000016
0.00000012
0.00000009
0.00000007
0.00000006
0.00000005
0.00000004
0.00000002
0.00000002
0.00005185
0.00000828
0.02832398
0.12830395
0.16844831
0.12687734
0.06460033
0.01894131
0.03220102
0.05880868
0.06527510
0.05140930
0.03658038
0.01398638
0.02421561
0.08997451
0.08377688
0.02418836
0.00973439
0.00599007
0.00905722
0.02651637
0.10164079
0.14320731
0.12904300
0.11029114
0.07977970
0.05571616
0.06751201
0.01764874
0.00617195
0.02489195
0.01025172
0.00284820
0.04030944
0.02575630
0.11017919
0.11959197
0.06856420
0.03276161
0.01958396
0.01616774
0.02088996
0.05009602
0.07843453
0.06901982
0.02250954
0.01337707
0.02803325
0.06195528
0.07357799
0.06418665
0.09644670
0.09922776
0.11329394
0.10822823
0.09179486
0.06035907
0.05104551
0.03396708
0.05817677
0.06630339
0.04054824
0.07112641
0.05802667
0.06763632
0.06566662
0.05350130
0.03097204
0.01398106
0.03965144
0.13338506
0.14704359
0.09780610
0.06288150
0.05591090
0.05028389
0.02308469
0.02326990
0.01427633
0.01059657
0.00597096
0.00265677
0.00096331
0.00027705
0.00081122
0.00029532
0.00003557
0.00000033
0.00000033
0.00000032
0.00000030
0.00000028
0.00000030
0.00000022
0.00000023
0.00000021
0.00000018
0.00000015
0.00000015
0.00000014
0.00000010
0.00000007
0.00000008
0.00000004
0.00000004
0.00000002
0.00000002
0.00000002
0.00000002
0.00000002
0.00008707
0.00058412
0.00013537
0.00000516
0.02347101
0.04357265
0.11365347
0.08669745
0.05095782
0.06836279
0.07590245
0.07837829
0.06091340
0.05027740
0.07152368
0.12868381
0.13290957
0.11694506
0.10228214
0.10048629
0.08879036
0.03953559
0.01065895
0.02042474
0.02315973
0.05589612
0.10023368
0.05182547
0.00905302
0.00198392
0.02186030
0.04189350
0.14410524
0.09991421
0.04756368
0.06668478
0.09321541
0.11032545
0.10434034
0.08342411
0.03306899
0.01367741
0.06044695
0.09034430
0.06164889
0.06296910
0.05844286
0.04815272
0.05400948
0.07309759
0.08802762
0.15068236
0.11547473
0.05514836
0.03452749
0.01822943
0.00416943
0.00182502
0.00100153
0.00051689
0.00018493
0.00159059
0.00043061
0.00000588
0.00000041
0.00000057
0.00000034
0.00000041
0.00015376
0.00000841
0.00085780
0.01958037
0.03508846
0.08052298
0.05665231
0.05217534
0.07203114
0.06636944
0.06487500
0.06899809
0.05801162
0.13297467
0.10661902
0.09435981
0.09961571
0.10622018
0.11464507
0.10977937
0.09725338
0.09613403
0.07686792
0.04782833
0.04779501
0.02959961
0.04014716
0.10748242
0.09299997
0.08187937
0.08289372
0.10451850
0.09585603
0.10306562
0.09885249
0.09429167
0.08828995
0.08491156
0.05210634
0.06902108
0.06840731
0.03392952
0.05985209
0.05023765
0.01092744
0.00683205
0.02457151
0.09223298
0.04956920
0.01651768
0.00484253
0.00325285
0.01828707
0.03094625
0.08162503
0.09403877
0.07717906
0.05836591
0.07295292
0.03507503
0.00875005
0.00378138
0.01026982
0.00332591
0.00306266
0.01591836
0.03091518
0.02433426
0.02051376
0.00947862
0.00142537
0.00069377
0.00004064
0.00000018
0.00000003
0.00000002
0.00007110

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: d0ebb29a4c0d68b4da17bc19e7384990
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 97f150ec0d3d48a4db1ea667fe05b072
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,293 @@
0.00000006
0.00000004
0.00000000
0.00000876
0.00000012
0.00004277
0.05436340
0.17665382
0.12990713
0.12583591
0.13277286
0.13517515
0.12306246
0.12600669
0.12459808
0.10394835
0.09309749
0.09333178
0.07643553
0.05511052
0.04393115
0.02941259
0.03382056
0.02038616
0.01548435
0.01363530
0.01174366
0.00893834
0.00600578
0.00371616
0.00200703
0.00146441
0.00025279
0.00000120
0.00000023
0.00000033
0.00000023
0.00000020
0.00000020
0.00000015
0.00000013
0.00000013
0.00000010
0.00000008
0.00000008
0.00011547
0.03884210
0.11290570
0.14032798
0.11392568
0.10667438
0.11704497
0.08145794
0.03876734
0.01617737
0.00410597
0.03786850
0.01552934
0.08146030
0.12936532
0.10310936
0.04261066
0.01968959
0.01155729
0.01246085
0.01643562
0.02611092
0.06975007
0.06647281
0.04812134
0.06127471
0.04931017
0.05622455
0.09936404
0.13729018
0.09841577
0.05966850
0.01680984
0.00261750
0.00143242
0.01419471
0.04943705
0.04137772
0.03587830
0.03199233
0.03906901
0.03574416
0.03229308
0.03190199
0.04779297
0.04261694
0.04245671
0.04589238
0.05662980
0.05274693
0.05354149
0.04374932
0.03250221
0.01861564
0.01963406
0.00308434
0.00011245
0.00000138
0.00004786
0.00000296
0.00000008
0.00040744
0.01232126
0.00401640
0.00080837
0.00001568
0.00000014
0.00000001
0.00000000
0.00000001
0.00000000
0.00000001
0.00000001
0.00000001
0.00000001
0.00000001
0.00000001
0.00000001
0.00000001
0.00000001
0.00000001
0.00000001
0.00000001
0.00000001
0.00137698
0.00120946
0.00037309
0.00001546
0.00019473
0.05597774
0.05349650
0.07315911
0.10007664
0.12148964
0.10390536
0.11813873
0.12236188
0.07448173
0.07163881
0.03668909
0.00482586
0.00674204
0.03587620
0.16254307
0.15529911
0.04756048
0.01177680
0.00713155
0.09382056
0.10292054
0.16375251
0.13605520
0.05452843
0.09455058
0.12224557
0.13256259
0.09879588
0.06324653
0.02657961
0.01032267
0.00230831
0.02871299
0.07454104
0.13230723
0.08707617
0.04283587
0.02152865
0.08970764
0.15705778
0.13232288
0.11249097
0.12094339
0.09471517
0.08165064
0.05688582
0.06236089
0.06496719
0.07772935
0.07066742
0.06583010
0.06023704
0.05579713
0.03196885
0.02167577
0.00885445
0.00054829
0.00120143
0.05003724
0.05701566
0.05554289
0.06652608
0.06286423
0.07321317
0.10022882
0.08733696
0.05627337
0.00893717
0.05115506
0.02904028
0.03742857
0.05691869
0.04722928
0.04761178
0.11284457
0.06448554
0.01647628
0.00811301
0.00184246
0.00095617
0.03380137
0.05253933
0.09993897
0.08770414
0.06539877
0.06725874
0.05866503
0.02927921
0.00474572
0.00449728
0.00220470
0.03732991
0.16716687
0.13160835
0.11313587
0.09361040
0.08533838
0.05350770
0.01132886
0.00188624
0.00224469
0.04322987
0.14946128
0.11786281
0.09559109
0.08745537
0.06887340
0.06453345
0.14468354
0.15365960
0.08112232
0.05636847
0.05092329
0.06082837
0.05791784
0.03492959
0.01728887
0.01145544
0.03110087
0.06301248
0.08440568
0.02886192
0.02436969
0.06101014
0.06737709
0.12571132
0.13595617
0.11148004
0.02669337
0.00637604
0.00583108
0.04190948
0.12353806
0.13185968
0.10900982
0.09392569
0.07719076
0.06124953
0.04566133
0.03477211
0.02629414
0.02993021
0.03762943
0.05084812
0.03652138
0.05007470
0.11358684
0.14574684
0.11534683
0.09708887
0.06805480
0.04739871
0.04391212
0.04065108
0.02693054
0.01430396
0.00508704
0.00183298
0.00007207

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 62632355e21a84c4c84e476062ab8670
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 7a43d69a404558844883b6d1e9ccc6a6
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,268 @@
0.00000005
0.00000003
0.00240253
0.02907968
0.10503523
0.13422142
0.12195620
0.13128196
0.13441545
0.10902201
0.11511548
0.12498570
0.10779791
0.08748529
0.09270831
0.08885102
0.07140992
0.07817293
0.05512253
0.07312962
0.05332483
0.02952465
0.00628433
0.00322687
0.01116481
0.02963358
0.09202230
0.10785520
0.09845226
0.10343045
0.09329684
0.04513930
0.02688077
0.01212403
0.04465980
0.02088372
0.02843172
0.14170074
0.14037681
0.08236120
0.02720438
0.01238582
0.01198153
0.01171427
0.04087922
0.11383022
0.10109381
0.08515322
0.04896748
0.04567009
0.02929136
0.06172283
0.11550593
0.09598164
0.07837296
0.02478683
0.00525718
0.00181524
0.00970324
0.07209075
0.09798092
0.07967266
0.06513842
0.05123381
0.05027419
0.04282681
0.04678136
0.06629726
0.04876049
0.04369129
0.03766395
0.04394144
0.04186778
0.05153219
0.04662358
0.03369124
0.02084255
0.01368451
0.00168093
0.00043239
0.00004149
0.00041319
0.00029644
0.00001294
0.00009876
0.01724320
0.00515795
0.00088585
0.00000051
0.00000013
0.00000001
0.00000002
0.00000002
0.00000002
0.00029903
0.00017885
0.00173300
0.03660622
0.08778569
0.08299683
0.08249202
0.07836448
0.07183830
0.09798677
0.10288965
0.07641125
0.07789677
0.06810252
0.00654751
0.00414498
0.01800906
0.10378619
0.10797114
0.02479648
0.00965088
0.01219227
0.07751130
0.11227150
0.14128794
0.06956887
0.05905581
0.10559428
0.11890519
0.08814315
0.05743459
0.02042473
0.00343255
0.02520813
0.04550547
0.11568366
0.09366174
0.04345708
0.03914818
0.07486159
0.13059510
0.15400928
0.13821089
0.12171482
0.10681405
0.08661242
0.06828332
0.04075309
0.05218672
0.07257383
0.07887270
0.08816109
0.09971622
0.08168958
0.05080761
0.02718288
0.00490109
0.00417936
0.01302431
0.01342031
0.01449505
0.01702639
0.01002846
0.00135636
0.00615288
0.00988699
0.05511121
0.13424085
0.13549428
0.12707625
0.10175641
0.09349026
0.08078031
0.10017768
0.09641082
0.05651959
0.02388979
0.03372757
0.02807933
0.06420366
0.05765516
0.10705915
0.12931576
0.06605592
0.01316365
0.00862626
0.00548033
0.00231362
0.05162323
0.02771896
0.04052469
0.06053808
0.04970683
0.04813053
0.03046989
0.00504421
0.00297387
0.00175442
0.03428232
0.16087463
0.14309265
0.11838740
0.07561675
0.07153413
0.06790428
0.03115408
0.00911597
0.03592220
0.12518162
0.14040351
0.13036409
0.08447693
0.08117232
0.06552082
0.09590764
0.13285699
0.12561189
0.06799156
0.04766290
0.04445734
0.03842782
0.02435055
0.01544531
0.01147488
0.01724531
0.10274742
0.08165291
0.02878892
0.04548312
0.05494404
0.07406324
0.12911624
0.12757473
0.11833390
0.03788988
0.01097155
0.00298281
0.00275654
0.02835943
0.14801164
0.12368125
0.11705162
0.08316845
0.07073751
0.07032350
0.07200280
0.05796322
0.03717402
0.02600084
0.02813455
0.03365216
0.03137246
0.02250615
0.06806763
0.12442078
0.12454491
0.12151590
0.09865309
0.07201285
0.05476528
0.04899836
0.04472922
0.04327874
0.03483583
0.02293462
0.01217319
0.00345893
0.00050839
0.00024330
0.00011198
0.00018678
0.00008502
0.00005998
0.00000075

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 6789c915ab4332b4f9a2a5e01a0b1d32
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 7bb958a26428f774dae23140e390d603
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 4fef61b9ad4f7eb488ea2657f1cc700e
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 6f5a0c98d09a6dc4d9d570e23dc96ab9
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -85,7 +85,6 @@ public class ArcheryRange : NetworkBehaviour
_presentPlayers.Remove(exitedPlayer); // Shifts others left automatically
if (exitedPlayer == _scoredPlayer) keyboardManager.DeActivate(); // If the player <20>refuses to enter their name.
}
@@ -145,6 +144,7 @@ public class ArcheryRange : NetworkBehaviour
targetObject = Instantiate(modelDisplay.Model, randomPos, Quaternion.identity, null);
InitializeArcheryTargetObject(targetObject);
}
targetObject.transform.rotation = targetStartPosition.rotation;
ArcheryTarget target = targetObject.GetComponent<ArcheryTarget>();
target.endPosition = targetEndPosition.position;

View File

@@ -8,6 +8,11 @@ public class KeyboardManager : NetworkBehaviour
{
public enum ShiftMode { Lowercase, NextUppercase, Uppercase }
public delegate void OnActivateDelegate();
public event OnActivateDelegate OnActivate;
public delegate void OnSubmitDelegate();
public event OnSubmitDelegate OnSubmit;
[Header("UI References")]
public TMP_Text nameTextField;
public TMP_Text scoreTextField;
@@ -57,6 +62,7 @@ public class KeyboardManager : NetworkBehaviour
gameObject.transform.position = assignedTransform.position;
gameObject.transform.rotation = assignedTransform.rotation;
OnActivate?.Invoke();
}
public void DeActivate()
@@ -64,7 +70,7 @@ public class KeyboardManager : NetworkBehaviour
gameObject.SetActive(false);
}
private void addToInput(string newInput)
private void AddToInput(string newInput)
{
if (_input.Length < inputTextLimit)
@@ -82,13 +88,13 @@ public class KeyboardManager : NetworkBehaviour
switch (_shiftMode)
{
case ShiftMode.Lowercase:
addToInput(letter.ToLower());
AddToInput(letter.ToLower());
break;
case ShiftMode.Uppercase:
addToInput(letter.ToUpper());
AddToInput(letter.ToUpper());
break;
case ShiftMode.NextUppercase:
addToInput(letter.ToUpper());
AddToInput(letter.ToUpper());
_shiftMode = ShiftMode.Lowercase;
UpdateKeyLabels();
break;
@@ -124,6 +130,7 @@ public class KeyboardManager : NetworkBehaviour
void OnEnterPressed()
{
AudioManager.Instance.PlayAttachedInstance(FMODEvents.Instance.LetterEnter, enterButton.gameObject);
OnSubmit?.Invoke();
if (_input.Length > 0)
{
@@ -136,7 +143,7 @@ public class KeyboardManager : NetworkBehaviour
{
AudioManager.Instance.PlayAttachedInstance(FMODEvents.Instance.LetterEnter, spaceButton.gameObject);
addToInput(" ");
AddToInput(" ");
UpdateOutput();
}

View File

@@ -10365,6 +10365,11 @@ PrefabInstance:
propertyPath: leftHand
value:
objectReference: {fileID: 8597422041532106397}
- target: {fileID: 3290095342561961842, guid: d90913a7f0b00844a8c4482b2afc2c66,
type: 3}
propertyPath: m_Enabled
value: 1
objectReference: {fileID: 0}
- target: {fileID: 3290095342561961842, guid: d90913a7f0b00844a8c4482b2afc2c66,
type: 3}
propertyPath: rightHand
@@ -10390,6 +10395,11 @@ PrefabInstance:
propertyPath: m_Name
value: TutorialController
objectReference: {fileID: 0}
- target: {fileID: 6405559763661037305, guid: d90913a7f0b00844a8c4482b2afc2c66,
type: 3}
propertyPath: m_IsActive
value: 1
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []

View File

@@ -168,20 +168,14 @@ public class TutorialAudioListener : MonoBehaviour
private EventReference GetGrabEvent(GrabSoundType type)
{
switch (type)
return type switch
{
case GrabSoundType.Bow:
return FMODEvents.Instance.BowGrab;
case GrabSoundType.Sprayer:
return FMODEvents.Instance.SprayerGrab;
GrabSoundType.Bow => FMODEvents.Instance.BowGrab,
GrabSoundType.Sprayer => FMODEvents.Instance.SprayerGrab,
//Add more objects for grabbing here and do not forget to define them in FMODEvents.cs
//Add the GrabAudioProfile.cs component to an object instance
default:
return FMODEvents.Instance.DefaultGrab;
}
_ => FMODEvents.Instance.DefaultGrab,
};
}
private void HandleGrab(XRGrabInteractable grab)
@@ -195,10 +189,6 @@ public class TutorialAudioListener : MonoBehaviour
: GrabSoundType.Default;
EventReference grabEvent = GetGrabEvent(type);
Debug.Log(grabEvent);
AudioManager.Instance.PlayAttachedInstance(grabEvent, grab.gameObject);
}
}

View File

@@ -31,6 +31,7 @@ namespace _PROJECT.NewHandPresence
private XRControllerHintController _leftHintController;
private XRControllerHintController _rightHintController;
private XRBaseInteractor lastInteractor = null;
private SmartHandPresence _leftSmartHandPresence;
private SmartHandPresence _rightSmartHandPresence;
@@ -244,18 +245,24 @@ namespace _PROJECT.NewHandPresence
StopCoroutine(initializationInfoCoroutine);
}
private void OnGripPerformed(SelectEnterEventArgs arg0)
private void OnGripPerformed(SelectEnterEventArgs args)
{
var grab = arg0.interactableObject as XRGrabInteractable;
// Notify any listeners
OnGrab?.Invoke(grab);
var interactor = args.interactorObject as XRBaseInteractor;
var interactable = args.interactableObject as XRGrabInteractable;
if (_state != TutorialState.Grip) return;
Debug.Log("Grip performed");
UpdateState(_state.Next());
if (lastInteractor == interactor)
return; // same hand grabbing again
lastInteractor = interactor;
OnGrab?.Invoke(interactable as XRGrabInteractable);
if (_state == TutorialState.Grip)
UpdateState(_state.Next());
}
private void OnTeleportPerformed(LocomotionSystem obj)
{
if (_state != TutorialState.Teleport) return;

View File

@@ -84,7 +84,7 @@ namespace _PROJECT.Multiplayer.NewBow
public void SetLaunchDirection(Vector3 direction)
{
Debug.Log("Setting launch direction: " + direction);
// Debug.Log("Setting launch direction: " + direction);
if (direction != Vector3.zero)
{
_networkBehavior.SetLaunchDirection(direction);

Binary file not shown.

View File

@@ -0,0 +1,148 @@
fileFormatVersion: 2
guid: 7d9a2d0479a3d2f4fb6ac783fb358703
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 12
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 0
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Server
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: WebGL
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Windows Store Apps
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

View File

@@ -0,0 +1,148 @@
fileFormatVersion: 2
guid: b542f982d9872074ba861c98124f091b
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 12
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 0
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Server
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: WebGL
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Windows Store Apps
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -7,13 +7,14 @@ Material:
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Green
m_Name: EmissiveGreen
m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3}
m_Parent: {fileID: 0}
m_ModifiedSerializedProperties: 0
m_ValidKeywords: []
m_ValidKeywords:
- _EMISSION
m_InvalidKeywords: []
m_LightmapFlags: 4
m_LightmapFlags: 1
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
@@ -115,7 +116,7 @@ Material:
m_Colors:
- _BaseColor: {r: 0, g: 1, b: 0.0381248, a: 1}
- _Color: {r: 0, g: 1, b: 0.0381248, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
- _EmissionColor: {r: 0.14076614, g: 1, b: 0, a: 1}
- _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1}
m_BuildTextureStacks: []
--- !u!114 &6221994712197478572

View File

@@ -20,15 +20,16 @@ Material:
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Loading
m_Name: EmissiveRed
m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3}
m_Parent: {fileID: 0}
m_ModifiedSerializedProperties: 0
m_ValidKeywords:
- _EMISSION
- _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
- _SPECULAR_SETUP
m_InvalidKeywords: []
m_LightmapFlags: 4
m_LightmapFlags: 1
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: 2000
@@ -130,6 +131,6 @@ Material:
m_Colors:
- _BaseColor: {r: 0, g: 0, b: 0, a: 1}
- _Color: {r: 0, g: 0, b: 0, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
- _EmissionColor: {r: 1, g: 0, b: 0, a: 1}
- _SpecColor: {r: 0, g: 0, b: 0, a: 1}
m_BuildTextureStacks: []

Binary file not shown.

View File

@@ -0,0 +1,108 @@
fileFormatVersion: 2
guid: 3d938fc5df676394d8a29eb15002c190
ModelImporter:
serializedVersion: 22200
internalIDToNameTable: []
externalObjects: {}
materials:
materialImportMode: 2
materialName: 0
materialSearch: 1
materialLocation: 1
animations:
legacyGenerateAnimations: 4
bakeSimulation: 0
resampleCurves: 1
optimizeGameObjects: 0
removeConstantScaleCurves: 0
motionNodeName:
rigImportErrors:
rigImportWarnings:
animationImportErrors:
animationImportWarnings:
animationRetargetingWarnings:
animationDoRetargetingWarnings: 0
importAnimatedCustomProperties: 0
importConstraints: 0
animationCompression: 1
animationRotationError: 0.5
animationPositionError: 0.5
animationScaleError: 0.5
animationWrapMode: 0
extraExposedTransformPaths: []
extraUserProperties: []
clipAnimations: []
isReadable: 0
meshes:
lODScreenPercentages: []
globalScale: 1
meshCompression: 0
addColliders: 0
useSRGBMaterialColor: 1
sortHierarchyByName: 1
importVisibility: 1
importBlendShapes: 1
importCameras: 1
importLights: 1
nodeNameCollisionStrategy: 1
fileIdsGeneration: 2
swapUVChannels: 0
generateSecondaryUV: 0
useFileUnits: 1
keepQuads: 0
weldVertices: 1
bakeAxisConversion: 0
preserveHierarchy: 0
skinWeightsMode: 0
maxBonesPerVertex: 4
minBoneWeight: 0.001
optimizeBones: 1
meshOptimizationFlags: -1
indexFormat: 0
secondaryUVAngleDistortion: 8
secondaryUVAreaDistortion: 15.000001
secondaryUVHardAngle: 88
secondaryUVMarginMethod: 1
secondaryUVMinLightmapResolution: 40
secondaryUVMinObjectScale: 1
secondaryUVPackMargin: 4
useFileScale: 1
strictVertexDataChecks: 0
tangentSpace:
normalSmoothAngle: 60
normalImportMode: 0
tangentImportMode: 3
normalCalculationMode: 4
legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
blendShapeNormalImportMode: 1
normalSmoothingSource: 0
referencedClips: []
importAnimation: 1
humanDescription:
serializedVersion: 3
human: []
skeleton: []
armTwist: 0.5
foreArmTwist: 0.5
upperLegTwist: 0.5
legTwist: 0.5
armStretch: 0.05
legStretch: 0.05
feetSpacing: 0
globalScale: 1
rootMotionBoneName:
hasTranslationDoF: 0
hasExtraRoot: 0
skeletonHasParents: 1
lastHumanDescriptionAvatarSource: {instanceID: 0}
autoGenerateAvatarMappingIfUnspecified: 1
animationType: 2
humanoidOversampling: 1
avatarSetup: 0
addHumanoidExtraRootOnlyWhenUsingAvatar: 1
importBlendShapeDeformPercent: 1
remapMaterialsIfMaterialImportModeIsNone: 0
additionalBone: 0
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -336,6 +336,11 @@ PrefabInstance:
propertyPath: m_Name
value: Kyle Head
objectReference: {fileID: 0}
- target: {fileID: 7343580558529594842, guid: 298653603c8a05d488a30d936543a6bc,
type: 3}
propertyPath: m_Enabled
value: 1
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects:
@@ -431,7 +436,7 @@ SphereCollider:
m_LayerOverridePriority: 0
m_IsTrigger: 1
m_ProvidesContacts: 0
m_Enabled: 1
m_Enabled: 0
serializedVersion: 3
m_Radius: 0.1337732
m_Center: {x: 0, y: -0.010031074, z: 0.02195441}

View File

@@ -230,11 +230,11 @@ MonoBehaviour:
Path: event:/SFX/Lexus/CarSystem
<Click>k__BackingField:
Guid:
Data1: 2116859508
Data2: 1165465729
Data3: 2142829992
Data4: -912259047
Path: event:/UI/Hover
Data1: -558038968
Data2: 1319696346
Data3: 1107837582
Data4: -794860702
Path: event:/UI/Click
<MapOpen>k__BackingField:
Guid:
Data1: 54902525
@@ -244,11 +244,11 @@ MonoBehaviour:
Path: event:/UI/MapOpen
<Hover>k__BackingField:
Guid:
Data1: -558038968
Data2: 1319696346
Data3: 1107837582
Data4: -794860702
Path: event:/UI/Click
Data1: 2116859508
Data2: 1165465729
Data3: 2142829992
Data4: -912259047
Path: event:/UI/Hover
<LetterEnter>k__BackingField:
Guid:
Data1: -863141031

View File

@@ -22,11 +22,11 @@ Material:
m_PrefabAsset: {fileID: 0}
m_Name: card reader Variant
m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3}
m_Parent: {fileID: -3846018093981099296, guid: 248e38dcb931fa345a11dbf79e87036f,
type: 3}
m_Parent: {fileID: 2100000, guid: a3ce1b39b1e52c94398a08157fda1dff, type: 2}
m_ModifiedSerializedProperties: 2
m_ValidKeywords:
- _EMISSION
- _SPECULAR_SETUP
m_InvalidKeywords: []
m_LightmapFlags: 1
m_EnableInstancingVariants: 0
@@ -42,6 +42,6 @@ Material:
m_Ints: []
m_Floats: []
m_Colors:
- _Color: {r: 0.11653974, g: 0.90640265, b: 0, a: 1}
- _EmissionColor: {r: 0, g: 0.9622642, b: 0.019420544, a: 0}
- _Color: {r: 1, g: 0, b: 0.13618705, a: 1}
- _EmissionColor: {r: 0.09420719, g: 0.9607843, b: 0, a: 0}
m_BuildTextureStacks: []

File diff suppressed because it is too large Load Diff

View File

@@ -93,6 +93,7 @@ GameObject:
- component: {fileID: 7699707098595015193}
- component: {fileID: 1413215456818694348}
- component: {fileID: 483845010817450077}
- component: {fileID: 8646891389811022226}
m_Layer: 0
m_Name: ArcheryRangeNPC
m_TagString: Untagged
@@ -267,7 +268,7 @@ MonoBehaviour:
_initializeOrder: 0
_defaultDespawnType: 0
NetworkObserver: {fileID: 0}
<PrefabId>k__BackingField: 18
<PrefabId>k__BackingField: 6
<SpawnableCollectionId>k__BackingField: 0
_scenePathHash: 0
<SceneId>k__BackingField: 0
@@ -465,6 +466,27 @@ MonoBehaviour:
X: 0
Y: 0
Z: 0
--- !u!135 &8646891389811022226
SphereCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4663194936290788516}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 1
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 3
m_Radius: 5
m_Center: {x: 0, y: 0, z: 0}
--- !u!1 &7802421088258943189
GameObject:
m_ObjectHideFlags: 0

View File

@@ -195,6 +195,7 @@ GameObject:
- component: {fileID: 7699707098595015193}
- component: {fileID: 1413215456818694348}
- component: {fileID: 483845010817450077}
- component: {fileID: 8270600859684143550}
m_Layer: 0
m_Name: CafeWaiterNPC
m_TagString: Untagged
@@ -217,6 +218,7 @@ RectTransform:
- {fileID: 6822286665445551211}
- {fileID: 1530163177365118906}
- {fileID: 9206972526079896025}
- {fileID: 532878555782351644}
m_Father: {fileID: 0}
m_RootOrder: -1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@@ -320,10 +322,14 @@ MonoBehaviour:
notepad: {fileID: 4428142794029565387}
notepadText: {fileID: 1672365637701508529}
pen: {fileID: 8182716950090654063}
backRoom: {fileID: 0}
plate: {fileID: 0}
backRoomMovingTime: 5
servingTray: {fileID: 532878555782351644}
servingTrayTop: {fileID: 4054385274916025690}
servingTrayFoodSpawnPoint: {fileID: 9197682265033829949}
servingTrayPresentingPosition: {fileID: 0}
servingTrayTopLiftAmount: 0.5
spawnedFoodDiameter: 0.5
backRoom: {fileID: 0}
backRoomMovingTime: 5
ignorePlayerCollisionLayer: 2
--- !u!114 &7699707098595015193
MonoBehaviour:
@@ -564,6 +570,27 @@ MonoBehaviour:
X: 0
Y: 0
Z: 0
--- !u!135 &8270600859684143550
SphereCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4663194936290788516}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 1
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 3
m_Radius: 5
m_Center: {x: 0, y: 0, z: 0}
--- !u!1 &7802421088258943189
GameObject:
m_ObjectHideFlags: 0
@@ -796,3 +823,119 @@ GameObject:
type: 3}
m_PrefabInstance: {fileID: 7727616090730660173}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &8665339237764214756
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 5657737279223690836}
m_Modifications:
- target: {fileID: 1375442583061750018, guid: c43698824b8754f428a6677d8301a04c,
type: 3}
propertyPath: m_SortingLayer
value: 0
objectReference: {fileID: 0}
- target: {fileID: 5165251572813796828, guid: c43698824b8754f428a6677d8301a04c,
type: 3}
propertyPath: m_SortingLayer
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8390068347103116866, guid: c43698824b8754f428a6677d8301a04c,
type: 3}
propertyPath: m_Name
value: ServingTray
objectReference: {fileID: 0}
- target: {fileID: 9161537809656587512, guid: c43698824b8754f428a6677d8301a04c,
type: 3}
propertyPath: m_RootOrder
value: 0
objectReference: {fileID: 0}
- target: {fileID: 9161537809656587512, guid: c43698824b8754f428a6677d8301a04c,
type: 3}
propertyPath: m_LocalScale.x
value: 0.7872121
objectReference: {fileID: 0}
- target: {fileID: 9161537809656587512, guid: c43698824b8754f428a6677d8301a04c,
type: 3}
propertyPath: m_LocalScale.y
value: 0.7872121
objectReference: {fileID: 0}
- target: {fileID: 9161537809656587512, guid: c43698824b8754f428a6677d8301a04c,
type: 3}
propertyPath: m_LocalScale.z
value: 0.7872121
objectReference: {fileID: 0}
- target: {fileID: 9161537809656587512, guid: c43698824b8754f428a6677d8301a04c,
type: 3}
propertyPath: m_LocalPosition.x
value: 0.0000016202
objectReference: {fileID: 0}
- target: {fileID: 9161537809656587512, guid: c43698824b8754f428a6677d8301a04c,
type: 3}
propertyPath: m_LocalPosition.y
value: 0.11433
objectReference: {fileID: 0}
- target: {fileID: 9161537809656587512, guid: c43698824b8754f428a6677d8301a04c,
type: 3}
propertyPath: m_LocalPosition.z
value: 0.30001
objectReference: {fileID: 0}
- target: {fileID: 9161537809656587512, guid: c43698824b8754f428a6677d8301a04c,
type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 9161537809656587512, guid: c43698824b8754f428a6677d8301a04c,
type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 9161537809656587512, guid: c43698824b8754f428a6677d8301a04c,
type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 9161537809656587512, guid: c43698824b8754f428a6677d8301a04c,
type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 9161537809656587512, guid: c43698824b8754f428a6677d8301a04c,
type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 9161537809656587512, guid: c43698824b8754f428a6677d8301a04c,
type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 9161537809656587512, guid: c43698824b8754f428a6677d8301a04c,
type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: c43698824b8754f428a6677d8301a04c, type: 3}
--- !u!4 &532878555782351644 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 9161537809656587512, guid: c43698824b8754f428a6677d8301a04c,
type: 3}
m_PrefabInstance: {fileID: 8665339237764214756}
m_PrefabAsset: {fileID: 0}
--- !u!4 &4054385274916025690 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 4613209722915461822, guid: c43698824b8754f428a6677d8301a04c,
type: 3}
m_PrefabInstance: {fileID: 8665339237764214756}
m_PrefabAsset: {fileID: 0}
--- !u!4 &9197682265033829949 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 569075787185045977, guid: c43698824b8754f428a6677d8301a04c,
type: 3}
m_PrefabInstance: {fileID: 8665339237764214756}
m_PrefabAsset: {fileID: 0}

View File

@@ -93,6 +93,7 @@ GameObject:
- component: {fileID: 1653195237934660084}
- component: {fileID: 1413215456818694348}
- component: {fileID: 483845010817450077}
- component: {fileID: 1179918406964740421}
m_Layer: 0
m_Name: ShapeDetectionNPC
m_TagString: Untagged
@@ -233,10 +234,14 @@ MonoBehaviour:
questMarker: {fileID: 0}
radio: {fileID: 0}
computerKeyboardKey: {fileID: 0}
computerPrinter: {fileID: 0}
printerInsertionHole: {fileID: 0}
computerPrinter: {fileID: 0}
shapeScanner: {fileID: 0}
staticRadio: {fileID: 0}
questMarkerPoint: {fileID: 0}
radioAmount: 1
movementPath: []
moveSpeedPerSecond: 2
--- !u!114 &1413215456818694348
MonoBehaviour:
m_ObjectHideFlags: 0
@@ -459,6 +464,27 @@ MonoBehaviour:
X: 0
Y: 0
Z: 0
--- !u!135 &1179918406964740421
SphereCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4663194936290788516}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 1
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 3
m_Radius: 5
m_Center: {x: 0, y: 0, z: 0}
--- !u!1 &7802421088258943189
GameObject:
m_ObjectHideFlags: 0

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -248,7 +248,7 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 90, y: 0, z: 360}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 0}
m_AnchoredPosition: {x: 0.0000009536743, y: 0.014099985}
m_AnchoredPosition: {x: 0.0000009536743, y: 0.0073}
m_SizeDelta: {x: 100, y: 100}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!223 &6732376546868400302
@@ -417,7 +417,7 @@ Transform:
m_GameObject: {fileID: 8445441351388109183}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 0.4, y: 0.02, z: 0.4}
m_LocalScale: {x: 0.4, y: 0.012, z: 0.4}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 3870989277732630730}

View File

@@ -1,380 +0,0 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &4291579148315658230
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 6761968278529855575}
- component: {fileID: 4763701867718457502}
- component: {fileID: 7203143526414218131}
- component: {fileID: 2568780590385977406}
- component: {fileID: 1523408157143897080}
m_Layer: 0
m_Name: MicrophoneStand_Prototype
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &6761968278529855575
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4291579148315658230}
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:
- {fileID: 1850758373829337931}
m_Father: {fileID: 0}
m_RootOrder: -1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &4763701867718457502
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4291579148315658230}
m_Mesh: {fileID: -8524547844719368960, guid: 7c81a7464d27596489f008c96d1971c8, type: 3}
--- !u!23 &7203143526414218131
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4291579148315658230}
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: 2100000, guid: 19c6f99eccf0c69469fd5c281f18b5c0, 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_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!135 &2568780590385977406
SphereCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4291579148315658230}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 1
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 3
m_Radius: 0.47
m_Center: {x: 0, y: 0.48, z: 0}
--- !u!114 &1523408157143897080
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4291579148315658230}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 357101b2cface4943b04dfd25d4944e3, type: 3}
m_Name:
m_EditorClassIdentifier:
outputText: {fileID: 0}
microphoneOffStatus: {fileID: 8977839985090371394}
microphoneOnStatus: {fileID: 6537061652288108950}
fmodWhisperBridge: {fileID: 0}
--- !u!1 &5819798980962142350
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1850758373829337931}
- component: {fileID: 2106466490739867277}
- component: {fileID: 4587043586550884435}
- component: {fileID: 8719646384572601803}
m_Layer: 0
m_Name: Canvas
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &1850758373829337931
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5819798980962142350}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: -0.0405}
m_LocalScale: {x: 0.001, y: 0.001, z: 0.001}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 4321634455225286656}
- {fileID: 3972028686577586524}
m_Father: {fileID: 6761968278529855575}
m_RootOrder: -1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 0}
m_AnchoredPosition: {x: 0, y: 0.6033}
m_SizeDelta: {x: 100, y: 100}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!223 &2106466490739867277
Canvas:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5819798980962142350}
m_Enabled: 1
serializedVersion: 3
m_RenderMode: 2
m_Camera: {fileID: 0}
m_PlaneDistance: 100
m_PixelPerfect: 0
m_ReceivesEvents: 1
m_OverrideSorting: 0
m_OverridePixelPerfect: 0
m_SortingBucketNormalizedSize: 0
m_AdditionalShaderChannelsFlag: 25
m_UpdateRectTransformForStandalone: 0
m_SortingLayerID: 0
m_SortingOrder: 0
m_TargetDisplay: 0
--- !u!114 &4587043586550884435
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5819798980962142350}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3}
m_Name:
m_EditorClassIdentifier:
m_UiScaleMode: 0
m_ReferencePixelsPerUnit: 100
m_ScaleFactor: 1
m_ReferenceResolution: {x: 800, y: 600}
m_ScreenMatchMode: 0
m_MatchWidthOrHeight: 0
m_PhysicalUnit: 3
m_FallbackScreenDPI: 96
m_DefaultSpriteDPI: 96
m_DynamicPixelsPerUnit: 1
m_PresetInfoIsWorld: 1
--- !u!114 &8719646384572601803
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5819798980962142350}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3}
m_Name:
m_EditorClassIdentifier:
m_IgnoreReversedGraphics: 1
m_BlockingObjects: 0
m_BlockingMask:
serializedVersion: 2
m_Bits: 4294967295
--- !u!1 &6537061652288108950
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 3972028686577586524}
- component: {fileID: 3263217202320683959}
- component: {fileID: 6147207569465961459}
m_Layer: 0
m_Name: MicrophoneOnStatus
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 0
--- !u!224 &3972028686577586524
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6537061652288108950}
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: 1850758373829337931}
m_RootOrder: -1
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: 80, y: 80}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &3263217202320683959
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6537061652288108950}
m_CullTransparentMesh: 1
--- !u!114 &6147207569465961459
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6537061652288108950}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, 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_Sprite: {fileID: 21300000, guid: 3f2516f6ee1cb5c4ba7f85f24c3d4f43, type: 3}
m_Type: 0
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!1 &8977839985090371394
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 4321634455225286656}
- component: {fileID: 1842889781999843329}
- component: {fileID: 6304871477875013403}
m_Layer: 0
m_Name: MicrophoneOffStatus
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &4321634455225286656
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8977839985090371394}
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: 1850758373829337931}
m_RootOrder: -1
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: 80, y: 80}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &1842889781999843329
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8977839985090371394}
m_CullTransparentMesh: 1
--- !u!114 &6304871477875013403
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8977839985090371394}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, 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_Sprite: {fileID: 21300000, guid: 68669679d082ba94bb4a39c08fa91e0d, type: 3}
m_Type: 0
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,279 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &33945096282833667
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 4613209722915461822}
- component: {fileID: 6192135053139835027}
- component: {fileID: 1375442583061750018}
- component: {fileID: 2161552460854040793}
m_Layer: 0
m_Name: Top
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &4613209722915461822
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 33945096282833667}
m_LocalRotation: {x: 0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0.23551077, z: -0.00014617827}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 9161537809656587512}
m_RootOrder: -1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &6192135053139835027
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 33945096282833667}
m_Mesh: {fileID: 4493585093827132993, guid: 3d938fc5df676394d8a29eb15002c190, type: 3}
--- !u!23 &1375442583061750018
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 33945096282833667}
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: 9101636318673992656, guid: 3d938fc5df676394d8a29eb15002c190, type: 3}
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!64 &2161552460854040793
MeshCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 33945096282833667}
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: 5
m_Convex: 0
m_CookingOptions: 30
m_Mesh: {fileID: 4493585093827132993, guid: 3d938fc5df676394d8a29eb15002c190, type: 3}
--- !u!1 &1579187116394808824
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 569075787185045977}
m_Layer: 0
m_Name: FoodSpawnPoint
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &569075787185045977
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1579187116394808824}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0.1709, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 9161537809656587512}
m_RootOrder: -1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &8296343995460317559
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 5428513804157271965}
- component: {fileID: 3650349036290197763}
- component: {fileID: 5165251572813796828}
- component: {fileID: 4954145746846201402}
m_Layer: 0
m_Name: Bottom
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &5428513804157271965
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8296343995460317559}
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: 9161537809656587512}
m_RootOrder: -1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &3650349036290197763
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8296343995460317559}
m_Mesh: {fileID: -5495902117074765545, guid: 3d938fc5df676394d8a29eb15002c190, type: 3}
--- !u!23 &5165251572813796828
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8296343995460317559}
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: 9101636318673992656, guid: 3d938fc5df676394d8a29eb15002c190, type: 3}
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!64 &4954145746846201402
MeshCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8296343995460317559}
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: 5
m_Convex: 0
m_CookingOptions: 30
m_Mesh: {fileID: -5495902117074765545, guid: 3d938fc5df676394d8a29eb15002c190, type: 3}
--- !u!1 &8390068347103116866
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 9161537809656587512}
m_Layer: 0
m_Name: ServingTray
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &9161537809656587512
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8390068347103116866}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0.131, z: 0.169}
m_LocalScale: {x: 0.7446047, y: 0.7446047, z: 0.7446047}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 4613209722915461822}
- {fileID: 5428513804157271965}
- {fileID: 569075787185045977}
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}

View File

@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 44b369698b4397b45b9424694c46f2f5
guid: c43698824b8754f428a6677d8301a04c
PrefabImporter:
externalObjects: {}
userData:

File diff suppressed because it is too large Load Diff

View File

@@ -29,7 +29,7 @@ Transform:
m_GameObject: {fileID: 1659788510314838016}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 0.4, y: 0.35, z: 0.4}
m_LocalScale: {x: 0.4, y: 0.38386, z: 0.4}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 4211436824399037528}
@@ -149,7 +149,7 @@ Transform:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4039766663692926199}
m_LocalRotation: {x: -0, y: 0.000000014901158, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalPosition: {x: 0, y: -0.36, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []

View File

@@ -0,0 +1,25 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MicrophoneProximityTrigger : MonoBehaviour
{
public MicrophoneStand mic;
public bool isEnter;
private void OnTriggerEnter(Collider other)
{
if (isEnter && other.gameObject.tag == "Player Head")
{
mic.OnPlayerApproach();
}
}
private void OnTriggerExit(Collider other)
{
if (!isEnter && other.gameObject.tag == "Player Head")
{
mic.OnPlayerLeave();
}
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 802e078b61fa28949b02b767f4fe7226
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -10,68 +10,72 @@ public class MicrophoneStand : MonoBehaviour
public FMODWhisperBridge fmodWhisperBridge;
public delegate void OnPlayerFinishedSpeakingDelegate();
public event OnPlayerFinishedSpeakingDelegate OnPlayerFinishedSpeaking;
public delegate void OnPlayerUsedMicrophoneDelegate();
public event OnPlayerUsedMicrophoneDelegate OnPlayerUsedMicrophone;
[Header("Particle System Config")]
public ParticleSystem particles;
public float baseEmissionRate = 3;
public float maxExtraEmissionRate = 50;
private ParticleSystem.EmissionModule particleEmission;
// Start is called before the first frame update
void Start()
{
microphoneOffStatus.SetActive(true);
microphoneOnStatus.SetActive(false);
particleEmission = particles.emission;
particleEmission.enabled = false;
}
// Update is called once per frame
void Update()
{
}
void OnTriggerEnter(Collider other)
{
KbmController controller = other.GetComponent<KbmController>();
Debug.Log("Mic stand collided with object " + other.gameObject.name);
if (controller != null || other.gameObject.tag == "Player Head")
if (particleEmission.enabled)
{
fmodWhisperBridge.OnWhisperSegmentUpdated += OnPlayerSpeechUpdated;
fmodWhisperBridge.OnWhisperSegmentFinished += OnPlayerSpeechFinished;
microphoneOffStatus.SetActive(false);
microphoneOnStatus.SetActive(true);
AudioManager.Instance.PlayAttachedInstance(FMODEvents.Instance.RadioButton, gameObject);
fmodWhisperBridge.ActivateRecording();
particleEmission.rateOverTime = baseEmissionRate + fmodWhisperBridge.GetNormalizedVolume01() * maxExtraEmissionRate;
}
}
private void OnTriggerExit(Collider other)
public void OnPlayerApproach()
{
KbmController controller = other.GetComponent<KbmController>();
if (controller != null | other.gameObject.tag == "Player Head")
{
fmodWhisperBridge.OnWhisperSegmentUpdated -= OnPlayerSpeechUpdated;
fmodWhisperBridge.OnWhisperSegmentFinished -= OnPlayerSpeechFinished;
fmodWhisperBridge.ActivateRecording();
fmodWhisperBridge.OnWhisperSegmentUpdated += OnPlayerSpeechUpdated;
fmodWhisperBridge.OnWhisperSegmentFinished += OnPlayerSpeechFinished;
microphoneOffStatus.SetActive(false);
microphoneOnStatus.SetActive(true);
particleEmission.enabled = true;
AudioManager.Instance.PlayAttachedInstance(FMODEvents.Instance.RadioButton, gameObject);
}
microphoneOffStatus.SetActive(true);
microphoneOnStatus.SetActive(false);
AudioManager.Instance.PlayAttachedInstance(FMODEvents.Instance.RadioButton, gameObject);
fmodWhisperBridge.DeactivateRecording();
}
public void OnPlayerLeave()
{
fmodWhisperBridge.OnWhisperSegmentUpdated -= OnPlayerSpeechUpdated;
fmodWhisperBridge.OnWhisperSegmentFinished -= OnPlayerSpeechFinished;
fmodWhisperBridge.DeactivateRecording();
microphoneOffStatus.SetActive(true);
microphoneOnStatus.SetActive(false);
particleEmission.enabled = false;
AudioManager.Instance.PlayAttachedInstance(FMODEvents.Instance.RadioButton, gameObject);
}
private void OnPlayerSpeechUpdated(string text)
{
outputText.text = text;
OnPlayerFinishedSpeaking?.Invoke();
OnPlayerUsedMicrophone?.Invoke();
}
private void OnPlayerSpeechFinished(string playerText)
private void OnPlayerSpeechFinished(string text)
{
OnPlayerFinishedSpeaking?.Invoke();
outputText.text = text;
OnPlayerUsedMicrophone?.Invoke();
}
public string GetTextOutput()
{
return outputText.text;
}
}

View File

@@ -15,6 +15,7 @@ public class ModelDisplay : MonoBehaviour
public float generatedObjectRotationSpeed = 10f;
private EventInstance printingSound;
private ParticleSystem.EmissionModule particleEmission;
// Start is called before the first frame update
void Start()
@@ -23,6 +24,9 @@ public class ModelDisplay : MonoBehaviour
printingSound.setParameterByName("3DPrinterPrintingJob", 1);
printingSound.setParameterByName("Occlusion", 0);
printingSound.set3DAttributes(FMODUnity.RuntimeUtils.To3DAttributes(displayPoint));
particleEmission = GetComponentInChildren<ParticleSystem>().emission;
particleEmission.enabled = false;
}
// Update is called once per frame
@@ -38,6 +42,7 @@ public class ModelDisplay : MonoBehaviour
{
printingSound.start();
printingSound.setParameterByName("3DPrinterPrintingJob", 0);
particleEmission.enabled = true;
}
public void DisplayModel(GameObject modelObject)
@@ -57,5 +62,6 @@ public class ModelDisplay : MonoBehaviour
Model = modelObject;
printingSound.setParameterByName("3DPrinterPrintingJob", 1);
particleEmission.enabled = false;
}
}

View File

@@ -4,9 +4,9 @@ using System.Runtime.InteropServices;
using UnityEngine;
using FMOD;
using FMODUnity;
using Whisper; // WhisperManager, WhisperStream, WhisperResult
using Whisper;
using Whisper.Utils;
using Debug = UnityEngine.Debug; // AudioChunk
using Debug = UnityEngine.Debug;
/// <summary>
/// FMOD mic is initialized once (Start) and runs continuously in a ring buffer.
@@ -28,12 +28,6 @@ public class FMODWhisperBridge : MonoBehaviour
public int channels = 1;
[Range(1, 10)] public int bufferLengthSec = 5;
[Header("Loopback (monitor your voice)")]
public bool playLoopback = true;
[Tooltip("If true, loopback plays only while active; otherwise its always on.")]
public bool loopbackOnlyWhenActive = true;
[Range(0f, 2f)] public float loopbackVolume = 1.0f;
public delegate void OnWhisperSegmentUpdatedDelegate(string result);
public event OnWhisperSegmentUpdatedDelegate OnWhisperSegmentUpdated;
@@ -44,7 +38,6 @@ public class FMODWhisperBridge : MonoBehaviour
private FMOD.System _core;
private Sound _recSound;
private Channel _playChannel;
private ChannelGroup _masterGroup;
private uint _soundPcmLength; // in samples
private int _nativeRate;
private int _nativeChannels;
@@ -54,7 +47,6 @@ public class FMODWhisperBridge : MonoBehaviour
// Whisper
private WhisperStream _stream;
private bool _streamStarted;
// temp conversion buffer
private float[] _floatTmp = new float[0];
@@ -64,6 +56,11 @@ public class FMODWhisperBridge : MonoBehaviour
private bool isRecordingActivated = false;
private bool _skipOneFeedFrame = false;
// --- Speech Volume Measurement ---
private float currentVolumeRms = 0f; // Smoothed RMS for external access
private float volumeSmoothing = 0.15f; // How fast the meter reacts (0.10.3 good)
private void Awake()
{
if (!whisper) whisper = FindObjectOfType<WhisperManager>();
@@ -133,24 +130,6 @@ public class FMODWhisperBridge : MonoBehaviour
_core.getRecordPosition(recordDriverId, out _lastRecordPos);
Debug.Log("[FMOD→Whisper] Recording started.");
// Loopback channel (optional). Start once; pause when inactive if desired.
_core.getMasterChannelGroup(out _masterGroup);
if (playLoopback)
{
res = _core.playSound(_recSound, _masterGroup, false, out _playChannel);
if (res == RESULT.OK && _playChannel.hasHandle())
{
_playChannel.setMode(MODE._2D);
_playChannel.setVolume(loopbackVolume);
if (loopbackOnlyWhenActive) _playChannel.setPaused(true); // keep muted until Activate
Debug.Log("[FMOD→Whisper] Loopback playback ready.");
}
else
{
Debug.LogWarning($"[FMOD→Whisper] playSound failed or channel invalid: {res}");
}
}
// No Whisper stream here. It will be created on ActivateRecording().
await System.Threading.Tasks.Task.Yield();
}
@@ -174,6 +153,11 @@ public class FMODWhisperBridge : MonoBehaviour
int rate = (_nativeRate > 0) ? _nativeRate : desiredSampleRate;
if (_stream != null)
{
_stream.StopStream();
}
try
{
_stream = await whisper.CreateStream(rate, _nativeChannels);
@@ -182,7 +166,6 @@ public class FMODWhisperBridge : MonoBehaviour
{
Debug.LogError($"[FMOD→Whisper] CreateStream exception: {e}");
_stream = null;
_streamStarted = false;
return;
}
@@ -203,16 +186,6 @@ public class FMODWhisperBridge : MonoBehaviour
whisper.useVad = useVadInStream;
_stream.StartStream();
_streamStarted = true;
// --- NEW: Clear the ring buffer and reset read pointer ---
// Pause loopback while we clear (optional, but avoids clicks)
if (playLoopback && _playChannel.hasHandle())
_playChannel.setPaused(true);
// Clear buffer bytes
ClearRecordRingBuffer();
// Reset our read pointer to the current write head
_core.getRecordPosition(recordDriverId, out _lastRecordPos);
@@ -220,13 +193,8 @@ public class FMODWhisperBridge : MonoBehaviour
// Well skip feeding for one frame to guarantee a clean start
_skipOneFeedFrame = true;
// Unpause loopback if we want it active during recording
if (playLoopback && _playChannel.hasHandle() && (!loopbackOnlyWhenActive || isRecordingActivated))
_playChannel.setPaused(loopbackOnlyWhenActive ? false : _playChannel.getPaused(out var paused) == FMOD.RESULT.OK && paused ? false : false);
isRecordingActivated = true;
Debug.Log("[FMOD→Whisper] Stream activated (buffer cleared; reading from current head).");
}
/// <summary>
@@ -234,24 +202,32 @@ public class FMODWhisperBridge : MonoBehaviour
/// </summary>
public void DeactivateRecording()
{
if (!isRecordingActivated && !_streamStarted)
if (!isRecordingActivated)
return;
isRecordingActivated = false;
}
// Pause loopback if it should only be active during recording
if (playLoopback && loopbackOnlyWhenActive && _playChannel.hasHandle())
_playChannel.setPaused(true);
/// <summary>
/// Returns current microphone level in dBFS (decibels relative to full-scale).
/// 0 dBFS = digital clipping; normal speech is typically around -35 to -20 dBFS.
/// </summary>
public float GetCurrentVolumeDb()
{
// Guard from log(0)
const float minRms = 1e-7f;
float rms = Mathf.Clamp(currentVolumeRms, minRms, 1f);
return 20f * Mathf.Log10(rms);
}
// Tear down Whisper stream
if (_streamStarted)
{
try { _stream.StopStream(); } catch { /* ignore */ }
_streamStarted = false;
}
_stream = null;
Debug.Log("[FMOD→Whisper] Stream deactivated (Whisper stopped; FMOD still recording).");
/// <summary>
/// Returns a UI-friendly 0..1 loudness from the current dBFS value.
/// Adjust the dB range to your content/environment if needed.
/// </summary>
public float GetNormalizedVolume01()
{
float db = GetCurrentVolumeDb(); // typically ~ -60 .. -15 during use
return Mathf.Clamp01(Mathf.InverseLerp(-60f, -15f, db));
}
private void Update()
@@ -261,8 +237,7 @@ public class FMODWhisperBridge : MonoBehaviour
if (!_recSound.hasHandle()) return;
// Compute how many samples recorded since last frame.
uint recPos;
_core.getRecordPosition(recordDriverId, out recPos);
_core.getRecordPosition(recordDriverId, out uint recPos);
uint deltaSamples = (recPos >= _lastRecordPos)
? (recPos - _lastRecordPos)
@@ -275,10 +250,6 @@ public class FMODWhisperBridge : MonoBehaviour
return;
}
// If not active, we *still* advance the ring (so we don't backlog data),
// but we *don't* push chunks to Whisper.
bool shouldFeed = isRecordingActivated && _streamStarted && _stream != null;
// Calculate byte range to lock (16-bit)
uint bytesToRead = deltaSamples * (uint)_nativeChannels * 2; // 2 bytes per sample
uint startBytes = _lastRecordPos * (uint)_nativeChannels * 2;
@@ -295,11 +266,44 @@ public class FMODWhisperBridge : MonoBehaviour
try
{
if (shouldFeed && !_skipOneFeedFrame)
float rmsAccumulator = 0f;
int rmsSampleCount = 0;
// 1) Measure volume
if (len1 > 0)
{
if (len1 > 0) CopyPcm16ToFloatAndFeed(p1, len1);
if (len2 > 0) CopyPcm16ToFloatAndFeed(p2, len2);
ComputeRmsFromPcm16(p1, len1, ref rmsAccumulator, ref rmsSampleCount);
}
if (len2 > 0)
{
ComputeRmsFromPcm16(p2, len2, ref rmsAccumulator, ref rmsSampleCount);
}
if (rmsSampleCount > 0)
{
float rms = Mathf.Sqrt(rmsAccumulator / rmsSampleCount);
// Smooth the value
currentVolumeRms = Mathf.Lerp(currentVolumeRms, rms, 1f - Mathf.Pow(1f - volumeSmoothing, Time.deltaTime * 60f));
}
// 2) Feed audio to Whisper
if (_stream != null)
{
if (isRecordingActivated && !_skipOneFeedFrame)
{
// Feed real mic
if (len1 > 0) CopyPcm16ToFloatAndFeed(p1, len1);
if (len2 > 0) CopyPcm16ToFloatAndFeed(p2, len2);
}
else
{
// Feed same-size silence instead
if (len1 > 0) FeedSilentChunk(len1);
if (len2 > 0) FeedSilentChunk(len2);
}
}
// If skipping, we just discard this frame to ensure no stale data leaks.
}
finally
@@ -310,12 +314,30 @@ public class FMODWhisperBridge : MonoBehaviour
if (_skipOneFeedFrame) _skipOneFeedFrame = false;
_lastRecordPos = recPos;
}
private string PostProcessInput(string input)
{
return input.Replace("[silence]", "").Replace("[ Silence ]", "").Replace("BLANK_AUDIO", "").Replace("[", "").Replace("]", "").Trim();
return input.Replace("[silence]", "").Replace("[ Silence ]", "").Replace("BLANK_AUDIO", "").Replace("[", "").Replace("]", "").Replace("END PLAYBACK", "").Trim();
}
private void FeedSilentChunk(uint byteLen)
{
int samples = (int)(byteLen / 2);
EnsureTmpCapacity(samples);
// fill existing _floatTmp with zeros (efficient)
Array.Clear(_floatTmp, 0, samples);
var chunk = new AudioChunk
{
Data = _floatTmp.AsSpan(0, samples).ToArray(),
Frequency = (_nativeRate > 0) ? _nativeRate : desiredSampleRate,
Channels = _nativeChannels,
IsVoiceDetected = false
};
_stream.AddToStream(chunk);
}
private void CopyPcm16ToFloatAndFeed(IntPtr src, uint byteLen)
@@ -377,54 +399,30 @@ public class FMODWhisperBridge : MonoBehaviour
}
}
private void ClearRecordRingBuffer()
/// <summary>
/// Computes RMS (root mean square) from a PCM16 block using only safe code.
/// Uses the shared _shortOverlay buffer (no allocations).
/// Accumulates results into accumulator + sampleCount.
/// </summary>
private void ComputeRmsFromPcm16(IntPtr src, uint byteLen, ref float accumulator, ref int sampleCount)
{
if (!_recSound.hasHandle() || _soundPcmLength == 0) return;
// Number of PCM16 samples (2 bytes per sample)
int samples = (int)(byteLen / 2);
if (samples <= 0) return;
uint totalBytes = _soundPcmLength * (uint)_nativeChannels * 2; // PCM16
IntPtr p1, p2;
uint len1, len2;
// Ensure overlay buffer exists & is large enough
EnsureShortOverlay(samples, out short[] sBuf);
// Lock the whole buffer (start=0, length=totalBytes)
var r = _recSound.@lock(0, totalBytes, out p1, out p2, out len1, out len2);
if (r != FMOD.RESULT.OK)
// Copy PCM16 into managed buffer (safe)
Marshal.Copy(src, sBuf, 0, samples);
// Accumulate squared amplitude
for (int i = 0; i < samples; i++)
{
Debug.LogWarning($"[FMOD→Whisper] Could not lock ring buffer to clear: {r}");
return;
float v = sBuf[i] / 32768f; // normalize to [-1..1]
accumulator += v * v;
}
try
{
if (len1 > 0)
{
// zero p1
// Well reuse a static zero array to avoid allocating huge buffers repeatedly
ZeroMem(p1, (int)len1);
}
if (len2 > 0)
{
ZeroMem(p2, (int)len2);
}
}
finally
{
_recSound.unlock(p1, p2, len1, len2);
}
sampleCount += samples;
}
// cheap zeroing helper (avoids allocating len-sized arrays each time)
private static readonly byte[] _zeroChunk = new byte[16 * 1024]; // 16 KB
private static void ZeroMem(IntPtr dst, int byteLen)
{
int offset = 0;
while (byteLen > 0)
{
int n = Math.Min(_zeroChunk.Length, byteLen);
Marshal.Copy(_zeroChunk, 0, dst + offset, n);
offset += n;
byteLen -= n;
}
}
}

View File

@@ -36,6 +36,7 @@ public class ModelGenerationUtils : MonoBehaviour
{
XROrigin xrOrigin = FindObjectOfType<XROrigin>(includeInactive: true);
xrOrigin.transform.position = minigamePoints[0].position;
xrOrigin.transform.rotation = minigamePoints[0].rotation;
}
@@ -43,12 +44,14 @@ public class ModelGenerationUtils : MonoBehaviour
{
XROrigin xrOrigin = FindObjectOfType<XROrigin>(includeInactive: true);
xrOrigin.transform.position = minigamePoints[1].position;
xrOrigin.transform.rotation = minigamePoints[1].rotation;
}
if (Keyboard.current.digit3Key.wasPressedThisFrame)
{
XROrigin xrOrigin = FindObjectOfType<XROrigin>(includeInactive: true);
xrOrigin.transform.position = minigamePoints[2].position;
xrOrigin.transform.rotation = minigamePoints[2].rotation;
}
if (Keyboard.current.digit0Key.wasPressedThisFrame)

View File

@@ -15,6 +15,7 @@ public class ArcheryRangeNPC : NPCController
public ModelDisplay modelDisplay;
public float modelDisplaySize = 0.75f;
public Transform startTargetQuestMarkerPoint;
public KeyboardManager keyboardManager;
private Texture2D GeneratedTexture;
@@ -25,6 +26,8 @@ public class ArcheryRangeNPC : NPCController
// 3 - player pressed the image generation button
// 4 - player pressed the model generation button
// 5 - model spawned into the game
// 6 - round completed
// 7 - name submitted
private int state;
private void Awake()
@@ -34,9 +37,11 @@ public class ArcheryRangeNPC : NPCController
private void Start()
{
microphoneStand.OnPlayerFinishedSpeaking += OnPlayerUsedMicrophone;
microphoneStand.OnPlayerUsedMicrophone += OnPlayerUsedMicrophone;
imageGenerationButton.OnButtonPressed += OnImageGenerationButtonPressed;
modelGenerationButton.OnButtonPressed += OnModelGenerationButtonPressed;
keyboardManager.OnActivate += OnRoundComplete;
keyboardManager.OnSubmit += OnNameSubmitted;
}
protected async override void OnPlayerApproach()
@@ -62,8 +67,9 @@ public class ArcheryRangeNPC : NPCController
}
private void OnPlayerUsedMicrophone()
private async void OnPlayerUsedMicrophone()
{
await Task.Delay(1500);
if (state == 1)
{
SpeakVoiceLine(3);
@@ -118,4 +124,23 @@ public class ArcheryRangeNPC : NPCController
modelGenerationButton.Deactivate();
}
private void OnRoundComplete()
{
if (state == 5)
{
state = 6;
SpeakVoiceLine(6);
}
}
private void OnNameSubmitted()
{
if (state == 6)
{
state = 7;
}
SpeakVoiceLine(7);
}
}

View File

@@ -6,20 +6,28 @@ using UnityEngine.XR.Interaction.Toolkit;
public class CafeWaiterNPC : NPCController
{
[Header("Delta Cafe Minigame Config")]
public FMODWhisperBridge fmodWhisperBridge;
public GameObject notepad;
public TextMeshProUGUI notepadText;
public PenWriter pen;
public Transform backRoom;
public Transform plate;
public float backRoomMovingTime = 5f;
public Transform servingTray;
public Transform servingTrayTop;
public Transform servingTrayFoodSpawnPoint;
public Transform servingTrayPresentingPosition;
public float servingTrayTopLiftAmount = 0.5f;
public float spawnedFoodDiameter = 0.5f;
public Transform backRoom;
public float backRoomMovingTime = 5f;
public int ignorePlayerCollisionLayer = 2;
private Vector3 notepadOriginalRotation;
private Vector3 notepadFlippedRotation;
private Vector3 servingTrayOriginalLocalPosition;
private Vector3 servingTrayTopOriginalLocalPosition;
private Vector3 startingPosition;
// states:
@@ -35,15 +43,18 @@ public class CafeWaiterNPC : NPCController
{
state = 0;
lastPlayerVoiceUpdateTime = Time.time;
startingPosition = transform.position;
}
private void Start()
{
startingPosition = transform.position;
notepadOriginalRotation = notepad.transform.localRotation.eulerAngles;
notepadFlippedRotation = notepadOriginalRotation + new Vector3(0, 180, 0);
servingTrayOriginalLocalPosition = servingTray.transform.localPosition;
servingTrayTopOriginalLocalPosition = servingTrayTop.localPosition;
notepad.SetActive(false);
pen.gameObject.SetActive(false);
servingTray.gameObject.SetActive(false);
}
protected override void OnPlayerApproach()
@@ -71,10 +82,16 @@ public class CafeWaiterNPC : NPCController
// If currently not bringing food and the player leaves, then go back to idle state
if (state != 3)
{
notepad.transform.localRotation = Quaternion.Euler(notepadOriginalRotation);
notepad.SetActive(false);
pen.StopWriting();
pen.gameObject.SetActive(false);
notepad.transform.localRotation = Quaternion.Euler(notepadOriginalRotation);
servingTray.parent = transform;
servingTray.localPosition = servingTrayOriginalLocalPosition;
servingTrayTop.localPosition = servingTrayTopOriginalLocalPosition;
servingTray.gameObject.SetActive(false);
state = 0;
}
}
@@ -105,7 +122,7 @@ public class CafeWaiterNPC : NPCController
} else if (state == 2)
{
fmodWhisperBridge.DeactivateRecording();
bool positiveAnswer = playerText.ToLower().Contains("ye") || playerText.ToLower().Contains("correct") | playerText.ToLower().Contains("right");
bool positiveAnswer = IsPlayerAnswerPositive(playerText);
SpeakVoiceLine(positiveAnswer ? 2 : 3);
// Flip notepad back
notepad.transform.DOLocalRotate(notepadOriginalRotation, 0.5f).OnComplete(() =>
@@ -142,7 +159,18 @@ public class CafeWaiterNPC : NPCController
}
}
private bool IsPlayerAnswerPositive(string playerText)
{
string lower = playerText.ToLower();
return lower.Contains("ye")
|| lower.Contains("correct")
|| lower.Contains("right")
|| lower.Contains("sure")
|| lower.Contains("of course")
|| lower.Contains("okay")
|| lower.Contains("yup")
|| lower.Contains("affirmative");
}
private async void BringFood()
{
@@ -157,20 +185,26 @@ public class CafeWaiterNPC : NPCController
GameObject spawnedObject = await ModelGenerationUtils.Instance.SpawnModel(encodedModel, spawnedFoodDiameter);
// Come back
servingTray.gameObject.SetActive(true);
transform.DOMove(startingPosition, backRoomMovingTime).OnComplete(() =>
{
spawnedObject.transform.position = plate.position + new Vector3(0, 1f, 0);
InitializeSpawnedObject(spawnedObject);
servingTray.parent = null;
servingTray.DOMove(servingTrayPresentingPosition.position, 1f).OnComplete(() =>
{
spawnedObject.transform.position = servingTrayFoodSpawnPoint.position;
InitializeSpawnedObject(spawnedObject);
servingTrayTop.DOLocalMove(servingTrayTop.localPosition + new Vector3(0, servingTrayTopLiftAmount, 0), 1f);
SpeakVoiceLine(4);
state = 4;
SpeakVoiceLine(4);
state = 4;
});
});
}
private void InitializeSpawnedObject(GameObject spawnedObject)
{
Rigidbody rigidbody = spawnedObject.AddComponent<Rigidbody>();
rigidbody.collisionDetectionMode = CollisionDetectionMode.ContinuousDynamic;
//spawnedObject.AddComponent<NetworkObject>();
//spawnedObject.AddComponent<NetworkTransform>();

View File

@@ -26,25 +26,13 @@ public abstract class NPCController : MonoBehaviour
private float[] rmsCurve;
private EventInstance currentVoicelineEvent;
private bool isSpeaking;
private float smoothed;
// If you change RMS window in Python, update this
private const float FRAME_DURATION = 0.02f;
private float sampleRate = 1f / FRAME_DURATION; // RMS samples per second (20ms windows)
private readonly float sampleRate = 1f / FRAME_DURATION; // RMS samples per second (20ms windows)
// Start is called before the first frame update
void Awake()
{
}
void Start()
{
}
// Update is called once per frame
void Update()
{
@@ -65,7 +53,7 @@ public abstract class NPCController : MonoBehaviour
}
}
if (isSpeaking && rmsCurve != null && currentVoicelineEvent.isValid())
if (rmsCurve != null && currentVoicelineEvent.isValid())
{
AnimateMouth();
}
@@ -105,30 +93,14 @@ public abstract class NPCController : MonoBehaviour
mouth.localScale = s;
}
private void StopSpeaking()
{
isSpeaking = false;
smoothed = inverted ? maxScaleY : minScaleY;
if (mouth != null)
{
var scale = mouth.localScale;
scale.y = smoothed;
mouth.localScale = scale;
}
currentVoicelineEvent.release();
}
public void PlayerApproach(Transform player) {
playerTransform = player;
public void PlayerApproach() {
OnPlayerApproach();
}
public void PlayerLeave()
{
playerTransform = null;
OnPlayerLeave();
}
@@ -136,6 +108,22 @@ public abstract class NPCController : MonoBehaviour
protected virtual void OnPlayerLeave() {}
private void OnTriggerEnter(Collider other)
{
if (other.gameObject.tag == "Player Head")
{
playerTransform = other.transform;
}
}
private void OnTriggerExit(Collider other)
{
if (other.gameObject.tag == "Player Head")
{
playerTransform = null;
}
}
public void SpeakVoiceLine(int voiceLineId, GameObject emitter = null, float radioAmount = 0f)
{
if (voiceLineId < 0 || voiceLineId >= voiceLineKeys.Length)
@@ -152,21 +140,15 @@ public abstract class NPCController : MonoBehaviour
LoadCurve(key); // load RMS data
emitter = emitter ?? gameObject;
emitter = emitter != null ? emitter : gameObject;
currentVoicelineEvent = AudioManager.Instance.PlayDialogue(characterSpecificFolder + "/" + key, emitter, radioAmount);
if (!currentVoicelineEvent.isValid())
{
Debug.LogError("Failed to start dialogue event.");
return;
}
isSpeaking = true;
// Stop mouth on end
float voicelineDuration = rmsCurve.Length * FRAME_DURATION;
Invoke(nameof(StopSpeaking), voicelineDuration + 0.1f);
}
// ---------------------------
// Load RMS Timeline (.txt)
// ---------------------------

View File

@@ -24,7 +24,7 @@ public class NPCTriggerArea : MonoBehaviour
if (isEnter && other.gameObject.tag == "Player Head")
{
npcController.PlayerApproach(other.transform);
npcController.PlayerApproach();
}
}

View File

@@ -1,4 +1,4 @@
using System;
using DG.Tweening;
using System.Threading.Tasks;
using UnityEngine;
@@ -7,12 +7,15 @@ public class ShapeDetectionNPC : NPCController
[Header("Shape Detection Minigame Config")]
public QuestMarker questMarker;
public RadioTransmitter radio;
public Transform computerKeyboardKey;
public ComputerPrinter computerPrinter;
public PushableButton computerKeyboardKey;
public Printer3DInputHole printerInsertionHole;
public Texture2D GeneratedTexture { get; private set; }
public ComputerPrinter computerPrinter;
public ShapeScanner shapeScanner;
public GameObject staticRadio;
public Transform questMarkerPoint;
public float radioAmount = 1f;
public Transform[] movementPath;
public float moveSpeedPerSecond = 2f;
// states:
@@ -22,6 +25,9 @@ public class ShapeDetectionNPC : NPCController
// 3 - player spoke into the radio
// 4 - player pressed enter on keyboard
// 5 - player inserted picture into printer
// 6 - player completed first shape scanner config
// 7 - shape scanner completed
// 8 - moving away
private int state;
private float lastPlayerApproachTime;
@@ -35,8 +41,10 @@ public class ShapeDetectionNPC : NPCController
{
radio.OnPlayerPickUp += OnPlayerPickedUpRadio;
radio.OnPlayerFinishedSpeaking += OnPlayerSpokeIntoRadio;
computerPrinter.OnImagePrinted += OnPlayerPrintedImage;
printerInsertionHole.OnPlayerInsertedPrintable += OnPlayerInitiatedPrinting;
computerPrinter.OnImagePrinted += OnPlayerPrintedImage;
shapeScanner.OnConfigCompleted += OnPlayerCompletedFirstConfiguration;
shapeScanner.OnAllCompleted += OnShapeScannerCompleted;
}
protected async override void OnPlayerApproach()
@@ -100,7 +108,8 @@ public class ShapeDetectionNPC : NPCController
{
SpeakVoiceLine(3, radio.gameObject, radioAmount);
state = 3;
questMarker.MoveTo(computerKeyboardKey);
questMarker.MoveTo(computerKeyboardKey.transform);
computerKeyboardKey.Deactivate();
}
}
@@ -123,4 +132,48 @@ public class ShapeDetectionNPC : NPCController
questMarker.MoveTo(shapeScanner.transform, true);
}
}
private void OnPlayerCompletedFirstConfiguration()
{
if (state == 5)
{
SpeakVoiceLine(6, radio.gameObject, radioAmount);
state = 6;
}
}
private void OnShapeScannerCompleted()
{
if (state == 6)
{
state = 7;
questMarker.MoveTo(questMarkerPoint);
}
}
private void MoveToNextPoint(int pointIndex)
{
Transform nextPoint = movementPath[pointIndex];
float moveDuration = (nextPoint.position - transform.position).magnitude / moveSpeedPerSecond;
transform.DOMove(nextPoint.position, moveDuration).SetEase(Ease.Linear).OnComplete(() =>
{
if (pointIndex < movementPath.Length - 1)
{
MoveToNextPoint(pointIndex + 1);
}
});
}
public async void OnPlayerEnteredRoom()
{
if (state == 7)
{
state = 8;
staticRadio.SetActive(false);
questMarker.gameObject.SetActive(false);
SpeakVoiceLine(7, gameObject, 0);
await Task.Delay(6500);
MoveToNextPoint(0);
}
}
}

View File

@@ -12,15 +12,21 @@ public class ReleasableButton : MonoBehaviour
public float moveDuration = 0.25f;
public float moveAmount = 0.05f;
private bool isLocked;
private float upPositionY;
private float downPositionY;
private bool isButtonDown;
// button state:
// 0 - up
// 1 - down
// 2 - moving
private int buttonState;
private void Awake()
{
upPositionY = movableParts.localPosition.y;
downPositionY = movableParts.localPosition.y - moveAmount;
isButtonDown = false;
buttonState = 0;
}
// Start is called before the first frame update
@@ -37,7 +43,8 @@ public class ReleasableButton : MonoBehaviour
private void OnTriggerEnter(Collider collider)
{
if (!isButtonDown && collider.gameObject.tag.EndsWith("Hand"))
// if button is up, start moving down
if (buttonState == 0 &&!isLocked && collider.gameObject.tag.EndsWith("Hand"))
{
Activate();
OnButtonPressed?.Invoke();
@@ -46,7 +53,8 @@ public class ReleasableButton : MonoBehaviour
private void OnTriggerExit(Collider collider)
{
if (isButtonDown && collider.gameObject.tag.EndsWith("Hand"))
// if button is down, start moving up
if (buttonState == 1 && !isLocked && collider.gameObject.tag.EndsWith("Hand"))
{
Deactivate();
OnButtonReleased?.Invoke();
@@ -55,15 +63,33 @@ public class ReleasableButton : MonoBehaviour
private void Activate()
{
movableParts.DOLocalMoveY(downPositionY, moveDuration);
isButtonDown = true;
buttonState = 2;
movableParts.DOLocalMoveY(downPositionY, moveDuration).OnComplete(() =>
{
buttonState = 1;
});
AudioManager.Instance.PlayAttachedInstance(FMODEvents.Instance.Click, gameObject);
}
private void Deactivate()
{
movableParts.DOLocalMoveY(upPositionY, moveDuration);
isButtonDown = false;
buttonState = 2;
movableParts.DOLocalMoveY(upPositionY, moveDuration).OnComplete(() =>
{
buttonState = 0;
});
AudioManager.Instance.PlayAttachedInstance(FMODEvents.Instance.Click, gameObject);
}
public void Lock()
{
isLocked = true;
}
public void Unlock()
{
isLocked = false;
}
}

View File

@@ -0,0 +1,28 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class NPCFinalTriggerArea : MonoBehaviour
{
public ShapeDetectionNPC npc;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
}
private void OnTriggerEnter(Collider other)
{
if (other.gameObject.tag == "Player Head")
{
npc.OnPlayerEnteredRoom();
}
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 3a356edc14b3aeb48b95081f0d876053
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -11,7 +11,7 @@ public class Printer3D : MonoBehaviour
private bool isPrinting = false;
private EventInstance printingSound;
private GameObject GeneratedModel;
private ParticleSystem.EmissionModule particleEmission;
// Start is called before the first frame update
void Start()
@@ -20,6 +20,9 @@ public class Printer3D : MonoBehaviour
printingSound.setParameterByName("3DPrinterPrintingJob", 1);
printingSound.setParameterByName("Occlusion", 0);
printingSound.set3DAttributes(FMODUnity.RuntimeUtils.To3DAttributes(spawnPoint));
particleEmission = GetComponentInChildren<ParticleSystem>().emission;
particleEmission.enabled = false;
}
// Update is called once per frame
@@ -33,26 +36,22 @@ public class Printer3D : MonoBehaviour
isPrinting = true;
printingSound.start();
printingSound.setParameterByName("3DPrinterPrintingJob", 0);
particleEmission.enabled = true;
string encodedTexture = Convert.ToBase64String(texture.EncodeToJPG());
byte[] encodedModel = await TrellisClient.Instance.GenerateModel(encodedTexture);
GameObject spawnedObject = await ModelGenerationUtils.Instance.SpawnModel(encodedModel, printedObjectSize);
InitializeSpawnedObject(spawnedObject);
if (GeneratedModel != null)
{
// Destroy previous generated object (first move out of ShapeScanner to trigger OnTriggerExit
GeneratedModel.transform.position = Vector3.zero;
}
GeneratedModel = spawnedObject;
printingSound.setParameterByName("3DPrinterPrintingJob", 1);
particleEmission.enabled = false;
isPrinting = false;
}
private void InitializeSpawnedObject(GameObject spawnedObject)
{
GameObject spawnedObjectParent = new GameObject("SpawnedModelParent");
GameObject spawnedObjectParent = new("SpawnedModelParent");
spawnedObjectParent.transform.parent = spawnPoint;
spawnedObjectParent.transform.position = spawnPoint.transform.position;
spawnedObjectParent.layer = ignorePlayerCollisionLayer;

View File

@@ -40,7 +40,6 @@ public class Printer3DInputHole : MonoBehaviour
{
ReleaseFromPlayer(printable);
InsertPrintable(printable);
OnPlayerInsertedPrintable?.Invoke();
}
}
}
@@ -82,6 +81,7 @@ public class Printer3DInputHole : MonoBehaviour
{
printer.PrintObject(printable.GetTexture());
Destroy(printable.gameObject);
OnPlayerInsertedPrintable?.Invoke();
});
}
}

View File

@@ -1,3 +1,4 @@
using System.Threading.Tasks;
using TMPro;
using UnityEngine;
using UnityEngine.XR.Interaction.Toolkit;
@@ -14,49 +15,88 @@ public class RadioTransmitter : XRGrabInteractable
public ReleasableButton radioButton;
public TextMeshProUGUI computerScreen;
[Header("Particle System Config")]
public ParticleSystem particles;
public float baseEmissionRate = 3;
public float maxExtraEmissionRate = 50;
private bool isRecording;
private ParticleSystem.EmissionModule particleEmission;
// Start is called before the first frame update
void Start()
{
radioButton.OnButtonPressed += OnRadioButtonPressed;
radioButton.OnButtonReleased += OnRadioButtonReleased;
radioButton.Lock();
isRecording = false;
particleEmission = particles.emission;
particleEmission.enabled = false;
}
// Update is called once per frame
void Update()
{
if (particleEmission.enabled)
{
particles.transform.LookAt(computerScreen.transform.position);
if (isRecording)
{
particleEmission.rateOverTime = baseEmissionRate + fmodWhisperBridge.GetNormalizedVolume01() * maxExtraEmissionRate;
} else
{
particleEmission.rateOverTime = baseEmissionRate;
}
}
}
protected override void OnSelectEntered(SelectEnterEventArgs args)
protected async override void OnSelectEntered(SelectEnterEventArgs args)
{
base.OnSelectEntered(args);
OnPlayerPickUp?.Invoke();
await Task.Delay(100);
radioButton.Unlock();
}
protected override void OnSelectExited(SelectExitEventArgs args)
{
base.OnSelectExited(args);
radioButton.Lock();
}
private void OnRadioButtonPressed()
{
AudioManager.Instance.PlayAttachedInstance(FMODEvents.Instance.RadioButton, gameObject);
fmodWhisperBridge.OnWhisperSegmentUpdated += OnPlayerSpeechUpdated;
fmodWhisperBridge.OnWhisperSegmentFinished += OnPlayerSpeechFinished;
AudioManager.Instance.PlayAttachedInstance(FMODEvents.Instance.RadioButton, gameObject);
fmodWhisperBridge.ActivateRecording();
isRecording = true;
particleEmission.enabled = true;
}
private void OnRadioButtonReleased()
{
fmodWhisperBridge.OnWhisperSegmentUpdated -= OnPlayerSpeechUpdated;
fmodWhisperBridge.OnWhisperSegmentFinished -= OnPlayerSpeechFinished;
AudioManager.Instance.PlayAttachedInstance(FMODEvents.Instance.RadioButton, gameObject);
fmodWhisperBridge.DeactivateRecording();
AudioManager.Instance.PlayAttachedInstance(FMODEvents.Instance.RadioButton, gameObject);
isRecording = false;
}
private void OnPlayerSpeechUpdated(string text)
{
computerScreen.text = text;
OnPlayerFinishedSpeaking?.Invoke();
}
private void OnPlayerSpeechFinished(string playerText)
{
computerScreen.text = playerText;
OnPlayerFinishedSpeaking?.Invoke();
fmodWhisperBridge.OnWhisperSegmentUpdated -= OnPlayerSpeechUpdated;
fmodWhisperBridge.OnWhisperSegmentFinished -= OnPlayerSpeechFinished;
particleEmission.enabled = false;
}
}

View File

@@ -1,14 +1,21 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using TMPro;
using UnityEngine;
using UnityEngine.XR.Interaction.Toolkit;
[Serializable]
public class BoolRow
{
public List<bool> cells = new();
public BoolRow(List<bool> cells)
{
this.cells = cells;
}
}
[Serializable]
@@ -17,93 +24,95 @@ public class ShapeScannerConfiguration
public int columns = 6;
public float requiredCorrectPercentage = 80.0f;
public List<BoolRow> rows = new();
public ShapeScannerConfiguration(int columns, float requiredCorrectPercentage, List<BoolRow> rows)
{
this.columns = columns;
this.requiredCorrectPercentage = requiredCorrectPercentage;
this.rows = rows;
}
}
public class ShapeScanner : MonoBehaviour
{
public List<ShapeScannerConfiguration> configurations = new List<ShapeScannerConfiguration>();
public delegate void OnConfigCompletedDelegate();
public event OnConfigCompletedDelegate OnConfigCompleted;
public delegate void OnAllCompletedDelegate();
public event OnAllCompletedDelegate OnAllCompleted;
[Header("Static References")]
public List<ShapeScannerConfiguration> configurations = new();
public ShapeScannerRay rayPrefab;
public Transform raySpawnCorner1;
public Transform raySpawnCorner2;
public Transform rayParent;
public TextMeshProUGUI currentConfigurationDisplay;
public TextMeshProUGUI correctPercentageDisplay;
public ParticleSystem particles;
public XRInteractionManager interactionManager;
[Header("Materials")]
public Material requiredAndActive;
public Material requiredAndPassive;
public Material notRequiredAndActive;
public Material notRequiredAndPassive;
private List<GameObject> existingRays;
[Header("On Completion")]
public LineRenderer lineRenderer;
public Transform lineStart;
public Transform lineEnd;
public MeshRenderer activatableRenderer;
public Material activatableActiveMaterial;
public HingeJoint doorJoint;
public Collider doorInvisibleWall;
private List<ShapeScannerRay> existingRays;
private float raySpawnDistanceX;
private float raySpawnDistanceZ;
private int currentConfiguration;
private int rayCount;
private int correctRayStates;
private GameObject currentlyScannableObject;
private int totalRayCount;
private int correctRayCount;
private bool isCompleted;
// Start is called before the first frame update
void Start()
{
existingRays = new List<GameObject>();
existingRays = new List<ShapeScannerRay>();
raySpawnDistanceX = raySpawnCorner2.localPosition.x - raySpawnCorner1.localPosition.x;
raySpawnDistanceZ = raySpawnCorner2.localPosition.z - raySpawnCorner1.localPosition.z;
lineRenderer.enabled = false;
isCompleted = false;
currentConfiguration = 0;
InitializeConfiguration();
InitializeConfiguration(configurations[0]);
UpdateCurrentConfigurationDisplay(currentConfiguration);
}
// Update is called once per frame
void Update()
{
}
private void OnTriggerEnter(Collider other)
{
if (other.tag == rayPrefab.scannableTag)
if (lineRenderer.enabled)
{
currentlyScannableObject = other.gameObject;
lineRenderer.SetPosition(0, lineStart.position);
lineRenderer.SetPosition(1, lineEnd.position);
}
}
private void OnTriggerExit(Collider other)
private void InitializeConfiguration(ShapeScannerConfiguration configuration)
{
if (other.tag == rayPrefab.scannableTag)
{
currentlyScannableObject = null;
}
}
private void InitializeConfiguration()
{
// Delete all existing rays first
foreach (GameObject ray in existingRays)
{
Destroy(ray);
}
if (currentlyScannableObject != null)
{
currentlyScannableObject.transform.position = Vector3.zero;
Destroy(currentlyScannableObject);
}
ShapeScannerConfiguration configuration = configurations[currentConfiguration];
// Create rays
int rayRowCount = configuration.rows.Count;
for (int i = 0; i < rayRowCount; i++)
{
float rayPosX = raySpawnCorner1.localPosition.x + i * raySpawnDistanceX / (rayRowCount - 1);
float rayPosZ = raySpawnCorner1.localPosition.z + i * raySpawnDistanceZ / (rayRowCount - 1);
for (int j = 0; j < rayRowCount; j++)
{
// Local position
float rayPosZ = raySpawnCorner1.localPosition.z + j * raySpawnDistanceZ / (rayRowCount - 1);
float rayPosX = raySpawnCorner1.localPosition.x + j * raySpawnDistanceX / (rayRowCount - 1);
Vector3 rayPos = new Vector3(rayPosX, 0, rayPosZ);
ShapeScannerRay ray = Instantiate(rayPrefab, rayParent);
ray.transform.localPosition = rayPos;
existingRays.Add(ray.gameObject);
existingRays.Add(ray);
bool rayCollisionRequired = configuration.rows[i].cells[j];
if (rayCollisionRequired)
@@ -117,41 +126,88 @@ public class ShapeScanner : MonoBehaviour
}
}
// Count total rays and required collision rays
rayCount = configuration.rows.SelectMany(row => row.cells).Count();
correctRayStates = configuration.rows.SelectMany(row => row.cells).Count(cell => !cell);
UpdateDisplay(calculateCorrectPercentage());
totalRayCount = configuration.rows.SelectMany(row => row.cells).Count();
correctRayCount = configuration.rows.SelectMany(row => row.cells).Count(cell => !cell);
float percentage = CalculateCorrectPercentage();
UpdateDisplay(percentage);
}
private float calculateCorrectPercentage()
private void OnConfigurationComplete()
{
return Mathf.RoundToInt((float)correctRayStates / rayCount * 100);
// Destroy colliding scannable objects
HashSet<GameObject> allCollidingObjects = new();
foreach (ShapeScannerRay ray in existingRays)
{
allCollidingObjects.UnionWith(ray.GetCollidingObjects());
}
foreach (GameObject collidingObject in allCollidingObjects)
{
// Release player holding it
var grab = collidingObject.GetComponent<XRGrabInteractable>();
if (grab != null && grab.isSelected)
{
grab.enabled = false;
}
collidingObject.transform.position = Vector3.zero;
Destroy(collidingObject);
}
// Destroy all existing rays
foreach (ShapeScannerRay ray in existingRays)
{
Destroy(ray.gameObject);
}
existingRays.Clear();
correctRayCount = 0;
// Play sound effect and emit particles
AudioManager.Instance.PlayAttachedInstance(FMODEvents.Instance.ShapeScannerSuccess, gameObject);
if (!particles.isPlaying) particles.Play();
particles.Emit(100);
OnConfigCompleted?.Invoke();
}
public void IncrementCorrectRayCount()
private float CalculateCorrectPercentage()
{
correctRayStates++;
float correctPercentage = calculateCorrectPercentage();
return (float) correctRayCount / totalRayCount * 100;
}
public async void IncrementCorrectRayCount()
{
correctRayCount++;
float correctPercentage = CalculateCorrectPercentage();
UpdateDisplay(correctPercentage);
if (isCompleted)
{
return;
}
if (correctPercentage >= configurations[currentConfiguration].requiredCorrectPercentage)
{
OnConfigurationComplete();
await Task.Delay(1000);
UpdateCurrentConfigurationDisplay(currentConfiguration + 1);
if (currentConfiguration + 1 < configurations.Count)
{
currentConfiguration++;
InitializeConfiguration();
AudioManager.Instance.PlayAttachedInstance(FMODEvents.Instance.ShapeScannerSuccess, gameObject);
InitializeConfiguration(configurations[currentConfiguration]);
} else
{
Debug.Log("Shape checker completed");
AudioManager.Instance.PlayAttachedInstance(FMODEvents.Instance.ShapeScannerSuccess, gameObject);
// Initialize configuration with no rays requiring collision
List<BoolRow> rows = Enumerable.Repeat(new BoolRow(Enumerable.Repeat(false, 6).ToList()), 6).ToList();
ShapeScannerConfiguration configuration = new ShapeScannerConfiguration(6, 100, rows);
InitializeConfiguration(configuration);
OnCompleteAll();
}
}
UpdateDisplay(correctPercentage);
}
public void DecrementCorrectRayCount()
{
correctRayStates--;
UpdateDisplay(calculateCorrectPercentage());
correctRayCount--;
UpdateDisplay(CalculateCorrectPercentage());
}
private void UpdateDisplay(float percentage)
@@ -163,4 +219,26 @@ public class ShapeScanner : MonoBehaviour
{
currentConfigurationDisplay.text = confNumber.ToString() + " / " + configurations.Count;
}
private void OnCompleteAll()
{
isCompleted = true;
// Change card reader color to green
activatableRenderer.material = activatableActiveMaterial;
// Enable door to be opened
JointLimits doorJointLimits = doorJoint.limits;
doorJointLimits.min = -90f;
doorJointLimits.max = 90f;
doorJoint.limits = doorJointLimits;
// Disable invisible wall
doorInvisibleWall.enabled = false;
// Create line renderer from shape scanner to door card reader
lineRenderer.enabled = true;
OnAllCompleted?.Invoke();
}
}

View File

@@ -10,11 +10,13 @@ public class ShapeScannerRay : MonoBehaviour
private ShapeScanner _scanner;
private MeshRenderer[] meshRenderers;
private HashSet<GameObject> collidingObjects;
private bool _collisionRequired;
void Awake()
{
meshRenderers = GetComponentsInChildren<MeshRenderer>();
collidingObjects = new HashSet<GameObject>();
}
// Update is called once per frame
@@ -38,38 +40,55 @@ public class ShapeScannerRay : MonoBehaviour
private void OnTriggerEnter(Collider other)
{
if (other.gameObject.tag == scannableTag)
if (other.gameObject.CompareTag(scannableTag))
{
foreach (MeshRenderer meshRenderer in meshRenderers)
GameObject parent = other.transform.parent.gameObject;
collidingObjects.Add(parent);
// Only activate when this was the first object that entered collision
if (collidingObjects.Count == 1)
{
meshRenderer.material = _activeMaterial;
foreach (MeshRenderer meshRenderer in meshRenderers)
{
meshRenderer.material = _activeMaterial;
}
if (_collisionRequired)
{
_scanner.IncrementCorrectRayCount();
}
else
{
_scanner.DecrementCorrectRayCount();
}
}
if (_collisionRequired)
{
_scanner.IncrementCorrectRayCount();
} else
{
_scanner.DecrementCorrectRayCount();
}
}
}
private void OnTriggerExit(Collider other)
{
if (other.gameObject.tag == "ShapeScannable")
if (other.gameObject.CompareTag(scannableTag))
{
foreach (MeshRenderer meshRenderer in meshRenderers)
GameObject parent = other.transform.parent.gameObject;
collidingObjects.Remove(parent);
if (collidingObjects.Count == 0)
{
meshRenderer.material = _passiveMaterial;
}
if (_collisionRequired)
{
_scanner.DecrementCorrectRayCount();
} else
{
_scanner.IncrementCorrectRayCount();
foreach (MeshRenderer meshRenderer in meshRenderers)
{
meshRenderer.material = _passiveMaterial;
}
if (_collisionRequired)
{
_scanner.DecrementCorrectRayCount();
}
else
{
_scanner.IncrementCorrectRayCount();
}
}
}
}
public HashSet<GameObject> GetCollidingObjects()
{
return collidingObjects;
}
}

Some files were not shown because too many files have changed in this diff Show More