Compare commits
78 Commits
SamWorkset
...
53c6b04d23
| Author | SHA1 | Date | |
|---|---|---|---|
| 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 |
@@ -81,6 +81,7 @@ public class NetworkMenuUI : MonoBehaviour
|
|||||||
}
|
}
|
||||||
private void OnStartPlaying()
|
private void OnStartPlaying()
|
||||||
{
|
{
|
||||||
|
Debug.Log("START PRESSED");
|
||||||
statusText.text = "Starting host...";
|
statusText.text = "Starting host...";
|
||||||
StartCoroutine(HostAndSearchRoutine());
|
StartCoroutine(HostAndSearchRoutine());
|
||||||
}
|
}
|
||||||
|
|||||||
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))
|
foreach (string path in GetPrefabFiles("Assets", excludedPaths, true))
|
||||||
{
|
{
|
||||||
|
|
||||||
NetworkObject nob = AssetDatabase.LoadAssetAtPath<NetworkObject>(path);
|
NetworkObject nob = AssetDatabase.LoadAssetAtPath<NetworkObject>(path);
|
||||||
if (nob != null)
|
if (nob != null)
|
||||||
foundNobs.Add(nob);
|
foundNobs.Add(nob);
|
||||||
|
else
|
||||||
|
UnityEngine.Debug.LogWarning("Last loading error with: " + path);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//Specific folders.
|
//Specific folders.
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
@@ -7,7 +7,7 @@ TextureImporter:
|
|||||||
mipmaps:
|
mipmaps:
|
||||||
mipMapMode: 0
|
mipMapMode: 0
|
||||||
enableMipMap: 1
|
enableMipMap: 1
|
||||||
sRGBTexture: 1
|
sRGBTexture: 0
|
||||||
linearTexture: 0
|
linearTexture: 0
|
||||||
fadeOut: 0
|
fadeOut: 0
|
||||||
borderMipMap: 0
|
borderMipMap: 0
|
||||||
@@ -54,7 +54,7 @@ TextureImporter:
|
|||||||
alphaUsage: 1
|
alphaUsage: 1
|
||||||
alphaIsTransparency: 0
|
alphaIsTransparency: 0
|
||||||
spriteTessellationDetail: -1
|
spriteTessellationDetail: -1
|
||||||
textureType: 0
|
textureType: 1
|
||||||
textureShape: 1
|
textureShape: 1
|
||||||
singleChannelComponent: 0
|
singleChannelComponent: 0
|
||||||
flipbookRows: 1
|
flipbookRows: 1
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using System;
|
using System;
|
||||||
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using UnityEngine.InputSystem;
|
using UnityEngine.InputSystem;
|
||||||
@@ -44,6 +45,26 @@ namespace _PROJECT.NewHandPresence
|
|||||||
|
|
||||||
private GameObject _billboard;
|
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()
|
private void Update()
|
||||||
{
|
{
|
||||||
if (_state == TutorialState.Initializing)
|
if (_state == TutorialState.Initializing)
|
||||||
@@ -177,29 +198,33 @@ namespace _PROJECT.NewHandPresence
|
|||||||
private void TryInitialize()
|
private void TryInitialize()
|
||||||
{
|
{
|
||||||
if (!CanInitialize()) return;
|
if (!CanInitialize()) return;
|
||||||
|
if (null == initializationInfoCoroutine)
|
||||||
|
{
|
||||||
|
initializationInfoCoroutine = StartCoroutine(InitializationInfoCoroutine());
|
||||||
|
}
|
||||||
|
|
||||||
_camera = Camera.main;
|
_camera = Camera.main;
|
||||||
|
|
||||||
Debug.Log("Initializing tutorial");
|
//Debug.Log("Initializing tutorial");
|
||||||
|
|
||||||
_leftHintController = leftHand.GetComponentInChildren<XRControllerHintController>();
|
_leftHintController = leftHand.GetComponentInChildren<XRControllerHintController>();
|
||||||
_rightHintController = rightHand.GetComponentInChildren<XRControllerHintController>();
|
_rightHintController = rightHand.GetComponentInChildren<XRControllerHintController>();
|
||||||
|
|
||||||
Debug.Log($"Left hint controller: {_leftHintController}");
|
initializationInfoStatus[TutorialInfoKey.LeftHintController] = null != _leftHintController;
|
||||||
Debug.Log($"Right hint controller: {_rightHintController}");
|
initializationInfoStatus[TutorialInfoKey.RightHintController] = null != _rightHintController;
|
||||||
|
|
||||||
_leftSmartHandPresence = leftHand.GetComponentInChildren<SmartHandPresence>();
|
_leftSmartHandPresence = leftHand.GetComponentInChildren<SmartHandPresence>();
|
||||||
_rightSmartHandPresence = rightHand.GetComponentInChildren<SmartHandPresence>();
|
_rightSmartHandPresence = rightHand.GetComponentInChildren<SmartHandPresence>();
|
||||||
|
|
||||||
Debug.Log($"Left smart hand presence: {_leftSmartHandPresence}");
|
initializationInfoStatus[TutorialInfoKey.LeftSmartHandPresence] = null != _leftSmartHandPresence;
|
||||||
Debug.Log($"Right smart hand presence: {_rightSmartHandPresence}");
|
initializationInfoStatus[TutorialInfoKey.RightSmartHandPresence] = null != _rightSmartHandPresence;
|
||||||
|
|
||||||
if (_leftHintController == null ||
|
if (_leftHintController == null ||
|
||||||
_rightHintController == null ||
|
_rightHintController == null ||
|
||||||
_leftSmartHandPresence == null ||
|
_leftSmartHandPresence == null ||
|
||||||
_rightSmartHandPresence == null)
|
_rightSmartHandPresence == null)
|
||||||
{
|
{
|
||||||
Debug.Log("Hint controller or smart hand presence is null");
|
//Debug.Log("Hint controller or smart hand presence is null");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -216,6 +241,7 @@ namespace _PROJECT.NewHandPresence
|
|||||||
|
|
||||||
UpdateState(_state.Next());
|
UpdateState(_state.Next());
|
||||||
Debug.Log("Tutorial initialized");
|
Debug.Log("Tutorial initialized");
|
||||||
|
StopCoroutine(initializationInfoCoroutine);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnGripPerformed(SelectEnterEventArgs arg0)
|
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;
|
using UnityEngine;
|
||||||
|
|
||||||
public class PlayAnimationOnTrigger : MonoBehaviour
|
public class PlayAnimationOnTrigger : MonoBehaviour
|
||||||
{
|
{
|
||||||
[SerializeField] public Animator animator; // Reference to the Animator component
|
public enum KnownAnimations
|
||||||
[SerializeField] public string animationName = "YourAnimation"; // Name of the animation to play
|
{
|
||||||
|
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)
|
private void OnTriggerEnter(Collider other)
|
||||||
{
|
{
|
||||||
@@ -15,15 +27,16 @@ public class PlayAnimationOnTrigger : MonoBehaviour
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
string animationNameString = animationNames[animationName];
|
||||||
|
|
||||||
// Check if the animation is already playing
|
// 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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Play the animation
|
// Play the animation
|
||||||
animator.Play(animationName, 0, 0f);
|
animator.Play(animationNameString, 0, 0f);
|
||||||
Debug.Log("Playing animation: " + animationName);
|
Debug.Log("Playing animation: " + animationNameString);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,6 +29,14 @@ namespace _PROJECT.Multiplayer.NewBow
|
|||||||
if (_notch == null)
|
if (_notch == null)
|
||||||
Debug.LogError("Notch not found");
|
Debug.LogError("Notch not found");
|
||||||
|
|
||||||
|
//CreateArrowServer();
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void OnOwnershipServer(NetworkConnection prevOwner)
|
||||||
|
{
|
||||||
|
base.OnOwnershipServer(prevOwner);
|
||||||
|
|
||||||
|
if (Owner.IsValid)
|
||||||
CreateArrowServer();
|
CreateArrowServer();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
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.
@@ -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
|
// Set the callback for programmer sounds
|
||||||
instance.setCallback(dialogueCallback);
|
instance.setCallback(dialogueCallback);
|
||||||
|
|
||||||
bool managedByOcclusion = false;
|
|
||||||
|
|
||||||
// Add occlusion if available on the emitter
|
// Add occlusion if available on the emitter
|
||||||
if (emitter != null)
|
if (emitter != null)
|
||||||
{
|
{
|
||||||
@@ -337,17 +330,12 @@ public class AudioManager : MonoBehaviour
|
|||||||
if (occlusion != null)
|
if (occlusion != null)
|
||||||
{
|
{
|
||||||
occlusion.InitialiseWithInstance(instance);
|
occlusion.InitialiseWithInstance(instance);
|
||||||
managedByOcclusion = true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
instance.start();
|
instance.start();
|
||||||
|
|
||||||
if (!managedByOcclusion)
|
|
||||||
{
|
|
||||||
instance.release();
|
instance.release();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
[AOT.MonoPInvokeCallback(typeof(EVENT_CALLBACK))]
|
[AOT.MonoPInvokeCallback(typeof(EVENT_CALLBACK))]
|
||||||
@@ -426,6 +414,11 @@ public class AudioManager : MonoBehaviour
|
|||||||
instance.setPaused(false);
|
instance.setPaused(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void Pause()
|
||||||
|
{
|
||||||
|
musicEventInstance.setPaused(true);
|
||||||
|
}
|
||||||
|
|
||||||
public static void Pause(EventInstance instance)
|
public static void Pause(EventInstance instance)
|
||||||
{
|
{
|
||||||
instance.setPaused(true);
|
instance.setPaused(true);
|
||||||
@@ -437,12 +430,10 @@ public class AudioManager : MonoBehaviour
|
|||||||
{
|
{
|
||||||
foreach (EventInstance eventInstance in eventInstances)
|
foreach (EventInstance eventInstance in eventInstances)
|
||||||
{
|
{
|
||||||
if (eventInstance.isValid()) {
|
|
||||||
eventInstance.stop(FMOD.Studio.STOP_MODE.IMMEDIATE);
|
eventInstance.stop(FMOD.Studio.STOP_MODE.IMMEDIATE);
|
||||||
eventInstance.release();
|
eventInstance.release();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
private void OnDestroy()
|
private void OnDestroy()
|
||||||
|
|||||||
@@ -75,7 +75,7 @@ public class FirstPersonOcclusion : MonoBehaviour
|
|||||||
AudioOccluded.start();
|
AudioOccluded.start();
|
||||||
|
|
||||||
// 4. Releasing Instance (This allows the event to self-manage its lifetime, which is fine)
|
// 4. Releasing Instance (This allows the event to self-manage its lifetime, which is fine)
|
||||||
//AudioOccluded.release();
|
AudioOccluded.release();
|
||||||
|
|
||||||
managedInstances.Add(AudioOccluded); // ADDED
|
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
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
|
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.
|
||||||
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.
|
|
||||||
|
|
||||||
## 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]]
|
||||||
|
|
||||||
|
-----
|
||||||
|
|
||||||
|

|
||||||
|
|||||||
@@ -8,10 +8,6 @@
|
|||||||
"name": "timur",
|
"name": "timur",
|
||||||
"score": 486.0
|
"score": 486.0
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "taavi",
|
|
||||||
"score": 480.0
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "ppppVBBPPP",
|
"name": "ppppVBBPPP",
|
||||||
"score": 478.0
|
"score": 478.0
|
||||||
@@ -59,6 +55,10 @@
|
|||||||
{
|
{
|
||||||
"name": "yty",
|
"name": "yty",
|
||||||
"score": 446.0
|
"score": 446.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "lp",
|
||||||
|
"score": 444.0
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user