본문 바로가기
유니티/유니티 기능 구현

원하는 위치에 오브젝트 Instantiate해주기

by xortl98 2022. 4. 27.
728x90

사계절별로 나무들을 다르게 생성시키기 위해서 코드를 한번 작성해보았다. 

 

1. 부모 Empty Object 생성, 원하는 위치에 Empty Object로 생성시키길 원하는 이름을 넣고, 생성되길 원하는 위치를 정해주었다.

2. Resources 폴더 안에 해당 날씨별로 프리팹을 넣어놓았고, 

3. 마지막 부모 오브젝트에 밑의 스크립트를 작성 후 넣는다. 

코드 확인

더보기
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;

public class Instantiate : MonoBehaviour
{
    string what_Weather;

    private void Awake()
    {
        CheckWeather();
        CheckEnvironment();
    }


    public void CheckWeather()
    {
        //월 받아서 형변환 
        int month = int.Parse(DateTime.Now.ToString("MM"));

        if (month >= 3 && month <= 5) what_Weather = "Spring";
        else if (month >= 6 && month <= 8) what_Weather = "Summer";
        else if (month >= 9 && month <= 11) what_Weather = "Autumn";
        else what_Weather = "Winter";

        Debug.Log("월 확인: " + month + "계절 확인:" + what_Weather);
    }


    // 사계절 확인 후 Tree, SmallTree, Bush 맞춰서 생성해줌 
    public void CheckEnvironment()
    {
        // 자식 객체의 개수만큼 for문 반복 
        for (int i = 0; i < transform.childCount; i++)
        {
            //현재 자식이 어떤 녀석인지 확인 (이름 체크하려고 선언함)
            GameObject cntGameObject = transform.GetChild(i).gameObject;
            //Debug.Log(i + "번째 이름:" + cntGameObject);
            if (cntGameObject.name == "Tree")
            {
                GameObject Tree = Instantiate(Resources.Load(what_Weather + "Tree"), cntGameObject.transform.position, cntGameObject.transform.rotation) as GameObject;
                Tree.transform.localScale = new Vector3(cntGameObject.transform.localScale.x, cntGameObject.transform.localScale.y, cntGameObject.transform.localScale.z);  //해당 객체의 스케일 값을 받아와서 생성되는 크기도 같은 크기로 늘려줌 
            }
            else if (cntGameObject.name == "SmallTree")
            {
                GameObject SmallTree = Instantiate(Resources.Load(what_Weather + "SmallTree"), cntGameObject.transform.position, cntGameObject.transform.rotation) as GameObject;
                SmallTree.transform.localScale = new Vector3(cntGameObject.transform.localScale.x, cntGameObject.transform.localScale.y, cntGameObject.transform.localScale.z);
            }
            else if (cntGameObject.name == "Bush")
            {
                GameObject Bush = Instantiate(Resources.Load(what_Weather + "Bush"), cntGameObject.transform.position, cntGameObject.transform.rotation) as GameObject;
                Bush.transform.localScale = new Vector3(cntGameObject.transform.localScale.x, cntGameObject.transform.localScale.y, cntGameObject.transform.localScale.z);
            }
        }
    }
}

 

 

결과 

게임 실행 전

 

게임 실행 후

사진을 보면 빈 게임오브젝트의 Position, Rotation, Scale값을 다 받아와서 생성되는 것을 확인할 수 있다. 

 

 

220403 수정 

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

public class Instantiate : MonoBehaviour
{
    string what_Weather = "Spring"; //일단 봄으로 초기화

    private void Awake()
    {
        CheckWeather();
        CheckEnvironment();
    }


    public void CheckWeather()
    {
        //월 받아서 형변환 
        int month = int.Parse(DateTime.Now.ToString("MM"));

        if (month >= 3 && month <= 5) what_Weather = "Spring";
        else if (month >= 6 && month <= 8) what_Weather = "Summer";
        else if (month >= 9 && month <= 11) what_Weather = "Autumn";
        else what_Weather = "Winter";

        Debug.Log("월 확인: " + month + "계절 확인:" + what_Weather);
    }


    // 사계절 확인 후 Tree, SmallTree, Bush 맞춰서 생성해줌 
    public void CheckEnvironment()
    {
        // 자식 객체의 개수만큼 for문 반복 
        for (int i = 0; i < transform.childCount; i++)
        {
            //현재 자식이 어떤 녀석인지 확인 (이름 체크하려고 선언함)
            GameObject cntGameObject = transform.GetChild(i).gameObject;
            //Debug.Log(i + "번째 이름:" + cntGameObject);
            if (cntGameObject.name == "BigTree")
            {
                //해석하자면 (Resources.Load("리소스안에 있는 폴더 경로/" + 계절 + "생성시킬오브젝트",위치, 회전) 이다. 
                GameObject Tree = Instantiate(Resources.Load("Prefab/"+what_Weather + "Tree"), cntGameObject.transform.position, cntGameObject.transform.rotation) as GameObject;
                Tree.transform.localScale = new Vector3(cntGameObject.transform.localScale.x, cntGameObject.transform.localScale.y, cntGameObject.transform.localScale.z);  //해당 객체의 스케일 값을 받아와서 생성되는 크기도 같은 크기로 늘려줌 
            }
            else if (cntGameObject.name == "SmallTree")
            {
                GameObject SmallTree = Instantiate(Resources.Load("wow/"+what_Weather + "SmallTree"), cntGameObject.transform.position, cntGameObject.transform.rotation) as GameObject;
                SmallTree.transform.localScale = new Vector3(cntGameObject.transform.localScale.x, cntGameObject.transform.localScale.y, cntGameObject.transform.localScale.z);
            }
            else if (cntGameObject.name == "Bush")
            {
                GameObject Bush = Instantiate(Resources.Load("wow/"+what_Weather + "Bush"), cntGameObject.transform.position, cntGameObject.transform.rotation) as GameObject;
                Bush.transform.localScale = new Vector3(cntGameObject.transform.localScale.x, cntGameObject.transform.localScale.y, cntGameObject.transform.localScale.z);
            }
        }
    }
}