멋사교육

멋쟁이사자처럼부트캠프 유니티 게임 개발 5기 10일차

나른한여우 2025. 5. 27. 21:36
  • 유니티 에디터 실습
  • 유니티 C#

유니티 에디터 실습

 

Rotate함수

 

Rotate함수의 오버로드

  • public void Rotate(Vector3 eulerAngles) // 오일러 각도
  • public void Rotate(Vector3 axis, float angle) //Vector3(축) + float(각도)

transformRotate함수를 사용해 룰렛을 회전하는 기능 3D이기 때문에 Z축을 기준으로 오브젝트를 회전시키고 마우스클릭을 통해 rotSpeed를 올려 돌아가게 만들어줌 스페이스바를 누르면 bool타입인 isStop을 true로 줌으로써 조건문이 동작하게하고 회전 속도에 0.98을 계속해서 곱해줌으로써 현재 속도를 줄이는 기능을 만들어줌

이렇게 계속해서 0.98을 곱하면 끝이없으므로 속도가 0.1f이하로 내려가면 0f로 만들어서 속도가 완전히 멈추게해줌

//Z축을 기준으로 회전하는 기능
transform.Rotate(Vector3.forward * rotSpeed);
//transform.Rotate(0f, 0f, rotSpeed);

//Vector3.forward = new Vector3(0f, 0f, 1f);

if(Input.GetMouseButtonDown(0))
{
    rotSpeed = 5f;
}

if(Input.GetKeyDown(KeyCode.Space))
{
    Debug.Log("ㅇㅅㅇ");
    isStop = true;
}

if (isStop == true)
{
    //점점 속도를 줄임 2%씩
    rotSpeed *= 0.98f; //현재 속도에서 특정 값만큼 줄이는 기능

    if (rotSpeed < 0.1f)
    {
        rotSpeed = 0f;
        isStop = false;
    }
}

 

 

 

Translate함수

 

transform.Translate 함수는 오브젝트를 이동시키는 함수. 현재 위치에서 지정된 방향과 거리만큼 상대적으로 이동한다.

transform.Translate(translation);
//                  ↑
//               이동할 벡터

 

로컬 좌표계 기준 이동

transform.Translate(Vector3.forward * 5f); // 앞으로 5 유닛
transform.Translate(Vector3.up * 2f);      // 위로 2 유닛
transform.Translate(new Vector3(1, 0, 1)); // 오른쪽 1, 앞쪽 1 유닛

 

월드 좌표계를 지정해줄때는 Space.World를 붙여줌

transform.Translate(Vector3.forward * 5f, Space.Self);  // 로컬 좌표계 (기본값)
transform.Translate(Vector3.forward * 5f, Space.World); // 월드 좌표계

 

 

Polygon을 직접 만들어보기

void Start()
{
    Mesh mesh = new Mesh(); // 형태 데이터가 들어갈 Mesh 타입의 변수 생성

    //점 4개 찍기
    Vector3[] vertices = new Vector3[]
    {
        new Vector3(0, 0, 0),
        new Vector3(1, 0, 0),
        new Vector3(0, 1, 0),
        new Vector3(1, 1, 0)
    };

    //삼각형 순서
    int[] triangles = new int[]
    {
        0, 2, 1,
        2, 3, 1
    };

    //면의 방향
    Vector2[] uv = new Vector2[]
    {
        new Vector2(0, 0),
        new Vector2(1, 0),
        new Vector2(0, 1),
        new Vector2(1, 1)
    };

    //Mesh에 위에서 만든 점, 삼각형 순서, UV데이터를 적용
    mesh.vertices = vertices;
    mesh.triangles = triangles;
    mesh.uv = uv;

    //MeshFilter에 Mesh 데이터를 적용
    MeshFilter meshFilter = this.gameObject.AddComponent<MeshFilter>();
    meshFilter.mesh = mesh;

    //MeshRenderer에 Material 데이터를 적용
    MeshRenderer meshRenderer = gameObject.AddComponent<MeshRenderer>();
    meshRenderer.material = new Material(Shader.Find("Sprites/Default"));
}

 

유니티 C#

 

Unity Callback 함수 일부

 private void Awake()
 {
     Debug.Log("Awake");
 }

 private void Start()
 {
     Debug.Log("Start");
 }

 private void OnEnable()
 {
     Debug.Log("OnEnable");
 }

 private void OnDisable()
 {
     Debug.Log("OnDisable");
 }

 

OnEnable과 OnDisable을 통해 오브젝트를 활성화, 비활성화 할수있으며 OnEnable을 통해 날아간 총알을 재활용하기도 한다고함. 껐다 켰다 하면서.. 또한 Awake는 스크립트가 비활성화되어있어도 실행이 됨..!