forked from cgvr/DeltaVR
Compare commits
23 Commits
c78886e492
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| ea9357ad14 | |||
| 8c7204b17a | |||
| 04c77c94bf | |||
| f798030c2b | |||
| f8b5af0b85 | |||
| 693cafc3bc | |||
| 2214a0c6cc | |||
| 34c693aaa3 | |||
| 7c67a4b44b | |||
| bd5cc0f405 | |||
| 4e55b7e9ab | |||
| dea42068f7 | |||
| b021fd0110 | |||
| 7b45d623d1 | |||
| f42356dd7a | |||
| 50002adb61 | |||
| ee629e2593 | |||
| 4796869a29 | |||
| 398f22efdd | |||
| b40b075540 | |||
| cad4c2cbbc | |||
| 6a77893ed7 | |||
| 439094f74a |
@@ -1,35 +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:
|
||||
* 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:
|
||||
* audio detection sama heaks nagu ülejäänud 2 mängul!
|
||||
* continuous krabamise heli miskipärast
|
||||
* 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)
|
||||
|
||||
@@ -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
|
||||
+22
-23
@@ -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"
|
||||
},
|
||||
+242
@@ -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
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 38bc01876ee396a46b03ca91e612e687
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
+257
@@ -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
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5898d7a0def449d47856bcc1ca7a29d6
|
||||
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,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:
|
||||
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();
|
||||
}
|
||||
|
||||
|
||||
+5
-15
@@ -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: []
|
||||
|
||||
@@ -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 it’s 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
|
||||
// We’ll 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
|
||||
// We’ll 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)
|
||||
// ---------------------------
|
||||
|
||||
@@ -171,7 +171,8 @@ public class ShapeDetectionNPC : NPCController
|
||||
state = 8;
|
||||
staticRadio.SetActive(false);
|
||||
questMarker.gameObject.SetActive(false);
|
||||
await Task.Delay(2500);
|
||||
SpeakVoiceLine(7, gameObject, 0);
|
||||
await Task.Delay(6500);
|
||||
MoveToNextPoint(0);
|
||||
}
|
||||
}
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,85 +1,97 @@
|
||||

|
||||
|
||||
DeltaVR is a virtual reality experience set in the [Delta Centre](https://delta.ut.ee/) of the [University of Tartu](https://ut.ee/). The virtual Delta Building includes several interactive scenes that demonstrate the teaching and research actively done in the Delta Centre.
|
||||
# DeltaVR: Player-Prompted 3D Model Generation Game Mechanics
|
||||
|
||||
The application works on PCVR, Meta Quest 2 and 3, HTC Vive, and regular Windows PC platforms. There is cross-platform multiplayer functionality that enables several users to be in the same virtual environment from both VR and PC platforms.
|
||||
This is a fork of the [main DeltaVR project](https://cgvrgit.ulno.net/cgvr/DeltaVR). To learn more about DeltaVR itself, look at the main repository's README.
|
||||
|
||||
This project is about investigating the feasibility of player-prompted runtime 3D model generation game mechanics. These are game mechanics that allow the player to generate arbitrary 3D objects using natural language speech. This project includes three mini-games that use this speech-to-3D system as a core game mechanic.
|
||||
|
||||
## Features
|
||||
## Mini-Games
|
||||
|
||||
### Exploration
|
||||
### Delta Cafe
|
||||
<img src="https://cgvrgit.ulno.net/henrisel/DeltaVR3DModelGeneration/media/branch/master/Doc/screenshots/delta_cafe_screenshot.png" width="800">
|
||||
|
||||
DeltaVR features the first two floors of the Delta Educational Building for **exploration and discovery**. There are many diegetic elements representing the studies and research conducted at the Delta Building, such as robotics, the high-performance computing server room, video game development, and student life.
|
||||
### Archery Range
|
||||
<img src="https://cgvrgit.ulno.net/henrisel/DeltaVR3DModelGeneration/media/branch/master/Doc/screenshots/archery_range_screenshot.png" width="800">
|
||||
|
||||

|
||||
### Shape Detection
|
||||
<img src="https://cgvrgit.ulno.net/henrisel/DeltaVR3DModelGeneration/media/branch/master/Doc/screenshots/shape_detection_gameobjects.png" width="800">
|
||||
|
||||
### UFO Bow Game
|
||||
Playthrough videos of each mini-game are available on YouTube: https://www.youtube.com/playlist?list=PLqIwPfWyxyaH-YHn64jW59aFhQ5OKf9CW
|
||||
|
||||
At the terrace on the second floor, Delta explorers can defend the building from UFO-s using a bow and **achieve high scores**.
|
||||
## Setup Instructions
|
||||
|
||||

|
||||
The built version of the game is available here: https://owncloud.ut.ee/owncloud/s/tXBd4XGpbXTi7Hm.
|
||||
|
||||
### Bolt Self-Driving Car
|
||||
The build and the editor version both rely on a speech-to-3D pipeline to function. This pipeline needs to be set up locally and consists of two additional software applications in addition to the Unity game itself: InvokeAI and TRELLIS.
|
||||
|
||||
The courtyard between the Educational and Entrepreneurial buildings of the Delta Centre, the explorers can see the Bolt Self-Driving Car. This car is developed by the [[http://adl.cs.ut.ee/|Autonomous Driving Lab]] of the [[https://cs.ut.ee|Institute of Computer Science]]. If one is brave enough, they can stop the car and catch a ride, simulating both the **feeling of being in a self-driving vehicle** as well as VR motion sickness.
|
||||
### InvokeAI
|
||||
|
||||

|
||||
InvokeAI is used to generate images from text prompts. To install InvokeAI, follow the instructions in the official guide: https://invoke.ai/start-here/installation.
|
||||
|
||||
### Space Walk
|
||||
After installing it, an AI model needs to be set up in InvokeAI. This project has been tested with Stable Diffusion XL, but other models can also be used. Documentation on setting up models: https://invoke.ai/concepts/models.
|
||||
|
||||
Where the actual Delta building has a set of skywalks connecting it with the entrepreneurship building, DeltaVR has a set of portals leading to the Space walk experience. In it, one can move in the **vastness of space** and experience **changes in gravity**. A fleet of UFO ships react to one's presence and come to investigate the arrival.
|
||||
Finally, to enable communication with InvokeAI across different computers, enable the Server Mode in InvokeAI settings.
|
||||
|
||||

|
||||
### TRELLIS
|
||||
|
||||
### Server Room
|
||||
TRELLIS is used to generate 3D models based on images. The simplest way to install TRELLIS on Windows is via the one-click installer provided in this fork of the original TRELLIS repo: https://github.com/IgorAherne/trellis-stable-projectorz. The download package includes instructions on how to launch TRELLIS as a local API server. For the default configuration, use the following command:
|
||||
```
|
||||
.\run.bat --ip 0.0.0.0
|
||||
```
|
||||
|
||||
On the second floor, one can hear the humming of the servers. Should they investigate, they will find a room of server racks and a large red button. Should they push the button, they will trigger the **fire alarm** and have the server room fill with harmful invisible gas. This propms the player to escape the room. This largerly **auditory experience** is noted to be engaging and immersive. It represents the work of UT HPC in maintaining the servers of the University of Tartu.
|
||||
### Unity
|
||||
|
||||

|
||||
In both editor mode and the built version, after first starting the game, the `config.json` file is created in the game's root directory. This file is used to persist configurable values between play sessions. The following values need to be set correctly for the game to be able to communicate with InvokeAI and TRELLIS:
|
||||
|
||||
### Interactive Map
|
||||
* `invokeAiUrl` - the URL of InvokeAI (for example `http://192.168.0.53:9090`)
|
||||
* `invokeAiModelKey` - the key of the specific model set up in InvokeAI to use. To see the keys of your installed models, send a GET request to `{INVOKEAI_URL}/api/v2/models/?model_type=main` (for example, `http://192.168.0.53:9090/api/v2/models/?model_type=main`)
|
||||
* `trellisUrl` - the URL of TRELLIS (for example, `http://192.168.0.53:7960`)
|
||||
|
||||
To navigate the two floors of the large Delta Educational Building, explorers have an interactive map. This provides a clear overview of where they currently are and what other interactions are located across the building. Explorers can teleport to a **select interactive experiences**, while others are left for them to discover based on the hints on the map.
|
||||
The [3d-generation-pipeline](3d-generation-pipeline/README.md) folder includes Python notebooks and scripts that can be used to test the pipeline working together.
|
||||
|
||||

|
||||
## Unresolved bugs and potential improvements for the future
|
||||
* continuous grabbing sound when grabbing with both hands at the same time: "(Un)requesting ownership of Cube"
|
||||
* FMOD ChannelControl errors
|
||||
* speech-to-text: investigate why Whisper still sometimes stops detecting speech
|
||||
* glTF loading: investigate how to use the Universal Render Pipeline Lit shader for the glTF-loaded objects.
|
||||
* NPC characters:
|
||||
* glass wall is sometimes incorrectly visible in front of the NPC
|
||||
* Delta Cafe:
|
||||
* ability for players to rate the orders
|
||||
* "order again" button
|
||||
* Archery Range:
|
||||
* NPC should repeat the last instruction when the player is not progressing
|
||||
* reuse the UFO flying animation from Space Walk in the beginning, when NPC talks about looking out the window and the UFO attack + have the default UFO already in the model display capsule
|
||||
* Shape Detection:
|
||||
* explain to the player how to scale printed objects
|
||||
* set min and max scale limits on printed objects
|
||||
* set 3d printer soft particles to avoid sharp edges when particles go inside the printer wall
|
||||
|
||||
### Whiteboard
|
||||
|
||||
In the virtual Computer Graphics and Virtual Reality Study Lab, explorers can use spray paint cans to draw on a whiteboard. Surprisingly, this is one of the **more popular interactive experiences** of DeltaVR.
|
||||
|
||||

|
||||
|
||||
## Credits
|
||||
|
||||
**Ranno Samuel Adson**<br/>
|
||||
User experience design. Additional interactions. Interaction improvements.
|
||||
|
||||
**Toomas Tamm**<br/>
|
||||
Project architecture, model optimization, lighting. [Bachelor's Thesis](https://comserv.cs.ut.ee/ati_thesis/datasheet.php?id=71682) ([poster](https://courses.cs.ut.ee/student_projects/download/478.pdf)), [Master's Thesis](https://comserv.cs.ut.ee/ati_thesis/datasheet.php?id=77065&language=en).
|
||||
|
||||
**Joonas Püks**<br/>
|
||||
Multiplayer and cross-play functionality. [Bachelor's Thesis](https://comserv.cs.ut.ee/ati_thesis/datasheet.php?id=74390) ([poster](https://courses.cs.ut.ee/student_projects/download/534.pdf)).
|
||||
**Samuel Saar**<br/>
|
||||
Creation of the following 3D models used in the mini-games:
|
||||
* Delta Cafe: pen, notepad, serving tray
|
||||
* Archery Range: capsule display, microphone stand, wires, table, screens
|
||||
* Shape Detection: computer printer, 3D printer, radio transmitter, shape detector
|
||||
|
||||
**Timur Nizamov**<br/>
|
||||
Technical sound design.
|
||||
Sound effects and integrating voicelines into Unity
|
||||
|
||||
**Raimond Tunnel**<br/>
|
||||
Project management, visual design.
|
||||
**Madis Vasser**<br/>
|
||||
Voice acting for the Ufo and Professor characters
|
||||
|
||||
Developed in the [Computer Graphcis and Virtual Reality Study Lab](https://cgvr.cs.ut.ee/) of the [Institute of Computer Science, University of Tartu](https://cs.ut.ee).
|
||||
**Ulrich Norbisrath**<br/>
|
||||
Voice acting for the Robert character
|
||||
|
||||
### Used Attributions
|
||||
**Ranno Samuel Adson**<br/>
|
||||
Technical help and tips for DeltaVR
|
||||
|
||||
| Description | License | Source | Author |
|
||||
|-----------------------------------------------------|----------------------------------------------|---------------------------------------------------------------------------------------------|------------------|
|
||||
| Server rack model | Royalty Free, No AI License | [Link](https://www.cgtrader.com/free-3d-models/electronics/computer/simple-server-model) | anymelok |
|
||||
| Robot movement sound | Creative Commons 0 | [Link](https://freesound.org/people/Brazilio123/sounds/661435/) | Brazilio123 |
|
||||
| Spacewalk UFO sound | Attribution NonCommercial 4.0 | [Link](https://freesound.org/people/Speedenza/sounds/209366/) | Speedenza |
|
||||
| Keyboard icons | Creative Commons Attribution-NoDerivs 3.0 | [Link](https://icons8.com/) | icons8 |
|
||||
(These credits are specifically for the work of this fork. Credits for the main DeltaVR project are shown in the main project's README.)
|
||||
|
||||
-----
|
||||
|
||||
DeltaVR was moved to this repository in 2025. The previous repository is available here: [[https://gitlab.com/UT-CGVR/deltavr]]
|
||||
Developed in the [Computer Graphics and Virtual Reality Study Lab](https://cgvr.cs.ut.ee/) of the [Institute of Computer Science, University of Tartu](https://cs.ut.ee).
|
||||
|
||||
-----
|
||||
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"isContinuousLocomotion": true,
|
||||
"continuousLocomotionSpeed": 3.0,
|
||||
"volumeMaster": 0.5,
|
||||
"volumeMaster": 0.4399948716163635,
|
||||
"volumeAmbient": 0.1889490932226181,
|
||||
"volumeMusic": 0.5,
|
||||
"volumeSFX": 0.5,
|
||||
|
||||
+1
-1
@@ -1 +1 @@
|
||||
{"HighScore":416.0}
|
||||
{"HighScore":212.0}
|
||||
+36
-16
@@ -1,44 +1,64 @@
|
||||
{
|
||||
"entries": [
|
||||
{
|
||||
"name": "Perfoon",
|
||||
"score": 416.0
|
||||
"name": "karlkolm",
|
||||
"score": 241.0
|
||||
},
|
||||
{
|
||||
"name": "jass",
|
||||
"score": 212.0
|
||||
},
|
||||
{
|
||||
"name": "andreas",
|
||||
"score": 207.0
|
||||
},
|
||||
{
|
||||
"name": "karlkaks",
|
||||
"score": 198.0
|
||||
},
|
||||
{
|
||||
"name": "rikkss",
|
||||
"score": 195.0
|
||||
},
|
||||
{
|
||||
"name": "noob",
|
||||
"score": 195.0
|
||||
},
|
||||
{
|
||||
"name": "jjkujkkg",
|
||||
"score": 194.0
|
||||
},
|
||||
{
|
||||
"name": "andeas",
|
||||
"score": 161.0
|
||||
"name": "kuues",
|
||||
"score": 186.0
|
||||
},
|
||||
{
|
||||
"name": "h",
|
||||
"score": 138.0
|
||||
"name": "gert",
|
||||
"score": 184.0
|
||||
},
|
||||
{
|
||||
"name": "raimps",
|
||||
"score": 115.0
|
||||
"name": "karl",
|
||||
"score": 183.0
|
||||
},
|
||||
{
|
||||
"name": "andreas",
|
||||
"score": 96.0
|
||||
"name": "f",
|
||||
"score": 181.0
|
||||
},
|
||||
{
|
||||
"name": "k",
|
||||
"score": 58.0
|
||||
"name": "kosta",
|
||||
"score": 180.0
|
||||
},
|
||||
{
|
||||
"name": "kr",
|
||||
"score": 53.0
|
||||
"name": "gg",
|
||||
"score": 179.0
|
||||
},
|
||||
{
|
||||
"name": "krr",
|
||||
"score": 34.0
|
||||
"name": "gert",
|
||||
"score": 164.0
|
||||
},
|
||||
{
|
||||
"name": "rikkss",
|
||||
"score": 163.0
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user