Return Button

This commit is contained in:
lachs218
2025-05-02 21:35:38 +02:00
parent f676507adf
commit f9b81dc8ad
6 changed files with 151 additions and 93 deletions

View File

@@ -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: []

View File

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

View File

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

View File

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

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

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 6dfe03d329ee2b146b5996454c244769