프로그래밍-1/Unity3D

Unity3D에서 자주 쓰고 있는 C# 코드 (7) - Instantiate(1)

daslyee 2013. 8. 28. 23:43
728x90

우선 어학적 의미를 먼저 알아보자.

(출처 : http://endic.naver.com/enkrEntry.nhn?entryId=791746fb4d3044a6a55d554c81ca79cf)


어학사전

  • 영어사전
    instantiate 
    미국·영국 [instǽnʃièit] 발음듣기 예문보기
    <학설 등을> 예를 들어 설명하다, 예시하다


필자의 생각보다는 의미와 기능이 다소 차이가 있지 않나 생각들기도 한다.


instantiate는 주로 무엇인가를 나가게 할때 많이 쓰였다.


주로 총알 같은 오브젝트를 생기게 하고 싶을 때 사용했다.


아래 코드를 보자.



	public Rigidbody rocketbullet;
	public float Speed = 10.0f;

	public void Fire()
	{
		Rigidbody newrocket = (Rigidbody)Instantiate(rocketbullet, transform.position, transform.rotation);
		newrocket.rigidbody.velocity = transform.TransformDirection (new Vector3(0,Speed*Time.deltaTime,0));
	//	newrocket.rigidbody.velocity = transform.forward;
	}



여기서 중요한 단어를 몇가지 집어서 설명하자면,


함수자체를 public으로 선언하였기 때문에 어디에서든지 사용을 용이하게 만들었다. 

여기서 쓰인 Instantiate의 가로안의 의미는 Instantiate(무엇을,어디에서,어떻게(회전할것인지 등등)라고 정의해두겠다.

TransformDirection는 로컬좌표를 월드좌표로 바꾸어 준다는 의미로 되어있는데,


간단하게 발사체를 발사하는 대상이 어디를 보든 월드좌표를 기준으로 나간다라고 간략하게 설명해두겠다.


최종적으로


fire()함수를 호출한다면


rocketbullet이 transform.position에서 transform.rotation하게


new Vector3(0,Speed*Time.deltaTime,0) 월드좌표로 Speed 값에 Time.deltaTime을 곱한만큼 y축으로 날아갈 것이다.



현재 바라보고 있는 축을 기준으로 한다면

newrocket.rigidbody.velocity = transform.forward; 를 사용하여 간단하게 해결할 수 있다.

(물론 forward 대신 back, left 등등이 자신이 원하는 방향으로 나갈수 있음을 알려드린다.)


Instantiate 자체를 함수로 만들어 사용도 가능하니 연습겸 한번 말들어보는 것도 좋다고 생각한다.

(다만 함수로 만든다면 가로 안의 인자값을 생각하며 넣어보도록 하는 것이 좋을 것 같다.)



728x90