1
0
forked from cgvr/DeltaVR

printer input hole animation

This commit is contained in:
2026-02-15 12:07:34 +02:00
parent 17c9122a14
commit 46400bc1f0
5 changed files with 171 additions and 111 deletions

View File

@@ -1,81 +1,5 @@
%YAML 1.1 %YAML 1.1
%TAG !u! tag:unity3d.com,2011: %TAG !u! tag:unity3d.com,2011:
--- !u!1 &191445694185635432
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 5366069888055802935}
- component: {fileID: 3859184247018527702}
- component: {fileID: 4706461719203293390}
m_Layer: 0
m_Name: Image
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &5366069888055802935
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 191445694185635432}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 9089378608032997654}
m_RootOrder: -1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0.35, y: 0.35}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &3859184247018527702
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 191445694185635432}
m_CullTransparentMesh: 1
--- !u!114 &4706461719203293390
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 191445694185635432}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 0}
m_Type: 0
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!1 &1729028776279376009 --- !u!1 &1729028776279376009
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@@ -88,7 +12,7 @@ GameObject:
- component: {fileID: 7594134409976187304} - component: {fileID: 7594134409976187304}
- component: {fileID: 1297641575955202044} - component: {fileID: 1297641575955202044}
- component: {fileID: 6521999952126795650} - component: {fileID: 6521999952126795650}
m_Layer: 0 m_Layer: 2
m_Name: Printable m_Name: Printable
m_TagString: Untagged m_TagString: Untagged
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
@@ -107,8 +31,8 @@ Transform:
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0 m_ConstrainProportionsScale: 0
m_Children: m_Children:
- {fileID: 9089378608032997654}
- {fileID: 3957909802885323975} - {fileID: 3957909802885323975}
- {fileID: 3252674962452689824}
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_RootOrder: 0 m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@@ -287,7 +211,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: bb8ba6b5820955f4a95511b55c3a8db9, type: 3} m_Script: {fileID: 11500000, guid: bb8ba6b5820955f4a95511b55c3a8db9, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
--- !u!1 &6791306317367082968 --- !u!1 &2119860429913564602
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
@@ -295,10 +219,10 @@ GameObject:
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
serializedVersion: 6 serializedVersion: 6
m_Component: m_Component:
- component: {fileID: 9089378608032997654} - component: {fileID: 3252674962452689824}
- component: {fileID: 3612923806949016747} - component: {fileID: 6732376546868400302}
- component: {fileID: 5397926117381239953} - component: {fileID: 668304854638700674}
- component: {fileID: 4316554082218252814} - component: {fileID: 6488625860246538072}
m_Layer: 0 m_Layer: 0
m_Name: ImageDisplayCanvas m_Name: ImageDisplayCanvas
m_TagString: Untagged m_TagString: Untagged
@@ -306,34 +230,34 @@ GameObject:
m_NavMeshLayer: 0 m_NavMeshLayer: 0
m_StaticEditorFlags: 0 m_StaticEditorFlags: 0
m_IsActive: 1 m_IsActive: 1
--- !u!224 &9089378608032997654 --- !u!224 &3252674962452689824
RectTransform: RectTransform:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6791306317367082968} m_GameObject: {fileID: 2119860429913564602}
m_LocalRotation: {x: 0, y: -0.7071068, z: -0.7071068, w: 0} m_LocalRotation: {x: -0.49999997, y: -0.5000005, z: 0.49999997, w: -0.49999958}
m_LocalPosition: {x: 0, y: 0, z: -0.0016155243} m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0 m_ConstrainProportionsScale: 0
m_Children: m_Children:
- {fileID: 5366069888055802935} - {fileID: 5419759324473382426}
m_Father: {fileID: 3870989277732630730} m_Father: {fileID: 3870989277732630730}
m_RootOrder: -1 m_RootOrder: -1
m_LocalEulerAnglesHint: {x: 270, y: 0, z: 180} m_LocalEulerAnglesHint: {x: 90, y: 0, z: 270}
m_AnchorMin: {x: 0, y: 0} m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0}
m_AnchoredPosition: {x: -0, y: 0.015545189} m_AnchoredPosition: {x: 0, y: 0.0141}
m_SizeDelta: {x: 100, y: 100} m_SizeDelta: {x: 100, y: 100}
m_Pivot: {x: 0.5, y: 0.5} m_Pivot: {x: 0.5, y: 0.5}
--- !u!223 &3612923806949016747 --- !u!223 &6732376546868400302
Canvas: Canvas:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6791306317367082968} m_GameObject: {fileID: 2119860429913564602}
m_Enabled: 1 m_Enabled: 1
serializedVersion: 3 serializedVersion: 3
m_RenderMode: 2 m_RenderMode: 2
@@ -349,13 +273,13 @@ Canvas:
m_SortingLayerID: 0 m_SortingLayerID: 0
m_SortingOrder: 0 m_SortingOrder: 0
m_TargetDisplay: 0 m_TargetDisplay: 0
--- !u!114 &5397926117381239953 --- !u!114 &668304854638700674
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6791306317367082968} m_GameObject: {fileID: 2119860429913564602}
m_Enabled: 1 m_Enabled: 1
m_EditorHideFlags: 0 m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3}
@@ -372,13 +296,13 @@ MonoBehaviour:
m_DefaultSpriteDPI: 96 m_DefaultSpriteDPI: 96
m_DynamicPixelsPerUnit: 1 m_DynamicPixelsPerUnit: 1
m_PresetInfoIsWorld: 1 m_PresetInfoIsWorld: 1
--- !u!114 &4316554082218252814 --- !u!114 &6488625860246538072
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6791306317367082968} m_GameObject: {fileID: 2119860429913564602}
m_Enabled: 1 m_Enabled: 1
m_EditorHideFlags: 0 m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3}
@@ -389,6 +313,82 @@ MonoBehaviour:
m_BlockingMask: m_BlockingMask:
serializedVersion: 2 serializedVersion: 2
m_Bits: 4294967295 m_Bits: 4294967295
--- !u!1 &4848143069676538940
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 5419759324473382426}
- component: {fileID: 8399332010298584884}
- component: {fileID: 5040108080439486778}
m_Layer: 0
m_Name: Image
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &5419759324473382426
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4848143069676538940}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 3252674962452689824}
m_RootOrder: -1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0.4, y: 0.4}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &8399332010298584884
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4848143069676538940}
m_CullTransparentMesh: 1
--- !u!114 &5040108080439486778
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4848143069676538940}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 0}
m_Type: 0
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!1 &8445441351388109183 --- !u!1 &8445441351388109183
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@@ -401,7 +401,7 @@ GameObject:
- component: {fileID: 4361987431377336869} - component: {fileID: 4361987431377336869}
- component: {fileID: 3411055828343993123} - component: {fileID: 3411055828343993123}
- component: {fileID: 7071286287119029704} - component: {fileID: 7071286287119029704}
m_Layer: 0 m_Layer: 2
m_Name: PrintableBody m_Name: PrintableBody
m_TagString: Untagged m_TagString: Untagged
m_Icon: {fileID: 0} m_Icon: {fileID: 0}

View File

@@ -10,7 +10,6 @@ public class ComputerPrinter : MonoBehaviour
public Transform ejectionDestination; public Transform ejectionDestination;
public Printable printablePrefab; public Printable printablePrefab;
public float ejectionDuration = 1.0f; public float ejectionDuration = 1.0f;
public int ignorePlayerCollisionLayer = 2;
// Start is called before the first frame update // Start is called before the first frame update
void Start() void Start()
@@ -32,11 +31,6 @@ public class ComputerPrinter : MonoBehaviour
Printable printable = Instantiate(printablePrefab, ejectionOrigin.position, Quaternion.identity); Printable printable = Instantiate(printablePrefab, ejectionOrigin.position, Quaternion.identity);
printable.AttachTexture(generatedTexture); printable.AttachTexture(generatedTexture);
printable.gameObject.layer = ignorePlayerCollisionLayer;
foreach (Transform childTrans in printable.transform.GetComponentInChildren<Transform>())
{
childTrans.gameObject.layer = ignorePlayerCollisionLayer;
}
printable.transform.DOMove(ejectionDestination.position, ejectionDuration).OnComplete(() => printable.transform.DOMove(ejectionDestination.position, ejectionDuration).OnComplete(() =>
{ {

View File

@@ -1,3 +1,4 @@
using FMOD.Studio;
using System; using System;
using System.Collections; using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
@@ -9,12 +10,15 @@ public class Printer3D : MonoBehaviour
public int ignorePlayerCollisionLayer = 2; public int ignorePlayerCollisionLayer = 2;
public string shapeScannerTag = "ShapeScannable"; public string shapeScannerTag = "ShapeScannable";
private bool isPrinting = false;
private EventInstance printingSound;
private GameObject GeneratedModel; private GameObject GeneratedModel;
// Start is called before the first frame update // Start is called before the first frame update
void Start() void Start()
{ {
printingSound = AudioManager.Instance.CreateInstance(FMODEvents.Instance.Printing);
printingSound.setParameterByName("3DPrinterPrintingJob", 1);
} }
// Update is called once per frame // Update is called once per frame
@@ -25,6 +29,10 @@ public class Printer3D : MonoBehaviour
public async void PrintObject(Texture2D texture) public async void PrintObject(Texture2D texture)
{ {
isPrinting = true;
printingSound.start();
printingSound.setParameterByName("3DPrinterPrintingJob", 0);
string encodedTexture = Convert.ToBase64String(texture.EncodeToJPG()); string encodedTexture = Convert.ToBase64String(texture.EncodeToJPG());
byte[] encodedModel = await TrellisClient.Instance.GenerateModel(encodedTexture); byte[] encodedModel = await TrellisClient.Instance.GenerateModel(encodedTexture);
@@ -36,6 +44,9 @@ public class Printer3D : MonoBehaviour
GeneratedModel.transform.position = Vector3.zero; GeneratedModel.transform.position = Vector3.zero;
} }
GeneratedModel = spawnedObject; GeneratedModel = spawnedObject;
printingSound.setParameterByName("3DPrinterPrintingJob", 1);
isPrinting = false;
} }
private void InitializeSpawnedObject(GameObject spawnedObject) private void InitializeSpawnedObject(GameObject spawnedObject)
@@ -59,4 +70,9 @@ public class Printer3D : MonoBehaviour
spawnedObjectParent.AddComponent<TwoHandScaleGrabInteractable>(); spawnedObjectParent.AddComponent<TwoHandScaleGrabInteractable>();
} }
public bool IsPrinting()
{
return isPrinting;
}
} }

View File

@@ -1,10 +1,14 @@
using System.Collections; using DG.Tweening;
using System.Collections.Generic;
using UnityEngine; using UnityEngine;
using UnityEngine.XR.Interaction.Toolkit;
public class Printer3DInputHole : MonoBehaviour public class Printer3DInputHole : MonoBehaviour
{ {
public Printer3D printer; public Printer3D printer;
public XRInteractionManager interactionManager;
public Transform insertionOrigin;
public Transform insertionDestination;
public float insertionDuration = 1f;
// Start is called before the first frame update // Start is called before the first frame update
void Start() void Start()
@@ -26,10 +30,56 @@ public class Printer3DInputHole : MonoBehaviour
Printable printable = parent.GetComponent<Printable>(); Printable printable = parent.GetComponent<Printable>();
if (printable != null) if (printable != null)
{ {
printer.PrintObject(printable.GetTexture()); if (printer.IsPrinting())
Destroy(printable.gameObject); {
Debug.Log("priner is busy!");
} else
{
ReleaseFromPlayer(printable);
InsertPrintable(printable);
}
}
} }
} }
private void ReleaseFromPlayer(Printable printable)
{
var grab = printable.GetComponent<XRGrabInteractable>();
var rb = printable.GetComponent<Rigidbody>();
// 1) If currently held, force release from the interactor
if (grab != null && grab.isSelected)
{
var interactor = grab.firstInteractorSelecting; // the hand/controller currently holding it
if (interactor != null)
{
// Transfer ownership: tell the manager to stop the selection
interactionManager.SelectExit(interactor, grab);
}
}
// 2) Make sure physics doesn't fight the tween (optional but recommended)
if (rb != null)
{
rb.isKinematic = true; // prevent forces during tween
rb.velocity = Vector3.zero;
rb.angularVelocity = Vector3.zero;
}
// 3) Optionally disable grabbing during the tween so the player can't re-grab mid-flight
if (grab != null) grab.enabled = false;
}
private void InsertPrintable(Printable printable)
{
Transform printableTransform = printable.transform;
printableTransform.position = insertionOrigin.position;
printableTransform.rotation = insertionOrigin.rotation;
printableTransform.DOMove(insertionDestination.position, insertionDuration).OnComplete(() =>
{
printer.PrintObject(printable.GetTexture());
Destroy(printable.gameObject);
});
} }
} }