티스토리 뷰

반응형

Gamelog 02. 스크립트를 깔짝대본다.

 

Gamelog 02. '스크립트로 동작시키자'를 따라해본다.

스크립트

'무엇을 할 것인가?' 를 정의하는 것이며, C#으로 되어 있음

예시)

  • Forever_MoveH: 계속, 수평으로 이동한다.
  • Forever_Rotate: 계속, 회전한다.
  • Sometime_Turn: 때때로, 돈다.
  • Sometime_Flip: 때때로, 반전한다.

 

클래스

Unity Class

하나의 기능을 가진 스크립트를 말함.

  • 클래스 이름: 영어, 첫 문자는 대문자. 클래스 이름과 파일이름은 같게.
  • 스크립트 생성시 기본 메서드: Start(), Update()
    • 이외 메서드: FixedUpdate(), OnCollisionEnter2D(), OnMouseDown(), LastUpdate()
  • 하나의 게임 오브젝트에 여러 개의 스크립트 함께 적용(어태치) 가능

 

메서드

Start()

초기 세팅

void Start () {
    this.transform.Translate(5, 0, 0); // x,y,z 축
}

Update()

1프레임마다 계속 실행

  • 1초에 60~80회 정도 실행됨
  • 시간 간격은 컴퓨터의 사양이나 그때의 처리 속도에 따라 변화함.
  • 시간 간격이 일정하지 않아 매끄럽게 움직이지 않을 수 있음
void Update () {
    this.transform.Translate(0.01f, 0, 0);
}

FixedUpdate()

1초 동안에 실행되는 횟수를 정해 실행

  • 기본적으로는 1초에 50번 실행
  • public 값 설정시, Inspector 창에서 변경 가능
public float speed = 5; // 속도값
public float angle = 90; // 각도

void FixedUpdate () {
    this.transform.Translate(speed/50, 0, 0); // 수평이동
    this.transform.Translate(0, speed/50, 0); // 수직이동
    this.transform.Rotate(0, 0, angle/50); // 2D 게임 이미지 회전시 z값 사용
    this.GetComponent<SpriteRenderer>().flipY = true; // 상하반전
    this.GetComponent<SpriteRenderer>().flipX = true; // 좌우반전
}

 

 

Unity public setting

  • 일정 조건 충족시 실행
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TestScript : MonoBehaviour {

	public float angle = 90; // 각도
	public int maxCount = 50; // 빈도
	
	int count = 0;

	// Use this for initialization
	void Start () {
		count = 0;	// reset
	}

	void FixedUpdate () {
		count = count + 1;
		if (count >= maxCount)
		{
			this.transform.Rotate(0, 0, angle);
			count = 0;
		}
	}
}

Unity 스크립트

  • 일정 조건 충족 응용하기
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TestScript : MonoBehaviour {

	public float speed = 10;		// 속도
	public int maxCount = 180;		// 수평이동 Max Count

	int count = 0;					// 수평이동 Count
	bool flipFlag = false;

	// Use this for initialization
	void Start () {
		count = 0;	// reset
	}

	void FixedUpdate () {
		count = count + 1;
		this.transform.Translate(speed/50, 0, 0);
		if (count >= maxCount)
		{
			count = 0;
			this.transform.Rotate(0,0,180);
			flipFlag = !flipFlag;
			this.GetComponent<SpriteRenderer>().flipY = flipFlag;
		}
	}
}

Unity 스크립트

 

아직 단축키도 잘 모르고 비효율이 많은 것 같지만, 재밌었다!

반응형
댓글