81 Commits

Author SHA1 Message Date
74c2ca6a98 Managers folder meta file. 2026-02-02 22:45:06 +02:00
f3d0f206af Config manager. Just creating, reading and writing the config file for now. 2026-02-02 22:44:17 +02:00
f9b2084876 Removed the nested .gitignore file that ignored the .meta files inside this directory. This should fix the missing script errors. 2026-02-02 21:30:45 +02:00
53c6b04d23 Main scene changes. The scene tree is now more readable. Removed the two previous networking prefabs and added the new one. The only thing scene-dependent on it is the player's spawn point. Maybe also the object pool, however it seems to create one itself. So, the object pool in the scene might also be deleted perhaps. 2026-02-02 20:36:34 +02:00
91e44c5dae Created a single prefab to incorporate all the networking stuff. This is the only networking prefab required in the scene. We will see if git breaks it. 2026-02-02 20:35:25 +02:00
216e2660df Hide FMOD setup wizard by default. 2026-02-02 19:54:17 +02:00
57222f0bb0 The arrow server can only be created after the bow server's ownership is done. Should be tested. 2026-02-02 19:36:00 +02:00
768ed39abe Animation player refactoring. Also, if the animation is already playing, do not log. Might be dangerous, but was a bit spam for now. 2026-02-02 19:35:01 +02:00
89b9b5bd7a Scan only the project assets, not the entire folder, to build the Asset Database. 2026-02-02 19:32:32 +02:00
901334b6bf Fix for the Lexus normal map. 2026-02-02 19:30:25 +02:00
1885b1fbe8 Added some debug logs. 2026-02-02 19:29:49 +02:00
f81bc2f7fd The last Interaction Layer name must be "Teleport" not "Player Only". 2026-02-02 19:28:40 +02:00
a4a6535779 Reworked the TutorialController so that it will show the info about trying to initialize once per some time interval. Not flood the entire log. 2026-02-02 19:26:28 +02:00
14c85c83a7 forgot to assign a variable 2026-01-21 19:35:54 +02:00
ca0a7dcc21 fixing merge issue 2026-01-21 19:33:40 +02:00
c620b9000d forgot to build the zip 2026-01-21 19:30:17 +02:00
4ee6dbb92d Final changes 2026-01-21 19:29:02 +02:00
36d6ff6d9b Merging into master 2026-01-21 19:21:36 +02:00
31145f9735 Update README.md 2026-01-13 14:46:41 +00:00
a8bec4f5ff Update README.md 2026-01-03 14:50:22 +00:00
13c1e8a0f6 Changes in sound attributions 2025-12-27 12:17:15 +00:00
24543cce38 Upload files to "Doc/designs" 2025-12-16 13:59:03 +00:00
9af96fed99 Upload files to "Doc/clips" 2025-12-16 13:45:02 +00:00
ac87f2f8ef Update README.md
Just a small reference change
2025-12-07 22:21:10 +00:00
856ff3ca40 Update README.md
Adding myself into credits.
2025-12-07 17:10:52 +00:00
693b3a572e Upload files to "Doc/designs" 2025-12-02 13:37:36 +00:00
8977957054 Upload files to "Doc/clips" 2025-12-02 13:36:51 +00:00
b563be1158 Upload files to "Doc/clips" 2025-11-18 14:08:38 +00:00
616532e69c Upload files to "Doc/clips" 2025-11-18 14:03:31 +00:00
450efe675a Upload files to "Doc/clips" 2025-11-18 14:00:18 +00:00
cce7492556 Upload files to "Doc/designs" 2025-11-17 19:20:02 +00:00
e197206d0a Upload files to "Doc/designs" 2025-11-17 19:07:21 +00:00
dc7aa3b9b9 Upload files to "Doc/designs" 2025-11-17 18:03:37 +00:00
54d44afcec Upload files to "Doc/designs" 2025-11-04 17:32:58 +00:00
15c2e62e92 Upload files to "Doc/clips" 2025-11-04 17:28:46 +00:00
c4fafd1dd3 Delete Doc/clips/Hand-Collider-Prototype-Clip.gif 2025-11-04 17:26:11 +00:00
1c03f1773b Upload files to "Doc/clips" 2025-11-04 17:25:57 +00:00
ef3bc5da39 Upload files to "Doc/designs" 2025-10-21 14:03:55 +00:00
ed66253b06 Upload files to "Doc/clips" 2025-10-21 13:59:00 +00:00
6b8c3b6fbb Merge pull request 'SamWorkset' (#5) from SamWorkset into master
Reviewed-on: #5
2025-10-11 13:47:30 +00:00
b9448fb4c7 Upload files to "Doc/clips" 2025-10-07 10:30:34 +00:00
4b1d8ea5bd Delete Doc/clips/Player-Collide-Offset-Clip.gif 2025-10-07 10:21:00 +00:00
6a76fa038f Upload files to "Doc/clips" 2025-10-07 10:16:24 +00:00
8af4eff8c7 Upload files to "Doc/clips" 2025-10-03 13:53:59 +00:00
b38461fc52 Delete Doc/clips/Multiplayer-join-Clip.mp4 2025-10-03 13:53:37 +00:00
e5baba75cf Delete Doc/clips/Singleplayer-Join-Clip.mp4 2025-10-03 13:53:28 +00:00
b9515d50d0 Delete Doc/clips/Quit-Clip.mp4 2025-10-03 13:53:20 +00:00
e06b0206c8 Upload files to "Doc/clips" 2025-10-03 13:36:43 +00:00
f5ba95849e Delete Doc/clips/Old menu gif.gif 2025-09-19 12:06:07 +00:00
c5b90be63f Upload files to "Doc/clips" 2025-09-19 12:05:54 +00:00
5a41559b88 Upload files to "Doc/clips"
Added the old menu gif
2025-09-19 11:57:21 +00:00
5ab753f4b5 Merge pull request 'Doing minor changes' (#4) from SamWorkset into master
Reviewed-on: #4
2025-09-19 11:51:52 +00:00
dab664b62a Update README.md 2025-09-15 17:57:21 +00:00
9d389a3296 Merge pull request 'SamWorkset' (#3) from SamWorkset into master
Reviewed-on: #3
2025-09-15 17:55:36 +00:00
d269226b4b Update README.md 2025-06-18 08:45:31 +00:00
47d505a1ba Update README.md 2025-06-17 16:26:30 +00:00
e7ad8e6fd4 Update Readme 2025-06-17 16:23:35 +00:00
36e3b95645 Replaced clips for readme 2025-06-17 15:29:34 +00:00
b012ae17b2 Added clips for readme 2025-06-11 17:26:54 +00:00
b9ccfb1c3a Update README.md 2025-05-28 10:48:13 +00:00
cdd6a2e96d Update README.md 2025-05-27 15:29:09 +00:00
9af005b651 Merge pull request 'Added options and credits tabs for the in-game UI menu. Credits tab is blank for now. Disabled smooth locomotion to address the player controller confusion issues (see my thesis). Smooth locomotion can be reactivated via the options menu.' (#2) from SamWorkset into master
Reviewed-on: #2
2025-05-27 11:20:01 +00:00
e9b013a904 Update README.md 2025-05-27 11:11:04 +00:00
262a67293e Update README.md 2025-05-27 11:10:37 +00:00
ab2406c367 Update README.md 2025-05-22 15:49:08 +00:00
0f409ddb08 Merge pull request 'SamWorkset' (#1) from SamWorkset into master
Reviewed-on: #1
2025-05-22 15:43:50 +00:00
4aa139be24 Update README.md 2025-05-22 15:35:10 +00:00
b4c665abe4 Update README.md 2025-05-22 15:32:07 +00:00
jee7
b84e1b7837 Merge branch 'master' of https://cgvrgit.ulno.net/cgvr/DeltaVR 2025-05-20 22:53:54 +03:00
jee7
e9fe4cb559 Added design files 2025-05-20 22:53:35 +03:00
d2673f52e1 Update README.md 2025-05-20 19:40:24 +00:00
e6045f7775 Update README.md 2025-05-20 19:38:43 +00:00
e6ddcc7390 Update README.md 2025-05-20 19:37:40 +00:00
75cfdd7a48 Update README.md 2025-05-20 19:34:22 +00:00
jee7
071c1db4f4 Whiteboard clip fix 2025-05-20 22:14:13 +03:00
jee7
9bd8601edb Added Doc folder. Graphical elements for the Readme.md. 2025-05-20 21:58:13 +03:00
Ranno Samuel Adson
ee0b46f451 messed up the lightmap 2024-12-27 16:49:57 +02:00
Ranno Samuel Adson
2bf7f50802 worked on ground moddelling. Doing a quicksave before doing a large model alteration. 2024-12-27 16:23:50 +02:00
Ranno Samuel Adson
e9404b9b51 worked on ground moddelling. Doing a quicksave before doing a large model alteration. 2024-12-27 16:23:25 +02:00
Ranno Samuel Adson
28819a12a6 worked on ground moddelling. Doing a quicksave before altering materials. 2024-12-27 15:24:51 +02:00
Ranno Samuel Adson
7f4c83d397 making changes to lighting. This is a backup just in case 2024-12-27 14:11:36 +02:00
79 changed files with 2861 additions and 178 deletions

View File

@@ -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

View File

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

View File

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

View File

@@ -81,6 +81,7 @@ public class NetworkMenuUI : MonoBehaviour
}
private void OnStartPlaying()
{
Debug.Log("START PRESSED");
statusText.text = "Starting host...";
StartCoroutine(HostAndSearchRoutine());
}

View File

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

View File

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

View File

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

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 474f76f05fac11a4e8e1ed68314fba90
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

23
Assets/FishNet.Config.XML Normal file
View 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>

View File

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

View File

@@ -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.

View File

@@ -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

View File

@@ -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);
}
}
}
}

View File

@@ -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);
}
}

View File

@@ -29,6 +29,14 @@ namespace _PROJECT.Multiplayer.NewBow
if (_notch == null)
Debug.LogError("Notch not found");
//CreateArrowServer();
}
public override void OnOwnershipServer(NetworkConnection prevOwner)
{
base.OnOwnershipServer(prevOwner);
if (Owner.IsValid)
CreateArrowServer();
}

View File

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

View File

@@ -0,0 +1,120 @@
using FishNet.Component.Spawning;
using SimpleJSON;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using UnityEngine;
using Valve.Newtonsoft.Json;
public class ConfigManager : MonoBehaviour
{
public static ConfigManager instance = null;
[System.Serializable]
public class Config
{
public bool isContinuousLocomotion;
public float masterVolume;
}
protected Config currentConfig = new Config();
protected string configFileName = "config.json";
protected string configFilePath;
void Awake()
{
if (!instance) { instance = this; }
else if (instance != this) { Destroy(gameObject); }
DontDestroyOnLoad(gameObject);
}
private void Start()
{
configFilePath = Directory.GetCurrentDirectory() + "\\" + configFileName;
Debug.Log(configFilePath);
currentConfig = LoadConfigFromFile();
}
public Config GetConfig()
{
return currentConfig;
}
protected void SaveConfigToFile()
{
FileStream fileStream;
if (!File.Exists(configFilePath))
{
fileStream = File.Create(configFilePath);
} else
{
fileStream = new FileStream(configFilePath, FileMode.Open, FileAccess.Write, FileShare.ReadWrite);
}
StreamWriter writer = new StreamWriter(fileStream);
writer.Write(JsonUtility.ToJson(currentConfig));
writer.Close();
fileStream.Close();
}
protected Config LoadConfigFromFile()
{
if (!File.Exists(configFilePath))
{
CreateDefaultConfigFile(); // File did not exist, try to create an empty file
if (!File.Exists(configFilePath))
{
Debug.LogError("Config file was not found and could not be created: " + configFilePath);
return null;
}
}
FileStream fileStream = new FileStream(configFilePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
StreamReader reader = new StreamReader(fileStream);
Config config = JsonUtility.FromJson<Config>(reader.ReadToEnd());
reader.Close();
fileStream.Close();
//Config config = JsonUtility.FromJson<Config>(File.ReadAllText(configFilePath));
Debug.Log(config.isContinuousLocomotion);
Debug.Log(config.masterVolume);
return config;
}
protected void CreateDefaultConfigFile()
{
currentConfig = new Config();
SaveConfigToFile();
}
// Getters and Setters
public bool GetIsContinuousLocomotion()
{
return currentConfig.isContinuousLocomotion;
}
public void SetIsContinuousLocomotion(bool isContinuousLocomotion)
{
currentConfig.isContinuousLocomotion = isContinuousLocomotion;
SaveConfigToFile();
}
public float getMasterVolume()
{
return currentConfig.masterVolume;
}
public void SetMasterVolume(float masterVolume)
{
currentConfig.masterVolume = masterVolume;
SaveConfigToFile();
}
}

View File

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

View File

@@ -0,0 +1,46 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &8320216767994874586
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 7021351325020055800}
- component: {fileID: 4493448285314379156}
m_Layer: 0
m_Name: ConfigManager
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &7021351325020055800
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8320216767994874586}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: -74.23521, y: 4.9800367, z: -13.716739}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 38
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &4493448285314379156
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8320216767994874586}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: c7622588c230b4b448152a6dfd6c0588, type: 3}
m_Name:
m_EditorClassIdentifier:

View File

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

View 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!");
}
}
}
}

View File

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

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 67f163b4eb8c8df43b48aab810b8a0a8
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -291,11 +291,6 @@ public class AudioManager : MonoBehaviour
}
public static void Pause()
{
musicEventInstance.setPaused(true);
}
//=====//
//=====//
@@ -328,8 +323,6 @@ public class AudioManager : MonoBehaviour
// Set the callback for programmer sounds
instance.setCallback(dialogueCallback);
bool managedByOcclusion = false;
// Add occlusion if available on the emitter
if (emitter != null)
{
@@ -337,17 +330,12 @@ public class AudioManager : MonoBehaviour
if (occlusion != null)
{
occlusion.InitialiseWithInstance(instance);
managedByOcclusion = true;
}
}
instance.start();
if (!managedByOcclusion)
{
instance.release();
}
}
[AOT.MonoPInvokeCallback(typeof(EVENT_CALLBACK))]
@@ -426,6 +414,11 @@ public class AudioManager : MonoBehaviour
instance.setPaused(false);
}
public static void Pause()
{
musicEventInstance.setPaused(true);
}
public static void Pause(EventInstance instance)
{
instance.setPaused(true);
@@ -437,12 +430,10 @@ public class AudioManager : MonoBehaviour
{
foreach (EventInstance eventInstance in eventInstances)
{
if (eventInstance.isValid()) {
eventInstance.stop(FMOD.Studio.STOP_MODE.IMMEDIATE);
eventInstance.release();
}
}
}
}
private void OnDestroy()

View File

@@ -75,7 +75,7 @@ public class FirstPersonOcclusion : MonoBehaviour
AudioOccluded.start();
// 4. Releasing Instance (This allows the event to self-manage its lifetime, which is fine)
//AudioOccluded.release();
AudioOccluded.release();
managedInstances.Add(AudioOccluded); // ADDED
@@ -205,17 +205,4 @@ public class FirstPersonOcclusion : MonoBehaviour
}
}
}
private void OnDestroy()
{
// Stop & release all instances when this object is destroyed
foreach (var inst in managedInstances)
{
if (inst.isValid())
{
inst.stop(FMOD.Studio.STOP_MODE.IMMEDIATE);
inst.release();
}
}
managedInstances.Clear();
}
}

BIN
Build.zip LFS

Binary file not shown.

BIN
Doc/Readme-Footer.png LFS Normal file

Binary file not shown.

BIN
Doc/Readme-Header.png LFS Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
Doc/clips/Door-Grabbing-Clip.gif LFS Normal file

Binary file not shown.

BIN
Doc/clips/Doors-Issue-Clip.gif LFS Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
Doc/clips/Explore-Clip.gif LFS Normal file

Binary file not shown.

BIN
Doc/clips/Ghost-Hand-Clip.gif LFS Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
Doc/clips/Old-menu.gif LFS Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
Doc/clips/Quit-Clip.gif LFS Normal file

Binary file not shown.

BIN
Doc/clips/Server-Room-Clip.gif LFS Normal file

Binary file not shown.

Binary file not shown.

BIN
Doc/clips/Skywalk-Clip.gif LFS Normal file

Binary file not shown.

Binary file not shown.

BIN
Doc/clips/UFO-Bow-Game-Clip.gif LFS Normal file

Binary file not shown.

Binary file not shown.

BIN
Doc/clips/Whiteboard-Clip.gif LFS Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
Doc/designs/Icons.afdesign Normal file

Binary file not shown.

BIN
Doc/designs/Map.afdesign Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
Doc/designs/Old-VR-Doorknob.png LFS Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
Doc/designs/Real-Doorknob.jpg LFS Normal file

Binary file not shown.

BIN
Doc/designs/Two-Elevators.png LFS Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -1,29 +1,86 @@
# DeltaVR
![DeltaVR](https://cgvrgit.ulno.net/cgvr/DeltaVR/media/branch/master/Doc/Readme-Header.png)
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)
![DeltaVR Exploration](https://cgvrgit.ulno.net/cgvr/DeltaVR/media/branch/master/Doc/clips/Explore-Clip.gif)
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
![DeltaVR UFO Bow Game](https://cgvrgit.ulno.net/cgvr/DeltaVR/media/branch/master/Doc/clips/UFO-Bow-Game-Clip.gif)
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
![DeltaVR Bolt Self-Driving Car](https://cgvrgit.ulno.net/cgvr/DeltaVR/media/branch/master/Doc/clips/Bolt-Self-Driving-Car-Clip.gif)
### 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.
![DeltaVR Spacewalk](https://cgvrgit.ulno.net/cgvr/DeltaVR/media/branch/master/Doc/clips/Skywalk-Clip.gif)
### 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.
![DeltaVR Server Room](https://cgvrgit.ulno.net/cgvr/DeltaVR/media/branch/master/Doc/clips/Server-Room-Clip.gif)
### 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.
![DeltaVR Interactive Map](https://cgvrgit.ulno.net/cgvr/DeltaVR/media/branch/master/Doc/clips/Interactive-Map-Clip.gif)
### 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.
![DeltaVR Whiteboard](https://cgvrgit.ulno.net/cgvr/DeltaVR/media/branch/master/Doc/clips/Whiteboard-Clip.gif)
## 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]]
-----
![DeltaVR](https://cgvrgit.ulno.net/cgvr/DeltaVR/media/branch/master/Doc/Readme-Footer.png)

View File

@@ -8,10 +8,6 @@
"name": "timur",
"score": 486.0
},
{
"name": "taavi",
"score": 480.0
},
{
"name": "ppppVBBPPP",
"score": 478.0
@@ -59,6 +55,10 @@
{
"name": "yty",
"score": 446.0
},
{
"name": "lp",
"score": 444.0
}
]
}