'2014/01/28'에 해당되는 글 14건

  1. 2014.01.28 유니티 내의 특정 오브젝트 보이기/감추기 Or 컴포넌트 On/off
  2. 2014.01.28 유니티 특정 오브젝트 생성시 시간간격 두기(실행 지연 관련)
  3. 2014.01.28 유니티 키 입력 관련 input manager 클래스관련
  4. 2014.01.28 유니티 SendMessage함수를 사용해서 다른 오브젝트의 특정 함수 호출하기
  5. 2014.01.28 폭파 불꽃 관련 파티클 이미지
  6. 2014.01.28 유니티의 오브젝트 크기, 위치, 색 설정하기
  7. 2014.01.28 유니티 WorldToScreenPoint를 사용하여 좌우 이동을 제한하는 스크립트
  8. 2014.01.28 유니티 오브젝트 키보드로 움직이기
  9. 2014.01.28 배경화면 스크롤 방법
  10. 2014.01.28 제트기 뒤 분화구 파티클 패키지 파일

유니티 내의 특정 오브젝트 보이기/감추기 Or 컴포넌트 On/off

|

 

 게임 중에 오브젝트를 잠시동안 안보이게 하고 싶거나, 잠시동안 보이게 하고 싶을때가 있습니다. 또는 오브젝트에 연결된 컴포넌트들을 잠시동안

기능을 멈추게 하고 싶을수 도 있습니다.


먼저 오브젝트를 안보이게 하는 방법은 2가지가 있습니다.

1. 오브젝트를 비활성시킨다.

2. 오브젝트의 화면 표시를 금지한다.


1번은 인스펙터에서 오브젝트 이름 옆에 있는 체크박스를 해제하면 오브젝트가 화면에서 사라지는 것처럼 오브젝트를 일시적으로 화면에서 사라지게 하는 것이고, 2번은 오브젝트를 화면에 그리지 않도록 하는 것입니다.


1. <게임오브젝트>.SetActive(false); <-오브젝트 비활성화

2. <게임오브젝트>.renderer.enabled = false; <- 오브젝트의 화면 표시 금지


1은 오브젝트 자체를 비활성화 하는것

2은 오브젝트의 renderer 컴포넌트를 이용하는 것입니다.


아래 스크립트는 화면 클릭시 오브젝트를 사라지게 하거나 나타내게 하는 스크립트입니다.


게임오브젝트->크레이트->큐브를 하나 생성하고 빈게임오브젝트도 하나 생성합니다.

스크립트는 빈게임 오브젝트에 할당합니다. 

왼쪽버튼 클릭시 비활성화 오른쪽 버튼 클릭시 활성화 입니다.











왼쪽화면은 왼쪽 버튼을 클릭했을시 Cube 글씨 옆의 체크박스가 해제된 모습이고

오른족화면은 오른족 버튼을 클릭했을시 Cube 글씨 옆의 체크박스가 체크된 모습입니다.













위화면에서 보이듯이 왼쪽은 mesh Renderer이 체크가 해제된 모습, 오른쪽은 mesh Renderer이 체크가 된 모습입니다.


아래 스크립트 처럼 특정 스크립트를 비활성화 시킬수도 있습니다.
Cube 에 CsMove스크립트를 붙이고 실행시킨 결과입니다.







왼쪽 버튼 클릭시 CsMove 스크립트 비활성화 오른쪽 버튼 클릭시 CsMove 스크립트 활성화.



Trackback 0 And Comment 0

유니티 특정 오브젝트 생성시 시간간격 두기(실행 지연 관련)

|

유니티내에서 미사일을 발사할때나 몬스터를 생성할때 등 특정 상황에서 시간을 지연시킬 필요가 하는 경우가 많습니다.

yield 문은 함수의 실행을 일정 시간(또는 프레임) 동안 지연(보류)하는 명령입니다.


<실행문>                                                                   -> 즉시 실행한다.

..

yield return new WaitForSeconds(2.0f)                           -> <실행문2>는 2.0초 후에 실행됩니다.

..

<실행문2>


yield는 일종의 return문으로, return 문은 그 이후에 모든 문장은 무시되지만, yield는 return 한 후 지정한 시간(또는 프레임)후에 그 이후 문장이 실행됩니다. 


아래 예제는 미사일 발사시 일정 시간 동안은 발사하지 못하도록 하는 함수 입니다.






Fire1키를 누를때 canFire 키가 true인지 판단합니다. 함수를 실행하면 canFire 값이 false로 변경되고 0.2초 후에 canFire가 true가 됩니다.
canFire가 true가 되기전 키를 누를시에는 MakeMissile함수가 실행되지 않습니다.


코루틴을 사용하지 않는 방법은 아래와 같이 Time.time 값을 이용해서 총알 발사 함수를 지연시키는 방법입니다.
nextFire 변수에 Time.time + 총알 지연시간(fireRate) 의 값을 저장하여 그 이상 시간이 경과되지 않으면 함수가 실행되지 않습니다


Trackback 0 And Comment 0

유니티 키 입력 관련 input manager 클래스관련

|
Static Functions
GetAccelerationEventReturns specific acceleration measurement which occurred during last frame. (Does not allocate temporary variables).
GetAxisReturns the value of the virtual axis identified by axisName.
GetAxisRawReturns the value of the virtual axis identified by axisName with no smoothing filtering applied.
GetButtonReturns true while the virtual button identified by buttonName is held down.
GetButtonDownReturns true during the frame the user pressed down the virtual button identified by buttonName.
GetButtonUpReturns true the first frame the user releases the virtual button identified by buttonName.
GetJoystickNamesReturns an array of strings describing the connected joysticks.
GetKeyReturns true while the user holds down the key identified by name. Think auto fire.
GetKeyDownReturns true during the frame the user starts pressing down the key identified by name.
GetKeyUpReturns true during the frame the user releases the key identified by name.
GetMouseButtonReturns whether the given mouse button is held down.
GetMouseButtonDownReturns true during the frame the user pressed the given mouse button.
GetMouseButtonUpReturns true during the frame the user releases the given mouse button.
GetTouchReturns object representing status of a specific touch. (Does not allocate temporary variables).
ResetInputAxesResets all input. After ResetInputAxes all axes return to 0 and all buttons return to 0 for one frame.

유니티에서 사용되는 Input 함수들

위에서 알수 있듯이 여러가지 Input 함수들을 제공합니다.


버튼에는 GetButton, GetButtonUp, GetButtonDown이 있는데

Up 같은경우 버튼에서 손을땠을때 최초 한번 발동하고

Down 같은경우 버튼을 누를시에 최초 한번 발동한다.

그리고 아무것도 붙여지지 않은 함수는 버튼을 누르는동안 계속해서 발동한다.


마우스 관련함수도 마찬가지로 

up은 손을땔떼, down은 누를시, 그리고 아무것도 없는 것은 누르고 있는동안 지속적으로 발동한다.



GetAxis는 Input Manager에 미리 지정된 값들이다(스트링값으로 지정된 값)





Trackback 0 And Comment 0

유니티 SendMessage함수를 사용해서 다른 오브젝트의 특정 함수 호출하기

|

유니티내의 다른 오브젝트의 특정함수를 호출하는 방법은 여러가지가 있다.

그중 가장 간단한 방법인 SendMessage를 사용하는 방법을 배워보자.


using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
void ApplyDamage(float damage) {
print(damage);
}
void Awake() {
gameObject.SendMessage("ApplyDamage", 5.0F);
}
}

이런식으로 gameObject의 ApplyDamage함수를 호출할수있다.

마찬가지로 만약 위의 Example가 할당된 오브젝트와 부딪히면 위의 ApplyDamage함수를 호출하는 함수를 만들어보겠습니다.


using UnityEngine;
using System.Collections;

public class Exapmle2 : MonoBehaviour {

	void OnTriggerEnter(Collider coll)
	{
		coll.SendMessage("ApplyDamage", 5.0F, SendMessageOptions.DontRequireReceiver);
	}	
}

큐브를 두개 만듭니다 왼쪽이 Example2 큐브, 오른쪽이 Example 큐브입니다.


각 큐브 인스펙터 값입니다. 리지드 바디 추가후 Use Gravity off 설정. 그리고 박스 콜라이더 is trigger 체크를 했습니다.

박스 콜라이더 isTrigger체크시 물체와 물체가 충돌하면 위의 OnTriggerEnter 함수가 실행됩니다.(물체에 하나만 isTrigger체크만 되도 마찬가지로 onTriggerenter 함수가 호출 됩니다.)




처음 실행시 Example에서 한번 ApplyDamage 함수가 호출되면 위처럼 물체가 서로 겹치면 onTriggerenter함수가 발동되며 coll.SendMesage에 의해서 함수가 한번더 호출 됩니다.




SendMessage()로 호출할 함수는 큰따옴표("")로 묶어서 입력하며 다음과 같은 형식으로 사용합니다.

1. <오브젝트>.SendMessage("함수명",<옵션>);

2. <오브젝트>.SendMessage("함수명", "전달인자", <옵션>);


SendMessage로 전달하는 인수는 하나만 가능하므로 여러개의 값을 전달할시에는 배열등을 사용하여 전달합니다.

옵션은 두종류가 있으며, SendMessageOptions.DontRequireReceiver 옵션은 함수의 처리 결과를 호출 프로그램에 전달할 필요가 없는 경우에 사용되며, 이 옵션은 SendMessageOptions.RequireReceiver 옵션에 비해서 실행속도가 빠르다는 장점이 있습니다.

Trackback 0 And Comment 0

폭파 불꽃 관련 파티클 이미지

|


Explision.unitypackage


Trackback 0 And Comment 0

유니티의 오브젝트 크기, 위치, 색 설정하기

|


오브젝트의 크기는 localScale 속성으로 설정합니다.

오브젝트의 색상은(Red, Green, Blue, Alpha)로 설정하며, 각각 0~1 사이의 값으로 지정합니다.(메트리얼이 존재해야됩니다.)

오브젝트의 위치는 position 속성으로 설정합니다.





Transform.localScale

Vector3 localScale;
Description

The scale of the transform relative to the parent.

using UnityEngine;
using System.Collections;

public class Example : MonoBehaviour {
    void Example() {
        transform.localScale += new Vector3(0.1F, 0, 0);
    }
}




Trackback 0 And Comment 0

유니티 WorldToScreenPoint를 사용하여 좌우 이동을 제한하는 스크립트

|

키보드로 오브젝트를 이동시 좌우나 앞으로의 이동을 화면 안으로 제한하고 싶을 경우 쓰는 스크립트





Camera.main.WorldToScreenPoint함수의
Camera.main의 의미는 태그가 mainCamera로 설정된 카메라를 의미합니다.
메인카메라를 기준으로 하는 월드 좌표를 스크린 좌표로 변행해주는 함수 입니다.
if문에서는 왼쪽으로 이동시(key < 0 ) 위치를 제한( pos.x > 0) 해주고 오른쪽으로 이동시(key > 0 ) 위치를 제한(pos.x < Screen.width)해주고 있습니다.

이와 같이 오브젝트의 위치를 스크린 좌표로 변환하면 화면 크기에 상관없게 오브젝트의 위치를 제한 할 수 있습니다.




Camera.WorldToScreenPoint


Vector3 WorldToScreenPoint(Vector3 position);
Description

Transforms position from world space into screen space.

Screenspace is defined in pixels. The bottom-left of the screen is (0,0); the right-top is (pixelWidth,pixelHeight). The z position is in world units from the camera.
using UnityEngine;
using System.Collections;

public class Example : MonoBehaviour {
    public Transform target;
    void Update() {
        Vector3 screenPos = camera.WorldToScreenPoint(target.position);
        print("target is " + screenPos.x + " pixels from the left");
    }
}


Trackback 0 And Comment 0

유니티 오브젝트 키보드로 움직이기

|
 
float amtMove = speed * Time.smoothDeltaTime; 는 오브젝트가 이동할시 프레임의 영향을 받지 않도록 일정한 속도로 움직이기 위해 설정된 값입니다. 

float key = Input.GetAxis("Horizontal");는 유니티 내의 Input관련 Horizontal로 정의된 값입니다. 키보드의 좌우 키를 누르거나 a d 키를 누를시 발동됩니다. 값은 -1~1사이 값입니다. 

transform.Translate(Vector3.right * amtMove * key , Space.World); 은 물체의 이동을 담당하는 함수입니다. Space.World는 월드 좌표 기준으로 이동한다는 의미입니다.



Trackback 0 And Comment 0

배경화면 스크롤 방법

|

스크롤방법

1. 오브젝트를 직접 이동하는 방법(Transform 사용)

2. 오브젝트의 메트리얼의 Offset 값을 이동하는 방법


2번의 방법이 구현이 간단함.

배경이 지속적으로 변하는 게 아니라면 2번의 방법으로 구현하는게 좋은거 같습니다.

아래는 종 방향으로 스크롤 되는 예제입니다.





횡방향인 경우에는 

로 하면 되겠죠?


메트리얼의 Offset은 ViewPort 좌표계를 사용합니다 0~1 인 상대좌표계이죠.

만약에 1이상인 경우에는 정수 부분을 무시해 버립니다. 그래서 위의 스크립트가 정상 작동 하는 것이죠.


Trackback 0 And Comment 0

제트기 뒤 분화구 파티클 패키지 파일

|


JetFire.unitypackage


Trackback 0 And Comment 0
prev | 1 | 2 | next