Return Button
This commit is contained in:
@@ -140,8 +140,8 @@ Material:
|
||||
- _WorkflowMode: 1
|
||||
- _ZWrite: 0
|
||||
m_Colors:
|
||||
- _BaseColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
- _Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
- _BaseColor: {r: 1, g: 0, b: 0, a: 1}
|
||||
- _Color: {r: 1, g: 0, b: 0, a: 1}
|
||||
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
||||
- _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1}
|
||||
m_BuildTextureStacks: []
|
||||
|
||||
@@ -6276,6 +6276,50 @@ Transform:
|
||||
- {fileID: 1416835486}
|
||||
m_Father: {fileID: 559134337}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &576843181
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 576843183}
|
||||
- component: {fileID: 576843182}
|
||||
m_Layer: 0
|
||||
m_Name: Return_Button
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!114 &576843182
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 576843181}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 6dfe03d329ee2b146b5996454c244769, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
--- !u!4 &576843183
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 576843181}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0.2055113, y: -0.883631, z: 0.82175124}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &578299011
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -6570,7 +6614,7 @@ GameObject:
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 624025130}
|
||||
- component: {fileID: 624025129}
|
||||
- component: {fileID: 624025131}
|
||||
m_Layer: 0
|
||||
m_Name: BaseModelSelector
|
||||
m_TagString: Untagged
|
||||
@@ -6578,19 +6622,6 @@ GameObject:
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!114 &624025129
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 624025128}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: a216c818db33d894387e9533b925b3d5, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
modelManager: {fileID: 1519836175}
|
||||
--- !u!4 &624025130
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -6606,6 +6637,19 @@ Transform:
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &624025131
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 624025128}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: a216c818db33d894387e9533b925b3d5, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
modelManager: {fileID: 1519836175}
|
||||
--- !u!1 &628967020
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -15423,7 +15467,7 @@ MonoBehaviour:
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
baseModel: {fileID: 645201570}
|
||||
autoModelSelector: {fileID: 0}
|
||||
baseModelSelector: {fileID: 0}
|
||||
--- !u!4 &1519836176
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -22644,3 +22688,4 @@ SceneRoots:
|
||||
- {fileID: 1519836176}
|
||||
- {fileID: 624025130}
|
||||
- {fileID: 645201571}
|
||||
- {fileID: 576843183}
|
||||
|
||||
@@ -18,7 +18,7 @@ public class ModelManager : MonoBehaviour
|
||||
portDict = new Dictionary<string, HashSet<ChildModel>>();
|
||||
childModelDict = new Dictionary<string, ChildModel>();
|
||||
baseModelList = new List<BaseModel>();
|
||||
baseModelSelector = FindFirstObjectByType<BaseModelSelector>();
|
||||
//baseModelSelector = FindFirstObjectByType<BaseModelSelector>();
|
||||
|
||||
foreach (var baseModel in ModelList.BaseModels)
|
||||
{
|
||||
@@ -100,20 +100,25 @@ public class ModelManager : MonoBehaviour
|
||||
if (this.baseModel == null)
|
||||
{
|
||||
// Neues GameObject für das BaseModel erstellen
|
||||
this.baseModel = new GameObject(baseModel.nameId);
|
||||
this.baseModel.name = baseModel.nameId;
|
||||
this.baseModel = new GameObject(baseModel.nameId)
|
||||
{
|
||||
name = baseModel.nameId
|
||||
};
|
||||
this.baseModel.AddComponent<BaseModelBehaviour>();
|
||||
// Positionieren
|
||||
this.baseModel.transform.position = new Vector3(0, 0, 1);
|
||||
this.baseModel.transform.rotation = Quaternion.Euler(0, 90, 0);
|
||||
}
|
||||
this.baseModel.SetActive(true);
|
||||
}
|
||||
|
||||
this.baseModel.GetComponent<BaseModelBehaviour>().baseModel = baseModel;
|
||||
this.baseModel.name = baseModel.nameId;
|
||||
this.baseModel.SetActive(true);
|
||||
Debug.Log($"Modell {baseModel.nameHuman} geladen und platziert.");
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -62,77 +62,7 @@ public class BaseModelSelector : MonoBehaviour
|
||||
canvasGO.AddComponent<GraphicRaycaster>();
|
||||
canvasGO.AddComponent<OVRRaycaster>();
|
||||
}
|
||||
|
||||
void SetupButtonPrefab()
|
||||
{
|
||||
buttonPrefab = new GameObject("ButtonPrefab");
|
||||
buttonPrefab.SetActive(false); // Vorlage bleibt unsichtbar
|
||||
buttonPrefab.AddComponent<RectTransform>();
|
||||
|
||||
var image = buttonPrefab.AddComponent<Image>();
|
||||
image.color = Color.white;
|
||||
|
||||
var button = buttonPrefab.AddComponent<Button>();
|
||||
button.transition = Selectable.Transition.ColorTint;
|
||||
|
||||
GameObject textGO = new GameObject("Text");
|
||||
textGO.transform.SetParent(buttonPrefab.transform);
|
||||
Text text = textGO.AddComponent<Text>();
|
||||
text.font = Resources.GetBuiltinResource<Font>("LegacyRuntime.ttf");
|
||||
text.alignment = TextAnchor.MiddleCenter;
|
||||
text.color = Color.black;
|
||||
text.resizeTextForBestFit = true;
|
||||
|
||||
RectTransform textRT = textGO.GetComponent<RectTransform>();
|
||||
textRT.anchorMin = Vector2.zero;
|
||||
textRT.anchorMax = Vector2.one;
|
||||
textRT.offsetMin = Vector2.zero;
|
||||
textRT.offsetMax = Vector2.zero;
|
||||
|
||||
var collider = buttonPrefab.AddComponent<BoxCollider>();
|
||||
collider.size = new Vector3(160, 40, 1);
|
||||
|
||||
|
||||
}
|
||||
|
||||
void CreateButtons()
|
||||
{
|
||||
float startY = 0; // Anfangsposition auf Y-Achse
|
||||
float buttonHeight = 0.5f; // Abstand zwischen den Buttons
|
||||
|
||||
foreach (var baseModel in ModelList.BaseModels)
|
||||
{
|
||||
Sprite buttonBackground = Resources.Load<Sprite>("UI/"+baseModel.nameId); // ohne .png
|
||||
GameObject buttonGO = Instantiate(buttonPrefab, canvas.transform);
|
||||
Image image = buttonGO.GetComponent<Image>();
|
||||
image.sprite = buttonBackground;
|
||||
buttonGO.SetActive(true);
|
||||
var collider = buttonGO.AddComponent<BoxCollider>();
|
||||
RectTransform rt = buttonGO.GetComponent<RectTransform>();
|
||||
rt.sizeDelta = new Vector2(300, 50);
|
||||
rt.localScale = Vector3.one * 0.005f;// Größe des Buttons
|
||||
rt.localPosition = new Vector3(0, startY, 0); // Position im Canvas
|
||||
rt.localRotation = Quaternion.identity;
|
||||
|
||||
|
||||
|
||||
// Collider richtig setzen
|
||||
collider.size = new Vector3(rt.sizeDelta.x * rt.localScale.x, rt.sizeDelta.y * rt.localScale.y, 1f);
|
||||
collider.center = Vector3.zero;
|
||||
|
||||
Button button = buttonGO.GetComponent<Button>();
|
||||
button.GetComponentInChildren<Text>().text = baseModel.nameHuman;
|
||||
|
||||
|
||||
|
||||
|
||||
// WICHTIG: Capture der richtigen baseModel in einer lokalen Variable
|
||||
BaseModel modelToSelect = baseModel;
|
||||
button.onClick.AddListener(() => OnModelButtonClicked(modelToSelect));
|
||||
|
||||
startY -= buttonHeight; // Nächster Button weiter unten
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void CreatePrefabButtons()
|
||||
{
|
||||
@@ -167,6 +97,7 @@ public class BaseModelSelector : MonoBehaviour
|
||||
if (modelManager != null)
|
||||
{
|
||||
modelManager.LoadSelectedModel(selectedModel);
|
||||
ReturnButtonSpawner.SpawnReturnButton(modelManager.transform, this.canvas.gameObject);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
75
vr-configurator/Assets/Scripts/UI/ReturnButtonSpawner.cs
Normal file
75
vr-configurator/Assets/Scripts/UI/ReturnButtonSpawner.cs
Normal file
@@ -0,0 +1,75 @@
|
||||
using TMPro;
|
||||
using Unity.VisualScripting;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
public class ReturnButtonSpawner : MonoBehaviour
|
||||
{
|
||||
|
||||
public static void SpawnReturnButton(Transform nearTarget, GameObject modelSelectorCanvas)
|
||||
{
|
||||
|
||||
var returnCanvasGO = new GameObject("ReturnCanvas");
|
||||
var canvas = returnCanvasGO.AddComponent<Canvas>();
|
||||
canvas.renderMode = RenderMode.WorldSpace;
|
||||
returnCanvasGO.AddComponent<CanvasScaler>().uiScaleMode = CanvasScaler.ScaleMode.ScaleWithScreenSize;
|
||||
returnCanvasGO.AddComponent<GraphicRaycaster>();
|
||||
returnCanvasGO.AddComponent<OVRRaycaster>();
|
||||
|
||||
returnCanvasGO.transform.position = nearTarget.position + Vector3.right * 2;
|
||||
returnCanvasGO.transform.rotation = Quaternion.LookRotation(returnCanvasGO.transform.position - Camera.main.transform.position);
|
||||
|
||||
var buttonGO = new GameObject("ReturnButton");
|
||||
buttonGO.transform.SetParent(returnCanvasGO.transform, false);
|
||||
|
||||
var rt = buttonGO.AddComponent<RectTransform>();
|
||||
rt.sizeDelta = new Vector2(300, 100);
|
||||
rt.localScale = Vector3.one * 0.005f;
|
||||
|
||||
var image = buttonGO.AddComponent<Image>();
|
||||
var backgroundSprite = Resources.Load<Sprite>("sprites/default");
|
||||
image.sprite = backgroundSprite ?? null;
|
||||
image.color = backgroundSprite ? Color.white : new Color(0.2f, 0.2f, 0.2f, 0.8f);
|
||||
|
||||
var button = buttonGO.AddComponent<Button>();
|
||||
var collider = buttonGO.AddComponent<BoxCollider>();
|
||||
collider.size = new Vector3(300, 100, 1);
|
||||
|
||||
// === Titel ===
|
||||
var titleGO = new GameObject("TitleText");
|
||||
titleGO.transform.SetParent(buttonGO.transform, false);
|
||||
var titleText = titleGO.AddComponent<TextMeshProUGUI>();
|
||||
titleText.text = "Zurück ins Menü";
|
||||
titleText.fontSize = 24;
|
||||
|
||||
var titleRT = titleGO.GetComponent<RectTransform>();
|
||||
titleRT.anchorMin = new Vector2(0, 1);
|
||||
titleRT.anchorMax = new Vector2(1, 1);
|
||||
titleRT.pivot = new Vector2(0, 1);
|
||||
titleRT.anchoredPosition = new Vector2(60, -10);
|
||||
titleRT.sizeDelta = new Vector2(-70, 30);
|
||||
|
||||
|
||||
|
||||
button.onClick.AddListener(() =>
|
||||
{
|
||||
modelSelectorCanvas.SetActive(true);
|
||||
|
||||
// Altes BaseModel zerstören und ein neues leeres erstellen
|
||||
var modelManager = FindObjectOfType<ModelManager>();
|
||||
if (modelManager != null && modelManager.baseModel != null)
|
||||
{
|
||||
Destroy(modelManager.baseModel); // Altes BaseModel zerstören
|
||||
|
||||
|
||||
modelManager.baseModel = new GameObject("BaseModel");
|
||||
modelManager.baseModel.AddComponent<BaseModelBehaviour>();
|
||||
modelManager.baseModel.transform.position = new Vector3(0,0,1); // Optional: Position setzen
|
||||
Debug.Log("Neues leeres BaseModel erstellt.");
|
||||
}
|
||||
Destroy(returnCanvasGO);
|
||||
Debug.Log("Zurück ins Menü");
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6dfe03d329ee2b146b5996454c244769
|
||||
Reference in New Issue
Block a user