PrefabCreator.cs 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. using UnityEngine;
  2. public class PrefabCreator : MonoBehaviour
  3. {
  4. [Header("Auto-Create Prefabs")]
  5. public bool autoCreatePrefabs = true;
  6. private void Awake()
  7. {
  8. if (autoCreatePrefabs)
  9. {
  10. CreateBasicPrefabs();
  11. }
  12. }
  13. private void CreateBasicPrefabs()
  14. {
  15. // Create wall prefab if needed
  16. CreateWallPrefab();
  17. CreateWallPointPrefab();
  18. CreateDoorOpeningPrefab();
  19. }
  20. private GameObject CreateWallPrefab()
  21. {
  22. GameObject wall = GameObject.CreatePrimitive(PrimitiveType.Cube);
  23. wall.name = "Wall_Prefab";
  24. // Set default material
  25. Renderer renderer = wall.GetComponent<Renderer>();
  26. Material wallMaterial = new Material(Shader.Find("Standard"));
  27. wallMaterial.color = new Color(0.8f, 0.7f, 0.6f); // Beige color
  28. renderer.material = wallMaterial;
  29. // Add collider for door placement detection
  30. BoxCollider collider = wall.GetComponent<BoxCollider>();
  31. if (collider == null)
  32. {
  33. collider = wall.AddComponent<BoxCollider>();
  34. }
  35. wall.tag = "Wall";
  36. // Don't destroy this object - it's created dynamically
  37. return wall;
  38. }
  39. private GameObject CreateWallPointPrefab()
  40. {
  41. GameObject point = GameObject.CreatePrimitive(PrimitiveType.Sphere);
  42. point.name = "WallPoint_Prefab";
  43. point.transform.localScale = Vector3.one * 0.2f;
  44. Renderer renderer = point.GetComponent<Renderer>();
  45. Material pointMaterial = new Material(Shader.Find("Standard"));
  46. pointMaterial.color = Color.red;
  47. renderer.material = pointMaterial;
  48. // Remove collider to prevent interference
  49. Collider collider = point.GetComponent<Collider>();
  50. if (collider != null)
  51. {
  52. DestroyImmediate(collider);
  53. }
  54. return point;
  55. }
  56. private GameObject CreateDoorOpeningPrefab()
  57. {
  58. GameObject door = GameObject.CreatePrimitive(PrimitiveType.Cube);
  59. door.name = "DoorOpening_Prefab";
  60. // Scale to door size
  61. door.transform.localScale = new Vector3(1.5f, 2.5f, 0.2f);
  62. Renderer renderer = door.GetComponent<Renderer>();
  63. Material doorMaterial = new Material(Shader.Find("Standard"));
  64. doorMaterial.color = new Color(0.6f, 0.4f, 0.2f); // Brown door color
  65. renderer.material = doorMaterial;
  66. door.tag = "Door";
  67. return door;
  68. }
  69. }