Unity3D Tutorial
First Person Shooter Project
2D Game 변환
■ 2D Space Shooter 이용하여 3D 게임으로 변환
Main Camera
• Position: 0,0,5; Rotation: 0,0,0;
• Projection: Perspective
Background
• Position: 0,0,16; Rotation: 0,0,0; Scale: 30,30,0;
FPS Project
■ First Person Shooter Project
게임 환경 제작
• Game Object와 Material를 이용한 자체 제작
• Asset Store를 이용한 게임환경 제작
Character Controller 적용
Script를 이용한 Shooting
게임 GUI 구성
Game World 제작 준비
■ Game World 제작
File Menu Open Project “FPS3D”
Download 3DGameTemplate
• Asset Import Package Characters & ParticleSystems
• Open “1_Start.unity”
• Import Packages > Characters
• Import Packages > ParticleSystems
Asset Store에서 Asset 가져오기
■ Asset Store에서 Asset 가져오기
Select Window Asset Store
Select Categories Texture & Materials Metal
Select Top Free “Yughues Free Metal materials”
Download & Import
Character Controller
■ Character Controller 사용
2_Add_FirstPersonCharacter.unity
Delete Camera
기존 Camera 제거
1인칭 컨트롤러 추가 방법
• Standard Assets > Characters > FirstPersonCharacter 선택
• 프로젝트 뷰에서 Prefabs> “FPSController” 드래그하여 씬뷰
에 가져다 놓음 (캡슐 생김)
• Rename “Player” & Select Tag “Player”
• FirstPersonCharacter Add Component “GUI Layer”
Shooting using C# Script
■ Create Empty Object “Launcher”
Drag the Launcher object onto “FirstPersonCharacter” object
that belongs to the FPS Controller in the Hierarchy panel
■ Create Bullets Using Prefabs
Create Bullets
• Create > 3D Object > Sphere “MyBullet” scale 0.2
Attach a rigid body component to the “MyBullet”
• Component > Physics > RigidBody
Create “Prefabs”
• Create New Prefab “MyBullet”
• drag and drop the bullet game object from the Hierarchy
window onto the bullet prefab in the Project window
Delete the bullet game object in the Hierarchy window.
Shooting using C# Script
Launcher로부터 총알(Bullet) 발사
Select “Launcher” Object
Create C# Script “createMyBullet”
• Add Component > New script
• Open MonoDevelop
• “Bullet” is assigned to the prefab Bullet variable in the script
using UnityEngine;
using System.Collections;
3_Launcher.unity
public class CreateMyBullet : MonoBehaviour {
public Rigidbody prefabBullet;
public float bulletForce = 1000.0f;
void Update() {
if (Input.GetButtonDown("Fire1")) {
// 총알 오브젝트(InstanceBullet) 생성
Rigidbody instanceBullet = Instantiate(prefabBullet, transform.position, transform.rotation) as Rigidbody;
instanceBullet.AddForce(transform.forward * bulletForce); // 총알 오브젝트 앞으로 발사하는 힘 추가
Physics.IgnoreCollision ( instanceBullet.GetComponent<Collider>(),transform.root.GetComponent<Collider>() );
// Player의 Collider 와의 충돌 무시
}
}
}
충돌 파티클 생성
Explosion
■ Add Explosion Effect
Select MyBullet
Add C# Script “MyProjectile” & Open MonoDevelop
Import Standard Assets ParticleSystems
Select “Explosion” prefab Drag & Drop “Explosion” variable
using UnityEngine;
using System.Collections;
public class MyProjectile : MonoBehaviour {
public GameObject explosion;
void OnCollisionEnter( Collision collision) {
ContactPoint contact = collision.contacts[0]; // 총알과의 충돌지점
Quaternion rotation = Quaternion.FromToRotation( Vector3.up, contact.normal ); // 충돌지점의 방향
GameObject instantiatedExplosion = Instantiate(
explosion, contact.point, rotation ) as GameObject; // 충돌후 폭파(instantiateExplosion) 오브젝트 생성
Destroy(gameObject); // 총알 오브젝트 제거
}
}
충돌 파티클 제거
Explosion
■ Destroy explosion prefab
Select “Explosion” prefab
Add C# Script “ExplosionRemover” & Open MonoDevelop
using UnityEngine;
using System.Collections;
public class MyExplosionRemover : MonoBehaviour {
public float explosionTime = 1.0f;
void Start () {
// 폭파 파티클 1초후 제거
Destroy( gameObject, explosionTime );
}
}
4_Bullet_Explosion.unity
총알과의 충돌 오브젝트 (Box) 생성
Make Enemy Objects
Create Game Object Cube “MyBox”
• Attach a rigid body component to the “MyBox”
• Add Script “Mover” & “Random Rotator”
Create Prefab “Box”
• Select Box in Hierarchy View
• Drag & Drop the box in Project View
Box 오브젝트 폭파
Make Enemy Objects
5_BoxCollsion.unity
Select “MyBox”, Add Script “BoxCollsion”
• Select “explosion_player” prefab
using UnityEngine;
using System.Collections;
public class BoxCollsion : MonoBehaviour {
public GameObject explosion;
void OnCollisionEnter(Collision collision) {
if (collision.gameObject.tag == "Floor") {
return; // Floor 와의 충돌은 무시
}
if (collision.gameObject.tag == "Player") {
Instantiate (explosion, transform.position, transform.rotation);
Destroy (gameObject);
}
else {
Instantiate (explosion, transform.position, transform.rotation);
Destroy (gameObject);
Destory (collsion.gameObject);
}
}
}
총알 발사 및 폭파 사운드 추가
Add Sound
■ Import Sound File
Asset store Catagories Audio Sound FX Weapons
Select Top Free Futuristic weapon set
Download & Import
■ Shooting Sound
Select “Bullet” in Project View
• Add Component Audio Audio Source
• Select Audio Clip “weapon_player” & Check Play On Awake
■ Explosion Sound
Select “Explosion” prefab in Project View
• Add Component Audio Audio Source
• Select Audio Clip “explosion_enemy” & Check Play On Awake
Score & Health
■ Displaying GUI
Using 2DShootingGame “DisplayText”, Check “DisplayText”
Select “Player”
• FirstPersonCharacter Add Component “GUI Layer”
Using 2DShootingGame “GameController” & Check it
using UnityEngine;
using System.Collections;
public class GameController : MonoBehaviour {
public GameObject hazard;
----------------중략------------------------------------public int health=100;
void Start () {
----------------중략------------------------------------UpdateHealth ();
}
----------------중략------------------------------------public void MinusHealth(int newHealthValue) {
health -= newHealthValue;
UpdateHealth ();
}
void UpdateHealth() {
restartText.text = "Health: " + health;
}
}
Score & Health
■ Update score value
Select Prefab “Bullet”, Change Script “Projectile”
using UnityEngine;
using System.Collections;
public class Projectile : MonoBehaviour {
public GameObject explosion;
public int score=10;
private GameController gameController;
void Start() {
GameObject gameControllerObject = GameObject.FindWithTag ("GameController");
if(gameControllerObject != null) {
gameController = gameControllerObject.GetComponent<GameController>();
}
if(gameController == null)
{
Debug.Log("Cannot find 'GameController' script");
}
}
void OnCollisionEnter(Collision collision) {
----------------중략------------------------------------if (collision.gameObject.tag == "Floor") { Destroy (gameObject);
return;
}
else {
gameController.AddScore (score);
Destroy (collision.gameObject);
Destroy (gameObject);
}
}
}
Score & Health
■ Update health value
Select Prefab “Box”, Change Script “BoxCollsion”
using UnityEngine;
using System.Collections;
public class BoxCollsion : MonoBehaviour {
public GameObject explosion;
public int healthValue=10;
private GameController gameController;
void Start() {
GameObject gameControllerObject = GameObject.FindWithTag ("GameController");
if(gameControllerObject != null) {
gameController = gameControllerObject.GetComponent<GameController>();
}
if(gameController == null)
{
Debug.Log("Cannot find 'GameController' script");
}
}
void OnCollisionEnter(Collision collision) {
----------------중략------------------------------------if (collision.gameObject.tag == "Player") {
Instantiate (explosion, transform.position, transform.rotation);
gameController.MinusHealth (healthValue);
Destroy (gameObject);
if (gameController.health == 0)
gameController.GameOver ();
}
----------------중략------------------------------------}
}
FPS Demo
■ Play It!!!
Play Other!!!
© Copyright 2026 Paperzz