Unity

프리팹(Prefeb) / 오브젝트 만들기 (Unity)

힘법사 2020. 12. 26. 21:10
728x90

안녕하십니까, 힘법사 입니다. 이번 포스팅에서는 프리팹을 통해서 계속해서 오브젝트를 복사해내는 방법을 보여드리겠습니다.

AddForce Method를 이용한 물체 던지기 / 오브젝트 던지기(Unity) (tistory.com)

 

AddForce Method를 이용한 물체 던지기 / 오브젝트 던지기(Unity)

 안녕하십니까!! 힘법사입니다. 오늘은 유니티에서 물체를 던져보겠습니다. 그 전에 보고 오시면 좋은 게시물 네개 말씀해드리겠습니다. 유니티 오브젝트 텍스처(Texture)지정하기(Unity) (tistory.com

himbopsa.tistory.com

그 전에 이번 실습은 해당 게시글에서 이어서 진행하는 것이기 때문에 다른 부분을 어떻게 구현했는지 궁금하신 분은 참고해주시기 바랍니다. ^^

 

프리팹 : 프리팹은 설계도 같은 역할을 합니다. 게임 중 오브젝트를 만들어야하는데 필요한 정보가 쓰여있고 프리팹을 통해 무한정 필요한 오브젝트를 만들어낼 수 있습니다.

그림. 프리팹을 만드는 과정

다음과 같이 이미 만들어진 오브젝트를 드래그해 Assets 창에 넣어둔 다음. "StonePrefeb" 으로 이름을 바꿔줍니다.(Rename)

그림.C# Script

StoneGenerator로 C# Script를 만들어 줍니다.

안의 코드는 다음과 같이 설정해줍니다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class StoneGenerator : MonoBehaviour
{
    // Start is called before the first frame update
    public GameObject StonePrefeb; //GameObject 선언
    // Update is called once per frame
    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {   //stone을 생성하고 발사!
            GameObject stone = Instantiate(StonePrefeb) as GameObject;
            stone.GetComponent<StoneController>().Shoot(new Vector3 (0,200,2000));
        }
    }
}

이전 게시물의 StoneController에서 수정해야하는 부분에 대해서 적도록 하겠습니다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class StoneController : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        //GetComponent<Rigidbody>().isKinematic = true;
        //시작과 동시에 물체가 추락하지 않도록 하기 위한 코드

    }

    // Update is called once per frame
    void Update()
    {
        /*if (Input.GetMouseButtonDown(0)) // 마우스 클릭시 발동
        {
            GetComponent<Rigidbody>().isKinematic = false;
            //물체가 여러 물리력을 받도록 허용하는 코드
            Shoot();
            // 발사!!
        }*/
    }
    public void Shoot(Vector3 speed)
    {   //Y축으로 200만큼 Z 축으로 2000만큼의 힘으로 발사시키는 함수
        GetComponent<Rigidbody>().AddForce(speed);
    }
}

 

전에는 Kinematic을 true로 하고 시작했는데 이는 돌이 못날라가게 막으므로 주석처리 해줬습니다. 그리고 shoot도 코드로 간단하게 조정할 수 있도록 argument로 Vector3를 받도로 설정했습니다.

그림. 설명을 위한 그림

그리고 나서, Create Empty를 클릭해 Empty를 만들어준 후 이름을 "StoneGenerator"로 다시 지어줍니다.

 

그림. 설명을 위한 이미지

StoneGenerator Script를 StoneGenerator에 이미지와 같이 드래그 해줍니다.

그림. 설명을 위한 이미지

그 후 Script의 Stone Prefeb에 앞서 만든 StonePrefeb을 드래그해 넣어주면 모든 과정이 끝납니다!

자 모든 과정이 끝났습니다. 이제 시연을해보겠습니다!

 

동영상. 시연 영상

마치 대포를 쏘는 것 같네요!! 작동이 잘됩니다. 다음에는 원하는 방향으로 포탄을 쏘는 법 Ray에 대해서 포스팅 하겠습니다. 감사합니다

728x90