일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- JWT 토큰
- pnpm
- ChatGPT
- TS70016
- 개발
- 마이너스의 의미
- c#
- 패키지관리자
- 아들에게
- 메일수신거부 프로세스
- 개발언어
- 터미널옵션
- @types
- asp.net core
- ts7016
- .netcore
- 초보
- locofy.ai
- 웹퍼블리셔종말
- 하마모양
- nodejs
- 게시판
- 스케쳐스아치핏
- json pretty
- 곧아빠됨
- 메일수신거부처리
- classNames
- 웹퍼블리셔전망
- JWT 토큰 인증 로그인 쿠키 설정
- typesinstall
- Today
- Total
I am maker
유니티 자습서 비행기게임 Space Shooter tutorial 본문
Introduction to Space Shooter
http://unity3d.com/kr/learn/tutorials/projects/space-shooter/introduction?playlist=17147
프로젝트 목표: 우리가 익히아는 종스크롤 비행기 게임. 위에서 적들이나오고 좌우로 피하고 미사일쏘고 적들도 미사일쏘고.
Setting up the project
무엇을 배웠나?
-프로젝트 만들기.
-에셋 다운로드 및 에셋 임포트
-빌드타겟을 설정하는 것은 중요하다. 유니티는 모든 플랫폼에 동일 코드로 작동하지만 빌드는 정하고 해야한다.
-플레이어세팅 에서 배포관련 사항들을 정할 수 있다.
-레이아웃 변경으로 화면을 크게크게 볼 수 있다.
The player gameobject
http://unity3d.com/kr/learn/tutorials/projects/space-shooter/the-player-gameobject?playlist=17147
학습목표 : 플레이어 게임오브젝트를 설정한다. 메쉬모델, 콜라이더 등등의 빌트인 컴포넌트들을 이용한다.
무엇을 배웠나?
-리지드바디
-메쉬콜라이더
* 성능을위해서는 메쉬보다는 다른 기본 콜라이더를 사용하도록하자
* 어쩔수없이 메쉬를 쓸경우 간소화시킨 메쉬를 쓰자.
-캡슐콜라이더
Camera and lighting
http://unity3d.com/kr/learn/tutorials/projects/space-shooter/camera-and-lighting?playlist=17147
학습목표 : 메인카메라와 빛을 설정한다.
무엇을 배웠나?
-플레이어를 돌릴수도 있지만, 카메라를 돌리는게 더 편하네.
-카메라는 perspective(원근법) orthographic(직교법)이 있네. 2D게임처럼 보이려면 직교법으로!
-플레이어의 위치는 원점위치인게 프로젝트 관리와 보기에 더 좋다
-라이트는 3개로 메인라이트(우측 후면에서 강한빛으로) 채우기라이트(좌측으로 반사광처럼 색깔도 푸르스름) 가장자리라이트(비행기 아래에서 쏴준다 약하게)
-기본 빛을 끄는 방법 window - lightning -Ambient Intensity = 0
Adding a background
http://unity3d.com/kr/learn/tutorials/projects/space-shooter/adding-a-background?playlist=17147
학습목표: 게임화면 배경을 깔자
무엇을 배웠나?
-쿼드
-텍스쳐를 입히는 방법: 그냥 드레그앤 드롭 하면 자동으로 머티리얼 생성되면서 입혀짐
-텍스쳐 미리보기: 사이즈 및 크기를 볼 수 있다
-스케일 할 때는 이미지 비에 맞도록 하자
-쉐이더 디퓨즈 : 무광, 스펙큘라 : 빛나는 플라스틱, unlit/texture : 텍스쳐 원본대로
Moving the player
http://unity3d.com/kr/earn/tutorials/projects/space-shooter/moving-the-player?playlist=17147
학습목표: 비행기를 움직여보자.
무엇을 배웠나?
-스크립트의 이름은 파스칼 규칙으로 하자. PlayerController 이런게 파스칼.
-RIgidbody.velocity 를 변경하여 플레이어를 움직이자.
-Mathf.Clamp(현재값, 최소값, 최대값) =>플레이어가 화면을 못벗어나게하자.
-Custom Class를 인스펙터에서 확인하려면 직렬화 해야한다. 클래스명위에 [Serializeable]
using UnityEngine;
[System.Serializable]//인스펙터에서 보이도록
public class Boundary
{
public int xMin, xMax, zMin, zMax;
}
public class PlayerController : MonoBehaviour {
public float Speed=1;
public float Tilt = 0;
public Boundary boundary;
Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();//rigidbody 컴포넌트를 가져온다.
}
void FixedUpdate()//물리법칙에 관련된 업데이트 코드들은 FixedUpdate
{
Vector3 MoveMent;
MoveMent = new Vector3(Input.GetAxis("Horizontal") ,0.0f, Input.GetAxis("Vertical"));
rb.velocity = Speed*MoveMent;//플레이어를 움직인다.
rb.position = new Vector3(
Mathf.Clamp(rb.position.x, boundary.xMin, boundary.xMax),
0.0f,
Mathf.Clamp(rb.position.z, boundary.zMin, boundary.zMax)
);//플레이어가 화면 가장자리를 벗어나지 않도록한다.
rb.rotation=Quaternion.Euler(0.0f,0.0f,rb.velocity.x*-Tilt);//플레이어의 화면을 돌린다.
}
}
Creating shots
-플레이중 프리팹을 인스펙터에 놓으면, 객체가 실시간으로 생성되는것을 볼 수 있다.
using UnityEngine;
public class Mover : MonoBehaviour {
Rigidbody rb;
public int Speed;
// Use this for initialization
void Start () {
rb = GetComponent<Rigidbody>();
rb.velocity= new Vector3(0.0f, 0.0f, Speed); //미사일의 움직임.
}
}
Shooting Shots
-Spawn 포인트에서 미사일을 발사하는 기법
-미사일 발사시 시간 제한 두는 기법
using UnityEngine;
[System.Serializable]//인스펙터에서 보이도록
public class Boundary
{
public int xMin, xMax, zMin, zMax;
}
public class PlayerController : MonoBehaviour {
public float Speed=1;
public float Tilt = 0;
public Boundary boundary;
public float fireRate;
public GameObject Bolt;//미사일
public Transform ShowSpawn;//미사일이 나오는 부분. 트랜스폼으로 선언한 경우 자동으로 unity에서 트랜스폼 컴포넌트를 찾아온다.
Rigidbody rb;
private float nextFire;
void Start()
{
rb = GetComponent<Rigidbody>();//rigidbody 컴포넌트를 가져온다.
}
void Update()
{
//미사일을 발사한다.
if (Input.GetButton("Fire1") && Time.time > nextFire)
{
nextFire = Time.time + fireRate;//미사일 발사 속도를 제한한다. fireRate가 2000인경우 nextFire는 현재시간+2000초 후에 위의 if문을 통과한다.
Instantiate(Bolt, ShowSpawn.position, ShowSpawn.rotation);//미사일 발사! 스폰포인트에서 미사일이 나간다.
}
}
void FixedUpdate()//물리법칙에 관련된 업데이트 코드들은 FixedUpdate
{
Vector3 MoveMent;
MoveMent = new Vector3(Input.GetAxis("Horizontal") ,0.0f, Input.GetAxis("Vertical"));
rb.velocity = Speed*MoveMent;//플레이어를 움직인다.
rb.position = new Vector3(
Mathf.Clamp(rb.position.x, boundary.xMin, boundary.xMax),
0.0f,
Mathf.Clamp(rb.position.z, boundary.zMin, boundary.zMax)
);//플레이어가 화면 가장자리를 벗어나지 않도록한다.
rb.rotation=Quaternion.Euler(0.0f,0.0f,rb.velocity.x*-Tilt);//플레이어의 화면을 돌린다.
}
}
Boundary
http://unity3d.com/kr/learn/tutorials/projects/space-shooter/boundary?playlist=17147
학습목표: 게임 구역 둘레에 박스를 만들어서 떠나는 물체들을 파괴시켜버리자.
무엇을 배웠나?
-OnTriggerExit
CREATING HAZARDS
http://unity3d.com/kr/learn/tutorials/projects/space-shooter/creating-hazards?playlist=17147
학습목표: 운석으로 사용자를 위협하자.
무엇을 배웠나?
-Random.insideUnitSphere
-Drag, Angular Drag : 마찰력같은거.
-Debug.Log: 콘솔에 나타남
using UnityEngine;
public class DestroyByContact : MonoBehaviour {
void OnTriggerEnter(Collider other) //isTrigger=t==true일 때 들어온 충돌체 판별!
{
if (other.CompareTag("Boundary")) return; //태그명이 BOundary일 경우는 처리안함.
Destroy(other.gameObject); //닿은 놈 부셔지고
Destroy(gameObject); //소행성도 부셔지고
}
}
using UnityEngine;
public class RandomRotator : MonoBehaviour {
public float Tumble;
Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
rb.angularVelocity = Random.insideUnitSphere * Tumble;
}
}
EXPLOSIONS
GAME CONTROLLER
http://unity3d.com/kr/learn/tutorials/projects/space-shooter/game-controller?playlist=17147
학습목표: 운석을 생성하고, 점수를 표시 및 갱신하고, 게임이 끝났는지 판단하고, 게임을 재시작할 수 있게하는 컨트롤러를 만들자.
무엇을 배웠나?
-Random.Range
-Quaternion.identity
using UnityEngine;
using System.Collections;
public class GameController : MonoBehaviour {
public GameObject hazard;//장애물
public Vector3 SpawnValues;//장애물 스폰 지점
void Start () {
spawnWaves();
}
void spawnWaves()
{
Vector3 spawnPosition = new Vector3(Random.Range(-SpawnValues.x,SpawnValues.x),SpawnValues.y,SpawnValues.z);
Quaternion spawnRotation = Quaternion.identity;//회전없음
Instantiate(hazard, spawnPosition, spawnRotation);
}
}
SPAWNING WAVES
http://unity3d.com/kr/learn/tutorials/projects/space-shooter/spawning-waves?playlist=17147
학습목표: 무한 운석 웨이브를 쏟아내보자!
무엇을 배웠나?
-StartCoroutine
-Destory(물체, 수명)
public class GameController : MonoBehaviour
{
public GameObject hazard;
public Vector3 spawnValues;
public int hazardCount;
public float spawnWait;
public float startWait;
public float waveWait;
void Start ()
{
StartCoroutine (SpawnWaves ()); //쓰레드같은거
}
IEnumerator SpawnWaves () //IEnumerator로 해야함.
{
yield return new WaitForSeconds (startWait);
while (true)
{
for (int i = 0; i < hazardCount; i++)
{
Vector3 spawnPosition = new Vector3 (Random.Range (-spawnValues.x, spawnValues.x), spawnValues.y, spawnValues.z);
Quaternion spawnRotation = Quaternion.identity;
Instantiate (hazard, spawnPosition, spawnRotation);
yield return new WaitForSeconds (spawnWait);
}
yield return new WaitForSeconds (waveWait);
}
}
}
AUDIO
http://unity3d.com/kr/learn/tutorials/projects/space-shooter/audio?playlist=17147
학습목표 : 오디오 효과를 추가하자. 무기, 폭발, 배경음악.
무엇을 배웠나?
-오디오를 적용하는 방법 : 그냥 드래그앤 드롭
-Play ON Awake 객체가 생기자마자 재생됨. 파괴음 배경음
-Loop 배경음같이 반복
using UnityEngine;
[System.Serializable]//인스펙터에서 보이도록
public class Boundary
{
public int xMin, xMax, zMin, zMax;
}
public class PlayerController : MonoBehaviour {
public float Speed=1;
public float Tilt = 0;
public Boundary boundary;
public float fireRate;
public GameObject Bolt;//미사일
public Transform ShowSpawn;//미사일이 나오는 부분. 트랜스폼으로 선언한 경우 자동으로 unity에서 트랜스폼 컴포넌트를 찾아온다.
Rigidbody rb;
private float nextFire;
new AudioSource audio; //Unity 5.x부터는 audio.Play가 안써짐. 쓰려면 이렇게 GetComponent한 후 사용해야함. audio라고 기존에있던거랑 이름 똑같아서 new붙음. 안붙여도 잘돌아감.
void Start()
{
rb = GetComponent<Rigidbody>();//rigidbody 컴포넌트를 가져온다.
audio = GetComponent<AudioSource>();
}
void Update()
{
//미사일을 발사한다.
if (Input.GetButton("Fire1") && Time.time > nextFire)
{
nextFire = Time.time + fireRate;//미사일 발사 속도를 제한한다. fireRate가 2000인경우 nextFire는 현재시간+2000초 후에 위의 if문을 통과한다.
Instantiate(Bolt, ShowSpawn.position, ShowSpawn.rotation);//미사일 발사! 스폰포인트에서 미사일이 나간다.
audio.Play();//미사일 발사음
}
}
void FixedUpdate()//물리법칙에 관련된 업데이트 코드들은 FixedUpdate
{
Vector3 MoveMent;
MoveMent = new Vector3(Input.GetAxis("Horizontal") ,0.0f, Input.GetAxis("Vertical"));
rb.velocity = Speed*MoveMent;//플레이어를 움직인다.
rb.position = new Vector3(
Mathf.Clamp(rb.position.x, boundary.xMin, boundary.xMax),
0.0f,
Mathf.Clamp(rb.position.z, boundary.zMin, boundary.zMax)
);//플레이어가 화면 가장자리를 벗어나지 않도록한다.
rb.rotation=Quaternion.Euler(0.0f,0.0f,rb.velocity.x*-Tilt);//플레이어의 화면을 돌린다.
}
}
COUNTING POINTS AND DISPLAYING THE SCORE
ENDING THE GAME
//튜토리얼에는 ContactByDestroy에서gameOver 처리했는데. 플레이어가 죽어야 게임오버인게 직관적인거 같아서 이렇게 했어염. 혹시 모르죠 다음 강좌에서 고칠지도?
public class PlayerController : MonoBehaviour {
void OnDestroy()
{
gameController.GameOver();
}
BUILDING THE GAME
html로 만들어지다니 놀랍습니다 오호오오
근데 엣지에서는 실행안되네요 ㅎㅎ
EXTENDING SPACE SHOOTER: ENEMIES, MORE HAZARDS, SCROLLING BG
MOBILE DEVELOPMENT: CONVERTING SPACE SHOOTER TO MOBILE
http://unity3d.com/kr/learn/tutorials/modules/beginner/live-training-archive/space-shooter-to-mobile?playlist=17147
학습목표: 모바일 버전으로 컨버팅 해보자.
무엇을 배웠나?
-accellerate 사용법
-터치패드 생성
'Unity' 카테고리의 다른 글
Google Play Games plugin 구글 플레이서비스 플러그인 (0) | 2016.03.04 |
---|---|
Accelerometer Input 모바일 가속도계 입력 (0) | 2016.03.03 |
Multi Touch Input 모바일 터치 (0) | 2016.03.03 |
유니티 자습 1 엔진 -Project Roll-a-ball (0) | 2016.03.03 |