Compare commits
79 Commits
SamWorkset
...
f9b2084876
| Author | SHA1 | Date | |
|---|---|---|---|
| f9b2084876 | |||
| 53c6b04d23 | |||
| 91e44c5dae | |||
| 216e2660df | |||
| 57222f0bb0 | |||
| 768ed39abe | |||
| 89b9b5bd7a | |||
| 901334b6bf | |||
| 1885b1fbe8 | |||
| f81bc2f7fd | |||
| a4a6535779 | |||
| 14c85c83a7 | |||
| ca0a7dcc21 | |||
| c620b9000d | |||
| 4ee6dbb92d | |||
| 36d6ff6d9b | |||
| 31145f9735 | |||
| a8bec4f5ff | |||
| 13c1e8a0f6 | |||
| 24543cce38 | |||
| 9af96fed99 | |||
| ac87f2f8ef | |||
| 856ff3ca40 | |||
| 693b3a572e | |||
| 8977957054 | |||
| b563be1158 | |||
| 616532e69c | |||
| 450efe675a | |||
| cce7492556 | |||
| e197206d0a | |||
| dc7aa3b9b9 | |||
| 54d44afcec | |||
| 15c2e62e92 | |||
| c4fafd1dd3 | |||
| 1c03f1773b | |||
| ef3bc5da39 | |||
| ed66253b06 | |||
| 6b8c3b6fbb | |||
| b9448fb4c7 | |||
| 4b1d8ea5bd | |||
| 6a76fa038f | |||
| 8af4eff8c7 | |||
| b38461fc52 | |||
| e5baba75cf | |||
| b9515d50d0 | |||
| e06b0206c8 | |||
| f5ba95849e | |||
| c5b90be63f | |||
| 5a41559b88 | |||
| 5ab753f4b5 | |||
| dab664b62a | |||
| 9d389a3296 | |||
| d269226b4b | |||
| 47d505a1ba | |||
| e7ad8e6fd4 | |||
| 36e3b95645 | |||
| b012ae17b2 | |||
| b9ccfb1c3a | |||
| cdd6a2e96d | |||
| 9af005b651 | |||
| e9b013a904 | |||
| 262a67293e | |||
| ab2406c367 | |||
| 0f409ddb08 | |||
| 4aa139be24 | |||
| b4c665abe4 | |||
|
|
b84e1b7837 | ||
|
|
e9fe4cb559 | ||
| d2673f52e1 | |||
| e6045f7775 | |||
| e6ddcc7390 | |||
| 75cfdd7a48 | |||
|
|
071c1db4f4 | ||
|
|
9bd8601edb | ||
|
|
ee0b46f451 | ||
|
|
2bf7f50802 | ||
|
|
e9404b9b51 | ||
|
|
28819a12a6 | ||
|
|
7f4c83d397 |
61
Assets/Fish-Networking-Discovery-main/.gitignore
vendored
61
Assets/Fish-Networking-Discovery-main/.gitignore
vendored
@@ -1,61 +0,0 @@
|
||||
# This .gitignore file should be placed at the root of your Unity project directory
|
||||
#
|
||||
# Get latest from https://github.com/github/gitignore/blob/master/Unity.gitignore
|
||||
#
|
||||
/[Ll]ibrary/
|
||||
/[Tt]emp/
|
||||
/[Oo]bj/
|
||||
/[Bb]uild/
|
||||
/[Bb]uilds/
|
||||
/[Ll]ogs/
|
||||
/[Mm]emoryCaptures/
|
||||
|
||||
# Asset meta data should only be ignored when the corresponding asset is also ignored
|
||||
!/[Aa]ssets/**/*.meta
|
||||
|
||||
# Uncomment this line if you wish to ignore the asset store tools plugin
|
||||
# /[Aa]ssets/AssetStoreTools*
|
||||
|
||||
# Autogenerated Jetbrains Rider plugin
|
||||
[Aa]ssets/Plugins/Editor/JetBrains*
|
||||
|
||||
# Visual Studio cache directory
|
||||
.vs/
|
||||
|
||||
# Gradle cache directory
|
||||
.gradle/
|
||||
|
||||
# Autogenerated VS/MD/Consulo solution and project files
|
||||
ExportedObj/
|
||||
.consulo/
|
||||
*.csproj
|
||||
*.unityproj
|
||||
*.sln
|
||||
*.suo
|
||||
*.tmp
|
||||
*.user
|
||||
*.userprefs
|
||||
*.pidb
|
||||
*.booproj
|
||||
*.svd
|
||||
*.pdb
|
||||
*.mdb
|
||||
*.opendb
|
||||
*.VC.db
|
||||
|
||||
# Unity3D generated meta files
|
||||
*.pidb.meta
|
||||
*.pdb.meta
|
||||
*.mdb.meta
|
||||
*.meta
|
||||
|
||||
# Unity3D generated file on crash reports
|
||||
sysinfo.txt
|
||||
|
||||
# Builds
|
||||
*.apk
|
||||
*.unitypackage
|
||||
|
||||
# Crashlytics generated file
|
||||
crashlytics-build.properties
|
||||
|
||||
7
Assets/Fish-Networking-Discovery-main/LICENSE.meta
Normal file
7
Assets/Fish-Networking-Discovery-main/LICENSE.meta
Normal file
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4939e812d2cae8a448666fc57569da59
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e8cb728e8e288c947a1e0870382445bd
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -81,6 +81,7 @@ public class NetworkMenuUI : MonoBehaviour
|
||||
}
|
||||
private void OnStartPlaying()
|
||||
{
|
||||
Debug.Log("START PRESSED");
|
||||
statusText.text = "Starting host...";
|
||||
StartCoroutine(HostAndSearchRoutine());
|
||||
}
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 49f99c1c0ae8c774eb6bdcbc83c2cfef
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e928fc8fc03e26a46ad7f8520d468e41
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
7
Assets/Fish-Networking-Discovery-main/README.md.meta
Normal file
7
Assets/Fish-Networking-Discovery-main/README.md.meta
Normal file
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8d77d91c1b4e73044b53ddce11333fea
|
||||
TextScriptImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 474f76f05fac11a4e8e1ed68314fba90
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
23
Assets/FishNet.Config.XML
Normal file
23
Assets/FishNet.Config.XML
Normal file
@@ -0,0 +1,23 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<ConfigurationData xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<Loaded>true</Loaded>
|
||||
<PrefabGenerator>
|
||||
<Enabled>true</Enabled>
|
||||
<LogToConsole>true</LogToConsole>
|
||||
<FullRebuild>false</FullRebuild>
|
||||
<SaveChanges>true</SaveChanges>
|
||||
<DefaultPrefabObjectsPath>Assets\DefaultPrefabObjects.asset</DefaultPrefabObjectsPath>
|
||||
<SearchScope>1</SearchScope>
|
||||
<ExcludedFolders />
|
||||
<IncludedFolders>
|
||||
<string>Assets\_PROJECT</string>
|
||||
</IncludedFolders>
|
||||
</PrefabGenerator>
|
||||
<CodeStripping>
|
||||
<IsBuilding>false</IsBuilding>
|
||||
<IsDevelopment>false</IsDevelopment>
|
||||
<IsHeadless>false</IsHeadless>
|
||||
<StripReleaseBuilds>false</StripReleaseBuilds>
|
||||
<StrippingType>0</StrippingType>
|
||||
</CodeStripping>
|
||||
</ConfigurationData>
|
||||
7
Assets/FishNet.Config.XML.meta
Normal file
7
Assets/FishNet.Config.XML.meta
Normal file
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: fdec8b985bdf2364cac858b4136da794
|
||||
TextScriptImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -319,9 +319,12 @@ namespace FishNet.Editing.PrefabCollectionGenerator
|
||||
{
|
||||
foreach (string path in GetPrefabFiles("Assets", excludedPaths, true))
|
||||
{
|
||||
|
||||
NetworkObject nob = AssetDatabase.LoadAssetAtPath<NetworkObject>(path);
|
||||
if (nob != null)
|
||||
foundNobs.Add(nob);
|
||||
else
|
||||
UnityEngine.Debug.LogWarning("Last loading error with: " + path);
|
||||
}
|
||||
}
|
||||
//Specific folders.
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@@ -7,7 +7,7 @@ TextureImporter:
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 1
|
||||
sRGBTexture: 1
|
||||
sRGBTexture: 0
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
@@ -54,7 +54,7 @@ TextureImporter:
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 0
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 0
|
||||
textureType: 1
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using UnityEngine.InputSystem;
|
||||
@@ -44,6 +45,26 @@ namespace _PROJECT.NewHandPresence
|
||||
|
||||
private GameObject _billboard;
|
||||
|
||||
public enum TutorialInfoKey
|
||||
{
|
||||
Initialized,
|
||||
LeftHintController,
|
||||
RightHintController,
|
||||
LeftSmartHandPresence,
|
||||
RightSmartHandPresence
|
||||
}
|
||||
protected Dictionary<TutorialInfoKey, bool> initializationInfoStatus = new Dictionary<TutorialInfoKey, bool>();
|
||||
protected Coroutine initializationInfoCoroutine;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
initializationInfoStatus.Add(TutorialInfoKey.Initialized, false);
|
||||
initializationInfoStatus.Add(TutorialInfoKey.LeftHintController, false);
|
||||
initializationInfoStatus.Add(TutorialInfoKey.RightHintController, false);
|
||||
initializationInfoStatus.Add(TutorialInfoKey.LeftSmartHandPresence, false);
|
||||
initializationInfoStatus.Add(TutorialInfoKey.RightSmartHandPresence, false);
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
if (_state == TutorialState.Initializing)
|
||||
@@ -177,29 +198,33 @@ namespace _PROJECT.NewHandPresence
|
||||
private void TryInitialize()
|
||||
{
|
||||
if (!CanInitialize()) return;
|
||||
if (null == initializationInfoCoroutine)
|
||||
{
|
||||
initializationInfoCoroutine = StartCoroutine(InitializationInfoCoroutine());
|
||||
}
|
||||
|
||||
_camera = Camera.main;
|
||||
|
||||
Debug.Log("Initializing tutorial");
|
||||
//Debug.Log("Initializing tutorial");
|
||||
|
||||
_leftHintController = leftHand.GetComponentInChildren<XRControllerHintController>();
|
||||
_rightHintController = rightHand.GetComponentInChildren<XRControllerHintController>();
|
||||
|
||||
Debug.Log($"Left hint controller: {_leftHintController}");
|
||||
Debug.Log($"Right hint controller: {_rightHintController}");
|
||||
initializationInfoStatus[TutorialInfoKey.LeftHintController] = null != _leftHintController;
|
||||
initializationInfoStatus[TutorialInfoKey.RightHintController] = null != _rightHintController;
|
||||
|
||||
_leftSmartHandPresence = leftHand.GetComponentInChildren<SmartHandPresence>();
|
||||
_rightSmartHandPresence = rightHand.GetComponentInChildren<SmartHandPresence>();
|
||||
|
||||
Debug.Log($"Left smart hand presence: {_leftSmartHandPresence}");
|
||||
Debug.Log($"Right smart hand presence: {_rightSmartHandPresence}");
|
||||
initializationInfoStatus[TutorialInfoKey.LeftSmartHandPresence] = null != _leftSmartHandPresence;
|
||||
initializationInfoStatus[TutorialInfoKey.RightSmartHandPresence] = null != _rightSmartHandPresence;
|
||||
|
||||
if (_leftHintController == null ||
|
||||
_rightHintController == null ||
|
||||
_leftSmartHandPresence == null ||
|
||||
_rightSmartHandPresence == null)
|
||||
{
|
||||
Debug.Log("Hint controller or smart hand presence is null");
|
||||
//Debug.Log("Hint controller or smart hand presence is null");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -216,6 +241,7 @@ namespace _PROJECT.NewHandPresence
|
||||
|
||||
UpdateState(_state.Next());
|
||||
Debug.Log("Tutorial initialized");
|
||||
StopCoroutine(initializationInfoCoroutine);
|
||||
}
|
||||
|
||||
private void OnGripPerformed(SelectEnterEventArgs arg0)
|
||||
@@ -307,5 +333,35 @@ namespace _PROJECT.NewHandPresence
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
IEnumerator InitializationInfoCoroutine()
|
||||
{
|
||||
string CombineMessage(TutorialInfoKey key, object value, string prefix)
|
||||
{
|
||||
bool isAvailable = initializationInfoStatus.GetValueOrDefault(key);
|
||||
|
||||
return prefix + ": " + (isAvailable ? value.ToString() : "NULL") + "\r\n";
|
||||
}
|
||||
|
||||
bool isInitialized = initializationInfoStatus.GetValueOrDefault(TutorialInfoKey.Initialized);
|
||||
while (!isInitialized)
|
||||
{
|
||||
isInitialized = initializationInfoStatus.GetValueOrDefault(TutorialInfoKey.Initialized);
|
||||
|
||||
string infoMessage = "Tutorial not yet initialized!" + "\r\n";
|
||||
infoMessage += "(click me for more info)" + "\r\n";
|
||||
infoMessage += "Hint controllers" + "\r\n";
|
||||
infoMessage += CombineMessage(TutorialInfoKey.LeftHintController, _leftHintController, "Left");
|
||||
infoMessage += CombineMessage(TutorialInfoKey.RightHintController, _rightHintController, "Right");
|
||||
infoMessage += "Smart hand presence" + "\r\n";
|
||||
infoMessage += CombineMessage(TutorialInfoKey.LeftSmartHandPresence, _leftSmartHandPresence, "Left");
|
||||
infoMessage += CombineMessage(TutorialInfoKey.RightSmartHandPresence, _rightSmartHandPresence, "Right");
|
||||
Debug.Log(infoMessage);
|
||||
|
||||
yield return new WaitForSeconds(7);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,10 +1,22 @@
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
public class PlayAnimationOnTrigger : MonoBehaviour
|
||||
{
|
||||
[SerializeField] public Animator animator; // Reference to the Animator component
|
||||
[SerializeField] public string animationName = "YourAnimation"; // Name of the animation to play
|
||||
public enum KnownAnimations
|
||||
{
|
||||
UFOFlight1
|
||||
}
|
||||
|
||||
protected Dictionary<KnownAnimations, string> animationNames = new Dictionary<KnownAnimations, string>();
|
||||
|
||||
[SerializeField] public Animator animator; // Reference to the Animator component
|
||||
[SerializeField] public KnownAnimations animationName = KnownAnimations.UFOFlight1; // Name of the animation to play
|
||||
|
||||
protected void Awake()
|
||||
{
|
||||
animationNames[KnownAnimations.UFOFlight1] = "UFO group flight 1";
|
||||
}
|
||||
|
||||
private void OnTriggerEnter(Collider other)
|
||||
{
|
||||
@@ -15,15 +27,16 @@ public class PlayAnimationOnTrigger : MonoBehaviour
|
||||
return;
|
||||
}
|
||||
|
||||
string animationNameString = animationNames[animationName];
|
||||
|
||||
// Check if the animation is already playing
|
||||
if (animator.GetCurrentAnimatorStateInfo(0).IsName(animationName) && animator.GetCurrentAnimatorStateInfo(0).normalizedTime < 1)
|
||||
if (animator.GetCurrentAnimatorStateInfo(0).IsName(animationNameString) && animator.GetCurrentAnimatorStateInfo(0).normalizedTime < 1)
|
||||
{
|
||||
Debug.Log("Animation is already playing.");
|
||||
return;
|
||||
}
|
||||
|
||||
// Play the animation
|
||||
animator.Play(animationName, 0, 0f);
|
||||
Debug.Log("Playing animation: " + animationName);
|
||||
animator.Play(animationNameString, 0, 0f);
|
||||
Debug.Log("Playing animation: " + animationNameString);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,7 +29,15 @@ namespace _PROJECT.Multiplayer.NewBow
|
||||
if (_notch == null)
|
||||
Debug.LogError("Notch not found");
|
||||
|
||||
CreateArrowServer();
|
||||
//CreateArrowServer();
|
||||
}
|
||||
|
||||
public override void OnOwnershipServer(NetworkConnection prevOwner)
|
||||
{
|
||||
base.OnOwnershipServer(prevOwner);
|
||||
|
||||
if (Owner.IsValid)
|
||||
CreateArrowServer();
|
||||
}
|
||||
|
||||
public override void OnStartClient()
|
||||
|
||||
40
Assets/_PROJECT/Multiplayer/CustomNetworkManager.cs
Normal file
40
Assets/_PROJECT/Multiplayer/CustomNetworkManager.cs
Normal file
@@ -0,0 +1,40 @@
|
||||
using FishNet.Component.Spawning;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using Valve.Newtonsoft.Json.Converters;
|
||||
using static UnityEditor.ShaderGraph.Internal.KeywordDependentCollection;
|
||||
|
||||
public class CustomNetworkManager : MonoBehaviour
|
||||
{
|
||||
|
||||
public static CustomNetworkManager instance = null;
|
||||
|
||||
public PlayerSpawner playerSpawner;
|
||||
|
||||
void Awake()
|
||||
{
|
||||
if (!instance) { instance = this; }
|
||||
else if (instance != this) { Destroy(gameObject); }
|
||||
|
||||
DontDestroyOnLoad(gameObject);
|
||||
}
|
||||
|
||||
private void Start()
|
||||
{
|
||||
if (playerSpawner.Spawns.Length == 0) {
|
||||
Debug.LogWarning("Player spawns undefined. Assign a player spawn to PlayerSpawner!");
|
||||
} else {
|
||||
bool hasSpawn = false;
|
||||
foreach (Transform spawn in playerSpawner.Spawns)
|
||||
{
|
||||
hasSpawn |= spawn != null;
|
||||
}
|
||||
if (!hasSpawn)
|
||||
{
|
||||
Debug.LogWarning("Player spawns undefined. Assign a player spawn to PlayerSpawner!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
11
Assets/_PROJECT/Multiplayer/CustomNetworkManager.cs.meta
Normal file
11
Assets/_PROJECT/Multiplayer/CustomNetworkManager.cs.meta
Normal file
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 067fc70e6bd1a024ba644f52017165fd
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
2212
Assets/_PROJECT/Multiplayer/Networking.prefab
Normal file
2212
Assets/_PROJECT/Multiplayer/Networking.prefab
Normal file
File diff suppressed because it is too large
Load Diff
7
Assets/_PROJECT/Multiplayer/Networking.prefab.meta
Normal file
7
Assets/_PROJECT/Multiplayer/Networking.prefab.meta
Normal file
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 67f163b4eb8c8df43b48aab810b8a0a8
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Binary file not shown.
BIN
Doc/Readme-Footer.png
LFS
Normal file
BIN
Doc/Readme-Footer.png
LFS
Normal file
Binary file not shown.
BIN
Doc/Readme-Header.png
LFS
Normal file
BIN
Doc/Readme-Header.png
LFS
Normal file
Binary file not shown.
BIN
Doc/ReadmeIllustrations.afdesign
Normal file
BIN
Doc/ReadmeIllustrations.afdesign
Normal file
Binary file not shown.
BIN
Doc/clips/Bolt-Car-Network-Problem-Clip.gif
LFS
Normal file
BIN
Doc/clips/Bolt-Car-Network-Problem-Clip.gif
LFS
Normal file
Binary file not shown.
BIN
Doc/clips/Bolt-Car-Network-Results-Clip.gif
LFS
Normal file
BIN
Doc/clips/Bolt-Car-Network-Results-Clip.gif
LFS
Normal file
Binary file not shown.
BIN
Doc/clips/Bolt-Self-Driving-Car-Clip.gif
LFS
Normal file
BIN
Doc/clips/Bolt-Self-Driving-Car-Clip.gif
LFS
Normal file
Binary file not shown.
BIN
Doc/clips/Camera-Collider-Clip.gif
LFS
Normal file
BIN
Doc/clips/Camera-Collider-Clip.gif
LFS
Normal file
Binary file not shown.
BIN
Doc/clips/Door-Collision-Solution-Clip.gif
LFS
Normal file
BIN
Doc/clips/Door-Collision-Solution-Clip.gif
LFS
Normal file
Binary file not shown.
BIN
Doc/clips/Door-Grabbing-Clip.gif
LFS
Normal file
BIN
Doc/clips/Door-Grabbing-Clip.gif
LFS
Normal file
Binary file not shown.
BIN
Doc/clips/Doors-Issue-Clip.gif
LFS
Normal file
BIN
Doc/clips/Doors-Issue-Clip.gif
LFS
Normal file
Binary file not shown.
BIN
Doc/clips/Elevator-Move-Between-Floors-Clip.gif
LFS
Normal file
BIN
Doc/clips/Elevator-Move-Between-Floors-Clip.gif
LFS
Normal file
Binary file not shown.
BIN
Doc/clips/Elevator-Open-Close-Doors-Clip.gif
LFS
Normal file
BIN
Doc/clips/Elevator-Open-Close-Doors-Clip.gif
LFS
Normal file
Binary file not shown.
BIN
Doc/clips/Elevator-network-problem-Clip.gif
LFS
Normal file
BIN
Doc/clips/Elevator-network-problem-Clip.gif
LFS
Normal file
Binary file not shown.
BIN
Doc/clips/Elevator-network-results-Clip.gif
LFS
Normal file
BIN
Doc/clips/Elevator-network-results-Clip.gif
LFS
Normal file
Binary file not shown.
BIN
Doc/clips/Explore-Clip.gif
LFS
Normal file
BIN
Doc/clips/Explore-Clip.gif
LFS
Normal file
Binary file not shown.
BIN
Doc/clips/Ghost-Hand-Clip.gif
LFS
Normal file
BIN
Doc/clips/Ghost-Hand-Clip.gif
LFS
Normal file
Binary file not shown.
BIN
Doc/clips/Hand-Collider-Prototype-Clip.gif
LFS
Normal file
BIN
Doc/clips/Hand-Collider-Prototype-Clip.gif
LFS
Normal file
Binary file not shown.
BIN
Doc/clips/Interactive-Map-Clip.gif
LFS
Normal file
BIN
Doc/clips/Interactive-Map-Clip.gif
LFS
Normal file
Binary file not shown.
BIN
Doc/clips/Multiplayer-join-Clip.gif
LFS
Normal file
BIN
Doc/clips/Multiplayer-join-Clip.gif
LFS
Normal file
Binary file not shown.
BIN
Doc/clips/Old-menu.gif
LFS
Normal file
BIN
Doc/clips/Old-menu.gif
LFS
Normal file
Binary file not shown.
BIN
Doc/clips/Open-Elevator-Doors-Same-Floor-Clip.gif
LFS
Normal file
BIN
Doc/clips/Open-Elevator-Doors-Same-Floor-Clip.gif
LFS
Normal file
Binary file not shown.
BIN
Doc/clips/Player-Collide-Offset-Clip.gif
LFS
Normal file
BIN
Doc/clips/Player-Collide-Offset-Clip.gif
LFS
Normal file
Binary file not shown.
BIN
Doc/clips/Player-Hand-Collision-Complete-Clip.gif
LFS
Normal file
BIN
Doc/clips/Player-Hand-Collision-Complete-Clip.gif
LFS
Normal file
Binary file not shown.
BIN
Doc/clips/Player-Hand-No-Collision-Clip.gif
LFS
Normal file
BIN
Doc/clips/Player-Hand-No-Collision-Clip.gif
LFS
Normal file
Binary file not shown.
BIN
Doc/clips/Quit-Clip.gif
LFS
Normal file
BIN
Doc/clips/Quit-Clip.gif
LFS
Normal file
Binary file not shown.
BIN
Doc/clips/Server-Room-Clip.gif
LFS
Normal file
BIN
Doc/clips/Server-Room-Clip.gif
LFS
Normal file
Binary file not shown.
BIN
Doc/clips/Singleplayer-Join-Clip.gif
LFS
Normal file
BIN
Doc/clips/Singleplayer-Join-Clip.gif
LFS
Normal file
Binary file not shown.
BIN
Doc/clips/Skywalk-Clip.gif
LFS
Normal file
BIN
Doc/clips/Skywalk-Clip.gif
LFS
Normal file
Binary file not shown.
BIN
Doc/clips/Summon-Elevator-Clip.gif
LFS
Normal file
BIN
Doc/clips/Summon-Elevator-Clip.gif
LFS
Normal file
Binary file not shown.
BIN
Doc/clips/UFO-Bow-Game-Clip.gif
LFS
Normal file
BIN
Doc/clips/UFO-Bow-Game-Clip.gif
LFS
Normal file
Binary file not shown.
BIN
Doc/clips/VR-Elevator-Example-Clip.gif
LFS
Normal file
BIN
Doc/clips/VR-Elevator-Example-Clip.gif
LFS
Normal file
Binary file not shown.
BIN
Doc/clips/Whiteboard-Clip.gif
LFS
Normal file
BIN
Doc/clips/Whiteboard-Clip.gif
LFS
Normal file
Binary file not shown.
BIN
Doc/designs/Doorknob-Rework-Blender.png
LFS
Normal file
BIN
Doc/designs/Doorknob-Rework-Blender.png
LFS
Normal file
Binary file not shown.
BIN
Doc/designs/Doorknob-Rework-Unity.png
LFS
Normal file
BIN
Doc/designs/Doorknob-Rework-Unity.png
LFS
Normal file
Binary file not shown.
BIN
Doc/designs/Elevator-buttons-inside.png
LFS
Normal file
BIN
Doc/designs/Elevator-buttons-inside.png
LFS
Normal file
Binary file not shown.
BIN
Doc/designs/Icons.afdesign
Normal file
BIN
Doc/designs/Icons.afdesign
Normal file
Binary file not shown.
BIN
Doc/designs/Map.afdesign
Normal file
BIN
Doc/designs/Map.afdesign
Normal file
Binary file not shown.
BIN
Doc/designs/Model-Collider-Rework-Concept.png
LFS
Normal file
BIN
Doc/designs/Model-Collider-Rework-Concept.png
LFS
Normal file
Binary file not shown.
BIN
Doc/designs/Moder-Collider-Rework-Results.png
LFS
Normal file
BIN
Doc/designs/Moder-Collider-Rework-Results.png
LFS
Normal file
Binary file not shown.
BIN
Doc/designs/Network-Player-mirror.png
LFS
Normal file
BIN
Doc/designs/Network-Player-mirror.png
LFS
Normal file
Binary file not shown.
BIN
Doc/designs/Old-VR-Doorknob.png
LFS
Normal file
BIN
Doc/designs/Old-VR-Doorknob.png
LFS
Normal file
Binary file not shown.
BIN
Doc/designs/Original-elevator-state-diagram.png
LFS
Normal file
BIN
Doc/designs/Original-elevator-state-diagram.png
LFS
Normal file
Binary file not shown.
BIN
Doc/designs/Player-Hand-Colliders.png
LFS
Normal file
BIN
Doc/designs/Player-Hand-Colliders.png
LFS
Normal file
Binary file not shown.
BIN
Doc/designs/Real-Doorknob.jpg
LFS
Normal file
BIN
Doc/designs/Real-Doorknob.jpg
LFS
Normal file
Binary file not shown.
BIN
Doc/designs/Two-Elevators.png
LFS
Normal file
BIN
Doc/designs/Two-Elevators.png
LFS
Normal file
Binary file not shown.
BIN
Doc/posters/MainPoster-2025.afdesign
Normal file
BIN
Doc/posters/MainPoster-2025.afdesign
Normal file
Binary file not shown.
BIN
Doc/posters/MainPoster-2025.pdf
Normal file
BIN
Doc/posters/MainPoster-2025.pdf
Normal file
Binary file not shown.
87
README.md
87
README.md
@@ -1,29 +1,86 @@
|
||||
# DeltaVR
|
||||

|
||||
|
||||
DeltaVR is a virtual reality experience set in the Delta Centre of the University of Tartu. It was designed and implemented in a over three theses. The proiect used the Delta Building Visualization project as a basis for the building and built upon it, adding missing
|
||||
details and improving the performance. DeltaVR has multiplayer support, which allows players to explore the building together in PCVR, Quest 2 and non-VR versions.
|
||||
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.
|
||||
|
||||
## Gameplay Sample Footage (DeltaVR 2021)
|
||||
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.
|
||||
|
||||
https://youtu.be/AoRN4eluiWY
|
||||
|
||||
## History
|
||||
## Features
|
||||
|
||||
2023 version:
|
||||
### Exploration
|
||||
|
||||
https://comserv.cs.ut.ee/ati_thesis/datasheet.php?id=77065&language=en
|
||||
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.
|
||||
|
||||
(See Extras for build)
|
||||

|
||||
|
||||
2022 version:
|
||||
### UFO Bow Game
|
||||
|
||||
https://comserv.cs.ut.ee/ati_thesis/datasheet.php?id=74390
|
||||
At the terrace on the second floor, Delta explorers can defend the building from UFO-s using a bow and **achieve high scores**.
|
||||
|
||||
https://gitlab.com/Joonasp1/deltavr-multiplayer-builds
|
||||

|
||||
|
||||
2021 version:
|
||||
### Bolt Self-Driving Car
|
||||
|
||||
https://comserv.cs.ut.ee/ati_thesis/datasheet.php?id=71682
|
||||
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.
|
||||
|
||||
https://drive.google.com/file/d/1n19_Wa69vCX6s6zKYoSYKirpHcfJHqaM/view?usp=sharing
|
||||

|
||||
|
||||
### Space Walk
|
||||
|
||||
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.
|
||||
|
||||

|
||||
|
||||
### Server Room
|
||||
|
||||
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.
|
||||
|
||||

|
||||
|
||||
### Interactive Map
|
||||
|
||||
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.
|
||||
|
||||

|
||||
|
||||
### 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)).
|
||||
|
||||
**Timur Nizamov**<br/>
|
||||
Technical sound design.
|
||||
|
||||
**Raimond Tunnel**<br/>
|
||||
Project management, visual design.
|
||||
|
||||
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).
|
||||
|
||||
### Used Attributions
|
||||
|
||||
| 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 |
|
||||
|
||||
-----
|
||||
|
||||
DeltaVR was moved to this repository in 2025. The previous repository is available here: [[https://gitlab.com/UT-CGVR/deltavr]]
|
||||
|
||||
-----
|
||||
|
||||

|
||||
|
||||
Reference in New Issue
Block a user