1
0
forked from cgvr/DeltaVR

25 Commits

Author SHA1 Message Date
henrisel ea9357ad14 Update README.md 2026-05-14 13:28:59 +00:00
henrisel 8c7204b17a Delete Build.zip 2026-05-13 12:37:24 +00:00
henrisel 04c77c94bf Update README.md 2026-05-13 12:05:43 +00:00
henrisel f798030c2b Update README.md 2026-05-13 12:02:10 +00:00
henrisel f8b5af0b85 Upload files to "Doc/screenshots" 2026-05-13 11:51:47 +00:00
henrisel 693cafc3bc remove screenshots 2026-05-13 14:48:05 +03:00
henrisel 2214a0c6cc add screenshots 2026-05-13 14:16:31 +03:00
henrisel 34c693aaa3 update READMEs 2026-05-13 14:14:28 +03:00
henrisel 7c67a4b44b update main README 2026-05-13 13:40:05 +03:00
henrisel bd5cc0f405 spawn generated object as default ufo's child, not separate object 2026-05-12 11:38:53 +03:00
henrisel 4e55b7e9ab made shape scanner ray colliders higher 2026-03-25 13:46:57 +02:00
henrisel dea42068f7 cafe gen items slightly smaller 2026-03-25 13:38:30 +02:00
henrisel b021fd0110 remove whisper-small, add and use whisper base EN 2026-03-25 13:03:22 +02:00
henrisel 7b45d623d1 add whisper-small and whisper-tiny, use tiny 2026-03-23 10:09:58 +02:00
henrisel f42356dd7a remove mic buffer clearing functionality 2026-03-23 09:55:58 +02:00
henrisel 50002adb61 remove audio loopback functionality 2026-03-23 09:22:20 +02:00
henrisel ee629e2593 assigned correct collision layer to tutorial cubes 2026-03-20 14:51:27 +02:00
henrisel 4796869a29 professor final voice line comes from himself, not radio 2026-03-20 14:50:15 +02:00
henrisel 398f22efdd added 'END PLAYBACK' to removing strings 2026-03-17 10:36:12 +02:00
henrisel b40b075540 update TODO 2026-03-16 15:59:54 +02:00
henrisel cad4c2cbbc mouth animation correctly plays even if previous voiceline is interrupted 2026-03-16 15:40:31 +02:00
henrisel 6a77893ed7 archery range npc voicelines for completing round and submitting name 2026-03-16 15:32:46 +02:00
henrisel 439094f74a professor says thank you after player enters room 2026-03-16 15:09:14 +02:00
henrisel c78886e492 professor says good job after first config done 2026-03-16 14:59:10 +02:00
henrisel 3edef118af add new voiceline files, remove FMOD cache folder 2026-03-16 14:23:02 +02:00
525 changed files with 2739 additions and 619 deletions
+3
View File
@@ -104,6 +104,9 @@ NetrworkManagerUI.prefab.meta
CustomNetworkManager.prefab
CustomNetworkManager.prefab.meta
#FMOD Studio
DeltaVRFMOD/.cache
# Project-specific files
config.json
+17 -31
View File
@@ -1,34 +1,20 @@
### TODO
* teha build kus archery range'is spawnitud objektid
* FMOD ChannelControl errorid
* speech-to-text:
* uurida miks buildis Whisper halvemini töötab
* proovida suuremat Whisperi mudelit, äkki töötab mürases keskkonnas paremini
* npc character:
* klaas on näha temast eespool
* shape detection:
* professor võiks öelda "good job, continue..." pärast esimest successi
* kui kõik configurationid tehtud, siis professor tuleb uksest välja ja ütleb "thank you"
* peab mängijale kuidagi selgitama, kuidas scale'ida prinditud objekte
* prinditud objekti scale'imisele min ja max size limiit
* soft particle'id, et ei clipiks
* archery range:
* 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..."
* UFO möödalendamise animation/cutscene alguses kui ütleb "delta attacked by ufos"
* cafe:
* võiks saada hinnata saadud tellimust
* "order again" nupp
# Testing the pipeline
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**
Install required dependency libraries using
```
pip install -r requirements.txt
```
Make a copy of `.env.example`, rename it as `.env`, and insert the necessary config values.
### Notes
* Functionalities that were implemented using major help from AI:
* animating NPC mouth movement based on voice amplitude
* adjusting spawned gltf objects' scale
* porting InvokeAI client and TRELLIS client to Unity scripts
* 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
## Python notebooks
* [`local_image_generation.ipynb`](notebooks/local_image_generation.ipynb)
* [`local_model_generation.ipynb`](notebooks/local_model_generation.ipynb)
* [`subprocess_test.ipynb`](notebooks/subprocess_test.ipynb)
## Python scripts
* [`generate_image_local.py`](generate_image_local.py)
* [`generate_model_local.py`](generate_model_local.py)
* [`start_pipeline.py`](start_pipeline.py)
@@ -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)
-49
View File
@@ -1,49 +0,0 @@
3.170447962475009263e-05
2.923115389421582222e-04
2.510738931596279144e-02
1.111792679876089096e-02
6.692767888307571411e-02
1.006313711404800415e-01
7.780694961547851562e-02
5.686730891466140747e-02
5.614304915070533752e-02
4.554714635014533997e-02
4.514135792851448059e-02
5.479728057980537415e-02
4.272024706006050110e-02
3.989587724208831787e-02
4.298635944724082947e-02
4.074911773204803467e-02
2.244980260729789734e-02
1.105279754847288132e-02
1.347438804805278778e-02
1.654553040862083435e-02
1.846965588629245758e-02
2.045047841966152191e-02
1.407719496637582779e-02
6.578906439244747162e-03
1.353173051029443741e-02
1.625132374465465546e-02
5.863697826862335205e-02
1.110599413514137268e-01
9.950184077024459839e-02
1.184522062540054321e-01
1.000181213021278381e-01
6.772108376026153564e-02
7.621638476848602295e-02
3.018615581095218658e-02
9.624224901199340820e-02
1.259753555059432983e-01
1.276500672101974487e-01
1.206035763025283813e-01
1.011835709214210510e-01
6.155343726277351379e-02
3.734333068132400513e-02
2.485111355781555176e-02
2.122259326279163361e-02
1.139380130916833878e-02
7.472451310604810715e-03
5.807624198496341705e-03
1.960268709808588028e-03
8.761089411564171314e-04
3.071058890782296658e-04
@@ -14,7 +14,7 @@
},
{
"cell_type": "code",
"execution_count": 5,
"execution_count": 4,
"id": "77b23cd8",
"metadata": {},
"outputs": [],
@@ -22,29 +22,16 @@
"# API endpoint\n",
"BASE_URL = \"http://127.0.0.1:7960\"\n",
"\n",
"def generate_no_preview(image_base64: str):\n",
"def generate_no_preview(data: dict):\n",
" \"\"\"Generate 3D model from a single base64-encoded image without previews.\n",
" \n",
" Args:\n",
" image_base64: Base64 string of the image (without 'data:image/...' prefix)\n",
" \"\"\"\n",
" try:\n",
" # Set generation parameters\n",
" params = {\n",
" 'image_base64': image_base64,\n",
" 'seed': 42,\n",
" 'ss_guidance_strength': 7.5,\n",
" 'ss_sampling_steps': 30,\n",
" 'slat_guidance_strength': 7.5,\n",
" 'slat_sampling_steps': 30,\n",
" 'mesh_simplify_ratio': 0.95,\n",
" 'texture_size': 1024,\n",
" 'output_format': 'glb'\n",
" }\n",
" \n",
" # Start generation\n",
" print(\"Starting generation...\")\n",
" response = requests.post(f\"{BASE_URL}/generate_no_preview\", data=params)\n",
" response = requests.post(f\"{BASE_URL}/generate_no_preview\", data)\n",
" print(\"Response status:\", response.status_code)\n",
" response.raise_for_status()\n",
" \n",
@@ -75,7 +62,7 @@
},
{
"cell_type": "code",
"execution_count": 6,
"execution_count": 11,
"id": "eb122295",
"metadata": {},
"outputs": [],
@@ -85,7 +72,19 @@
" image_data = image_file.read()\n",
"\n",
" base64_encoded = base64.b64encode(image_data).decode('utf-8')\n",
" model = generate_no_preview(base64_encoded)\n",
" # Set generation parameters\n",
" data = {\n",
" 'image_base64': base64_encoded,\n",
" 'seed': 42,\n",
" 'ss_guidance_strength': 8,\n",
" 'ss_sampling_steps': 10,\n",
" 'slat_guidance_strength': 6,\n",
" 'slat_sampling_steps': 10,\n",
" 'mesh_simplify_ratio': 0.9958,\n",
" 'texture_size': 1024,\n",
" 'output_format': 'glb'\n",
" }\n",
" model = generate_no_preview(data)\n",
" \n",
" with open(output_path, 'wb') as f:\n",
" f.write(model)\n",
@@ -94,7 +93,7 @@
},
{
"cell_type": "code",
"execution_count": 9,
"execution_count": 12,
"id": "2ce7dfdf",
"metadata": {},
"outputs": [
@@ -107,14 +106,14 @@
"Progress: 100%\n",
"Downloading model...\n",
"Model downloaded.\n",
"Model saved to test_resources/style_test_3_model.glb\n"
"Model saved to test_resources/mesh_simplify_ratio_0.998.glb\n"
]
}
],
"source": [
"\n",
"image_path = 'test_resources/style_test_3.jpg'\n",
"output_path = \"test_resources/style_test_3_model.glb\"\n",
"image_path = 'test_resources/512x512.png'\n",
"output_path = \"test_resources/mesh_simplify_ratio_0.998.glb\"\n",
"\n",
"generate_model(image_path, output_path)"
]
@@ -130,7 +129,7 @@
],
"metadata": {
"kernelspec": {
"display_name": ".venv",
"display_name": ".venv (3.10.11)",
"language": "python",
"name": "python3"
},
@@ -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
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 38bc01876ee396a46b03ca91e612e687
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 42e58ab8243a8c3449d391cc548d895c
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -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
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 5898d7a0def449d47856bcc1ca7a29d6
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 7cb93a4fb1b04374eaf023113b75af18
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -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
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 7d61563367dd2174ebac733fc96d5a7c
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 264f1b0a1d60ee44fb83104376fe62d6
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -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
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 0a12bca9c495f844788cac4b3dc01528
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 8ff483912820c0c458c2960593f32d01
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -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
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 9e4ecb709f95cd241a9c5dc5558ab3b7
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 5aa14328feee8ad47a37f50a3b07ae47
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -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
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: d0ebb29a4c0d68b4da17bc19e7384990
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 97f150ec0d3d48a4db1ea667fe05b072
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -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
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 62632355e21a84c4c84e476062ab8670
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 7a43d69a404558844883b6d1e9ccc6a6
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -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
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 6789c915ab4332b4f9a2a5e01a0b1d32
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 7bb958a26428f774dae23140e390d603
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
Binary file not shown.
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 4fef61b9ad4f7eb488ea2657f1cc700e
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
Binary file not shown.
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 6f5a0c98d09a6dc4d9d570e23dc96ab9
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -85,11 +85,8 @@ public class ArcheryRange : NetworkBehaviour
_presentPlayers.Remove(exitedPlayer); // Shifts others left automatically
if (exitedPlayer == _scoredPlayer) keyboardManager.DeActivate(); // If the player ´refuses to enter their name.
}
public override void OnStopServer()
{
base.OnStopServer();
@@ -134,18 +131,18 @@ public class ArcheryRange : NetworkBehaviour
private ArcheryTarget SpawnTarget(Vector3 randomPos)
{
GameObject targetObject;
if (modelDisplay.Model == null)
// Spawn default UFO
GameObject targetObject = Instantiate(targetPrefab, randomPos, targetStartPosition.rotation, null);
if (modelDisplay.Model != null)
{
// spawn default UFO
targetObject = Instantiate(targetPrefab, randomPos, Quaternion.identity, null);
} else
{
// spawn generated model
targetObject = Instantiate(modelDisplay.Model, randomPos, Quaternion.identity, null);
InitializeArcheryTargetObject(targetObject);
// Spawn generated object directly as default UFO's child
GameObject childObject = Instantiate(modelDisplay.Model);
childObject.transform.SetParent(targetObject.transform, false);
childObject.transform.localScale *= targetSizeIncrease;
// Disable UFO's default body
targetObject.transform.Find("Body").gameObject.SetActive(false);
}
targetObject.transform.rotation = targetStartPosition.rotation;
ArcheryTarget target = targetObject.GetComponent<ArcheryTarget>();
target.endPosition = targetEndPosition.position;
@@ -154,22 +151,6 @@ public class ArcheryRange : NetworkBehaviour
return target;
}
private void InitializeArcheryTargetObject(GameObject targetObject)
{
ArcheryTarget archeryTarget = targetObject.AddComponent<ArcheryTarget>();
archeryTarget.pointsText = archeryTargetPointsText;
Rigidbody rigidbody = targetObject.AddComponent<Rigidbody>();
rigidbody.useGravity = false;
rigidbody.isKinematic = true;
targetObject.AddComponent<NetworkObject>();
targetObject.AddComponent<NetworkTransform>();
targetObject.transform.localScale *= targetSizeIncrease;
}
public void ResetRange()
{
if (!IsServer) return;
@@ -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();
}
@@ -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);
}
}
@@ -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;
Binary file not shown.
Binary file not shown.
@@ -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: []
+54 -226
View File
@@ -9,9 +9,10 @@ GameObject:
serializedVersion: 6
m_Component:
- component: {fileID: 3337587390139541606}
- component: {fileID: 627565954663756710}
- component: {fileID: 1081661767482416249}
- component: {fileID: 3779719438397915148}
m_Layer: 0
m_Name: SportModel
m_Name: Body
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
@@ -26,7 +27,7 @@ Transform:
m_GameObject: {fileID: 3508152469845169189}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 0.24, y: 0.2, z: 0.2}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 4011537191296717654}
@@ -35,47 +36,50 @@ Transform:
m_Father: {fileID: 7527508320363503049}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &627565954663756710
MonoBehaviour:
--- !u!136 &1081661767482416249
CapsuleCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3508152469845169189}
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
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: a2836e36774ca1c4bbbee976e17b649c, type: 3}
m_Name:
m_EditorClassIdentifier:
_componentIndexCache: 2
_addedNetworkObject: {fileID: 2689384198849609103}
_networkObjectCache: {fileID: 2689384198849609103}
_synchronizeParent: 0
_packing:
Position: 1
Rotation: 1
Scale: 0
_interpolation: 2
_extrapolation: 2
_enableTeleport: 0
_teleportThreshold: 1
_clientAuthoritative: 1
_sendToOwner: 1
_synchronizePosition: 1
_positionSnapping:
X: 0
Y: 0
Z: 0
_synchronizeRotation: 1
_rotationSnapping:
X: 0
Y: 0
Z: 0
_synchronizeScale: 1
_scaleSnapping:
X: 0
Y: 0
Z: 0
serializedVersion: 2
m_Radius: 1.07
m_Height: 0.97
m_Direction: 1
m_Center: {x: 0.16, y: -0.51, z: 0}
--- !u!65 &3779719438397915148
BoxCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3508152469845169189}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 3
m_Size: {x: 4.5, y: 0.5, z: 3.77}
m_Center: {x: 0.12, y: -0.24, z: 0.06}
--- !u!1 &6744593628588765187
GameObject:
m_ObjectHideFlags: 0
@@ -87,7 +91,6 @@ GameObject:
- component: {fileID: 1251512755648678878}
- component: {fileID: 4963625795242203983}
- component: {fileID: 5457198189491340073}
- component: {fileID: 8959643074287331097}
m_Layer: 0
m_Name: BezierCurve.007
m_TagString: Untagged
@@ -102,13 +105,13 @@ Transform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6744593628588765187}
m_LocalRotation: {x: 0.00000031987892, y: 0, z: -0, w: 1}
m_LocalPosition: {x: 0.5, y: -1.2, z: 0.3}
m_LocalScale: {x: 1, y: 1, z: 1}
m_LocalRotation: {x: 0.00000031987892, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0.120000005, y: -0.24000001, z: 0.06000042}
m_LocalScale: {x: 0.24, y: 0.2, z: 0.2}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 3337587390139541606}
m_RootOrder: 2
m_RootOrder: -1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &4963625795242203983
MeshFilter:
@@ -161,47 +164,6 @@ MeshRenderer:
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!114 &8959643074287331097
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6744593628588765187}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: a2836e36774ca1c4bbbee976e17b649c, type: 3}
m_Name:
m_EditorClassIdentifier:
_componentIndexCache: 5
_addedNetworkObject: {fileID: 2689384198849609103}
_networkObjectCache: {fileID: 2689384198849609103}
_synchronizeParent: 0
_packing:
Position: 1
Rotation: 1
Scale: 0
_interpolation: 2
_extrapolation: 2
_enableTeleport: 0
_teleportThreshold: 1
_clientAuthoritative: 1
_sendToOwner: 1
_synchronizePosition: 1
_positionSnapping:
X: 0
Y: 0
Z: 0
_synchronizeRotation: 1
_rotationSnapping:
X: 0
Y: 0
Z: 0
_synchronizeScale: 1
_scaleSnapping:
X: 0
Y: 0
Z: 0
--- !u!1 &7680366769166628765
GameObject:
m_ObjectHideFlags: 0
@@ -213,7 +175,6 @@ GameObject:
- component: {fileID: 4011537191296717654}
- component: {fileID: 1910778184414920112}
- component: {fileID: 363608006073787400}
- component: {fileID: 4439869206153374580}
m_Layer: 0
m_Name: BezierCurve.005
m_TagString: Untagged
@@ -228,13 +189,13 @@ Transform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7680366769166628765}
m_LocalRotation: {x: 0.00000031987892, y: 0, z: -0, w: 1}
m_LocalPosition: {x: 0.5, y: 0.3, z: 0.3}
m_LocalScale: {x: 1, y: 1, z: 1}
m_LocalRotation: {x: 0.00000031987892, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0.120000005, y: 0.060000062, z: 0.06000042}
m_LocalScale: {x: 0.24, y: 0.2, z: 0.2}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 3337587390139541606}
m_RootOrder: 0
m_RootOrder: -1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &1910778184414920112
MeshFilter:
@@ -286,47 +247,6 @@ MeshRenderer:
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!114 &4439869206153374580
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7680366769166628765}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: a2836e36774ca1c4bbbee976e17b649c, type: 3}
m_Name:
m_EditorClassIdentifier:
_componentIndexCache: 3
_addedNetworkObject: {fileID: 2689384198849609103}
_networkObjectCache: {fileID: 2689384198849609103}
_synchronizeParent: 0
_packing:
Position: 1
Rotation: 1
Scale: 0
_interpolation: 2
_extrapolation: 2
_enableTeleport: 0
_teleportThreshold: 1
_clientAuthoritative: 1
_sendToOwner: 1
_synchronizePosition: 1
_positionSnapping:
X: 0
Y: 0
Z: 0
_synchronizeRotation: 1
_rotationSnapping:
X: 0
Y: 0
Z: 0
_synchronizeScale: 1
_scaleSnapping:
X: 0
Y: 0
Z: 0
--- !u!1 &7983999977322064054
GameObject:
m_ObjectHideFlags: 0
@@ -340,8 +260,6 @@ GameObject:
- component: {fileID: 8954823527229761837}
- component: {fileID: 2689384198849609103}
- component: {fileID: 1843883317757509263}
- component: {fileID: 7451921017238644471}
- component: {fileID: 2131608416831220487}
m_Layer: 0
m_Name: TargetUFO
m_TagString: Untagged
@@ -357,7 +275,7 @@ Transform:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7983999977322064054}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 1.398, y: 1.1, z: 8.292}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
@@ -429,10 +347,6 @@ MonoBehaviour:
_networkBehaviours:
- {fileID: 4850307641519017041}
- {fileID: 1843883317757509263}
- {fileID: 627565954663756710}
- {fileID: 4439869206153374580}
- {fileID: 6540522042633253623}
- {fileID: 8959643074287331097}
<ParentNetworkObject>k__BackingField: {fileID: 0}
<ChildNetworkObjects>k__BackingField: []
_isNetworked: 1
@@ -487,50 +401,6 @@ MonoBehaviour:
X: 0
Y: 0
Z: 0
--- !u!136 &7451921017238644471
CapsuleCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7983999977322064054}
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: 2
m_Radius: 1.07
m_Height: 0.97
m_Direction: 1
m_Center: {x: 0.16, y: -0.51, z: 0}
--- !u!65 &2131608416831220487
BoxCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7983999977322064054}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 3
m_Size: {x: 4.5, y: 0.5, z: 3.77}
m_Center: {x: 0.12, y: -0.24, z: 0.06}
--- !u!1 &8462201784916155029
GameObject:
m_ObjectHideFlags: 0
@@ -542,7 +412,6 @@ GameObject:
- component: {fileID: 2406214921254263651}
- component: {fileID: 6767210086105080178}
- component: {fileID: 3766991064380355318}
- component: {fileID: 6540522042633253623}
m_Layer: 0
m_Name: BezierCurve.006
m_TagString: Untagged
@@ -558,12 +427,12 @@ Transform:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8462201784916155029}
m_LocalRotation: {x: -0.00000015993946, y: 0.86602545, z: -0.00000027702328, w: -0.49999997}
m_LocalPosition: {x: 0.5, y: -3.4, z: 0.3}
m_LocalScale: {x: 1, y: 1, z: 1}
m_LocalPosition: {x: 0.121, y: -0.663, z: 0.072}
m_LocalScale: {x: 0.22, y: 0.2, z: 0.24}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 3337587390139541606}
m_RootOrder: 1
m_RootOrder: -1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &6767210086105080178
MeshFilter:
@@ -615,44 +484,3 @@ MeshRenderer:
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!114 &6540522042633253623
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8462201784916155029}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: a2836e36774ca1c4bbbee976e17b649c, type: 3}
m_Name:
m_EditorClassIdentifier:
_componentIndexCache: 4
_addedNetworkObject: {fileID: 2689384198849609103}
_networkObjectCache: {fileID: 2689384198849609103}
_synchronizeParent: 0
_packing:
Position: 1
Rotation: 1
Scale: 0
_interpolation: 2
_extrapolation: 2
_enableTeleport: 0
_teleportThreshold: 1
_clientAuthoritative: 1
_sendToOwner: 1
_synchronizePosition: 1
_positionSnapping:
X: 0
Y: 0
Z: 0
_synchronizeRotation: 1
_rotationSnapping:
X: 0
Y: 0
Z: 0
_synchronizeScale: 1
_scaleSnapping:
X: 0
Y: 0
Z: 0
Binary file not shown.
@@ -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];
@@ -138,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();
}
@@ -181,8 +155,7 @@ public class FMODWhisperBridge : MonoBehaviour
if (_stream != null)
{
try { _stream.StopStream(); } catch { }
_streamStarted = false;
_stream.StopStream();
}
try
@@ -193,7 +166,6 @@ public class FMODWhisperBridge : MonoBehaviour
{
Debug.LogError($"[FMOD→Whisper] CreateStream exception: {e}");
_stream = null;
_streamStarted = false;
return;
}
@@ -214,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);
@@ -231,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>
@@ -245,14 +202,10 @@ 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>
@@ -277,7 +230,6 @@ public class FMODWhisperBridge : MonoBehaviour
return Mathf.Clamp01(Mathf.InverseLerp(-60f, -15f, db));
}
private void Update()
{
// Always tick FMOD
@@ -285,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)
@@ -337,7 +288,7 @@ public class FMODWhisperBridge : MonoBehaviour
}
// 2) Feed audio to Whisper
if (_streamStarted && _stream != null)
if (_stream != null)
{
if (isRecordingActivated && !_skipOneFeedFrame)
{
@@ -353,7 +304,6 @@ public class FMODWhisperBridge : MonoBehaviour
}
}
// If skipping, we just discard this frame to ensure no stale data leaks.
}
finally
@@ -364,12 +314,11 @@ 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)
@@ -450,56 +399,6 @@ public class FMODWhisperBridge : MonoBehaviour
}
}
private void ClearRecordRingBuffer()
{
if (!_recSound.hasHandle() || _soundPcmLength == 0) return;
uint totalBytes = _soundPcmLength * (uint)_nativeChannels * 2; // PCM16
IntPtr p1, p2;
uint len1, len2;
// 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)
{
Debug.LogWarning($"[FMOD→Whisper] Could not lock ring buffer to clear: {r}");
return;
}
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);
}
}
// 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;
}
}
/// <summary>
/// Computes RMS (root mean square) from a PCM16 block using only safe code.
/// Uses the shared _shortOverlay buffer (no allocations).
@@ -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()
@@ -37,6 +40,8 @@ public class ArcheryRangeNPC : NPCController
microphoneStand.OnPlayerUsedMicrophone += OnPlayerUsedMicrophone;
imageGenerationButton.OnButtonPressed += OnImageGenerationButtonPressed;
modelGenerationButton.OnButtonPressed += OnModelGenerationButtonPressed;
keyboardManager.OnActivate += OnRoundComplete;
keyboardManager.OnSubmit += OnNameSubmitted;
}
protected async override void OnPlayerApproach()
@@ -119,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);
}
}
@@ -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,22 +93,6 @@ 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() {
OnPlayerApproach();
@@ -168,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)
// ---------------------------
@@ -1,5 +1,4 @@
using DG.Tweening;
using System;
using System.Threading.Tasks;
using UnityEngine;
@@ -26,8 +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 - shape scanner completed
// 7 - moving away
// 6 - player completed first shape scanner config
// 7 - shape scanner completed
// 8 - moving away
private int state;
private float lastPlayerApproachTime;
@@ -43,7 +43,8 @@ public class ShapeDetectionNPC : NPCController
radio.OnPlayerFinishedSpeaking += OnPlayerSpokeIntoRadio;
printerInsertionHole.OnPlayerInsertedPrintable += OnPlayerInitiatedPrinting;
computerPrinter.OnImagePrinted += OnPlayerPrintedImage;
shapeScanner.OnShapeScannerCompleted += OnShapeScannerCompleted;
shapeScanner.OnConfigCompleted += OnPlayerCompletedFirstConfiguration;
shapeScanner.OnAllCompleted += OnShapeScannerCompleted;
}
protected async override void OnPlayerApproach()
@@ -132,10 +133,22 @@ public class ShapeDetectionNPC : NPCController
}
}
private void OnPlayerCompletedFirstConfiguration()
{
if (state == 5)
{
SpeakVoiceLine(6, radio.gameObject, radioAmount);
state = 6;
}
}
private void OnShapeScannerCompleted()
{
state = 6;
questMarker.MoveTo(questMarkerPoint);
if (state == 6)
{
state = 7;
questMarker.MoveTo(questMarkerPoint);
}
}
private void MoveToNextPoint(int pointIndex)
@@ -153,12 +166,13 @@ public class ShapeDetectionNPC : NPCController
public async void OnPlayerEnteredRoom()
{
if (state == 6)
if (state == 7)
{
state = 7;
state = 8;
staticRadio.SetActive(false);
questMarker.gameObject.SetActive(false);
await Task.Delay(2500);
SpeakVoiceLine(7, gameObject, 0);
await Task.Delay(6500);
MoveToNextPoint(0);
}
}
@@ -35,11 +35,13 @@ public class ShapeScannerConfiguration
public class ShapeScanner : MonoBehaviour
{
public delegate void OnShapeScannerCompletedDelegate();
public event OnShapeScannerCompletedDelegate OnShapeScannerCompleted;
public delegate void OnConfigCompletedDelegate();
public event OnConfigCompletedDelegate OnConfigCompleted;
public delegate void OnAllCompletedDelegate();
public event OnAllCompletedDelegate OnAllCompleted;
[Header("Static References")]
public List<ShapeScannerConfiguration> configurations = new List<ShapeScannerConfiguration>();
public List<ShapeScannerConfiguration> configurations = new();
public ShapeScannerRay rayPrefab;
public Transform raySpawnCorner1;
public Transform raySpawnCorner2;
@@ -163,6 +165,8 @@ public class ShapeScanner : MonoBehaviour
AudioManager.Instance.PlayAttachedInstance(FMODEvents.Instance.ShapeScannerSuccess, gameObject);
if (!particles.isPlaying) particles.Play();
particles.Emit(100);
OnConfigCompleted?.Invoke();
}
private float CalculateCorrectPercentage()
@@ -235,6 +239,6 @@ public class ShapeScanner : MonoBehaviour
// Create line renderer from shape scanner to door card reader
lineRenderer.enabled = true;
OnShapeScannerCompleted?.Invoke();
OnAllCompleted?.Invoke();
}
}
BIN
View File
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

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