CreateFance.cs 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public class CreateFance : MonoBehaviour
  5. {
  6. bool creating;
  7. ShowMousePosition pointer;
  8. public GameObject polePrefab;
  9. public GameObject fencePrefab;
  10. GameObject lastPole;
  11. // Start is called before the first frame update
  12. void Start()
  13. {
  14. pointer = GetComponent<ShowMousePosition>();
  15. }
  16. // Update is called once per frame
  17. void Update()
  18. {
  19. getInput();
  20. }
  21. void getInput()
  22. {
  23. if(Input.GetMouseButtonDown(0))
  24. {
  25. startFence();
  26. }
  27. else if (creating)
  28. {
  29. updateFence();
  30. }
  31. }
  32. void startFence()
  33. {
  34. creating = true;
  35. var startPos = pointer.getWorldPoint();
  36. startPos = pointer.snapPosition(startPos);
  37. var startPole = Instantiate(polePrefab, startPos, Quaternion.identity);
  38. startPole.transform.position = new Vector3(startPos.x, startPos.y + 0.3f, startPos.z);
  39. lastPole = startPole;
  40. }
  41. void setFence()
  42. {
  43. creating = false;
  44. }
  45. void updateFence()
  46. {
  47. var current = pointer.getWorldPoint();
  48. current = pointer.snapPosition(current);
  49. current = new Vector3(current.x, current.y + 0.3f, current.z);
  50. if(!current.Equals(lastPole.transform.position))
  51. {
  52. CreateFenceSegment(current);
  53. }
  54. }
  55. void CreateFenceSegment(Vector3 current)
  56. {
  57. var newPole = Instantiate(polePrefab, current, Quaternion.identity);
  58. var middle = Vector3.Lerp(newPole.transform.position, lastPole.transform.position, 0.5f);
  59. var newFence = Instantiate(fencePrefab, middle, Quaternion.identity);
  60. newFence.transform.LookAt(lastPole.transform);
  61. lastPole = newPole;
  62. }
  63. }