[5].1 νλ‘μ νΈ μμ±κ³Ό νκ²½μ€μ [5].2 νλ μ΄μ΄ μ΄λμ μ [5].3 μ΄μ μ΄λ μ μ |
[5].1 νλ‘μ νΈ μμ±κ³Ό νκ²½μ€μ
βοΈμ΄λ²μ μ§νν λ΄μ©μ 2020 λ²μ (μ΄μ) μ λν°κ° νμν©λλ€.
βοΈAndroid Build Support μ²΄ν¬ ν λ€μ΄λ‘λ μ§ν
πΆ μν κ²μ νλ‘μ νΈ μμ±νκΈ°
- Unity Hub μ€ν
- ν νλ¦Ώμ 3Dλ‘ μ§μ
- νλ‘μ νΈ μ΄λ¦μ ShootingGameμΌλ‘ μ§μ
- μμ± λ²νΌμ ν΄λ¦νμ¬ νλ‘μ νΈ μμ±
- ShootingGame μΌλ‘ νλ‘μ νΈκ° λ§λ€μ΄μ§λ©΄ μ λν°κ° μ€νλλ€.
πΆ μ μ νκ²½ μ€μ νκΈ° - μ¬ μ€μ
- Scene λ·°λ₯Ό lso λͺ¨λλ‘ λ³κ²½νκ³ κΈ°μ¦λͺ¨λ₯Ό ν΄λ¦νμ¬ νλ©΄μ΄ Back λ·°κ° λλλ‘ μ€μ
πΆ μ μ νκ²½ μ€μ νκΈ° - μΉ΄λ©λΌ μ€μ
- μ¬μλ λ°λμ νλ μ΄μμ Main Camera κ° μ‘΄μ¬
- μΉ΄λ©λΌμλ μΉ΄λ©λΌ μ½€ν¬λνΈκ° λΆμ΄ μΉ΄λ©λΌμ μν μ νλ€
- Main Camera μ Position μ κ·Έλ¦Όκ³Ό κ°μ΄ μΈν
- Projection μ Orthographics μΌλ‘ μ€μ
πΆ μ μ νκ²½ μ€μ νκΈ° - μ‘°λͺ μ€μ
- νμ΄μ΄λΌν€ μ°½μμ Direction Light λ₯Ό μ ν
- Light μ»΄ν¬λνΈλ₯Ό λΉνμ±ν ν΄μ€λ€.
- [window - Rendering - Lighting] μ°½μ μ΄μ΄μ€λ€.
- Lighting μ°½μ΄ μ΄λ¦¬λ©΄ Scene νμ 맨 νλ¨μ Auto Generate μ΅μ μ λΉνμ±ν ν΄μ€λ€.
- Environment νλͺ©μμ Environment Lighting μ Source λ₯Ό Color λ‘ λ³κ²½
- μ΄λ λνλλ Ambient ColorRGB κ°μ λͺ¨λ 255λ‘ μμ νμ¬ ν°μμΌλ‘ μ§μ
πΆ μ μ νκ²½ μ€μ νκΈ° - ν΄μλ μ€μ
- Game μ°½μμ ν΄μλ λ³κ²°μ μν΄ ν΄λ°μ ν΄μλ κ΄λ ¨ λλ‘λ€μ΄ λ©λ΄λ₯Ό μ΄μ΄ [+} λ²νΌμ λλ¬μ€λ€.
- ν΄μλλ₯Ό 640 x 960 μΌλ‘ κ°λ‘, μΈλ‘ κ°μ μ§μ νλ€.
[5].2 νλ μ΄μ΄ μ΄λ μ μ
πΆ νλ μ΄μ΄ κ²μ μ€λΈμ νΈ
- νμ΄μ΄λΌν€μ°½μμ [+] λ²νΌμ λλ¬ [3D Object - Cube]λ₯Ό μμ±νκ³ μ΄λ¦μ Playerλ‘ λ³κ²½νλ€.
- Transform κ°μ κ·Έλ¦Όμ²λΌ μ§μ νλ€.
πΆ Scripts ν΄λ μΆκ°
- νλ‘μ νΈ(Project) μ°½μμ + λ²νΌμ λλ¬ Folder λ₯Ό μ ννκ³ μ΄λ¦μ Scripts λ‘ λ³κ²½
πΆ PlayerMove μ€ν¬λ¦½νΈ μμ±
- [+] λ²νΌμ λλ¬ Scripts ν΄λ λ΄ C# Script λ₯Ό λ§λ€μ΄μ£Όκ³ μ΄λ¦μ PlayerMove λ‘ μ§μ
- PlayerMove λΌλ νμΌ μ΄λ¦κ³Ό μλ κ·Έλ¦Όμ²λΌ ν΄λμ€ μ΄λ¦μ΄ μμ ν κ°μμΌ νλ€.
πΆ PlayerMove μ€ν¬λ¦½νΈ ν λΉ
- PlayerMove μ€ν¬λ¦½νΈλ₯Ό λλκ·Ένμ¬ νμ΄μ΄λΌν€μ Player κ°μ²΄μ λλ‘
πΆ νλ μ΄μ΄ μ΄λ μν€κΈ° 1
- PlayerMove.cs μ μλ μ½λλ₯Ό μμ±νκ³ μ μ₯
- Unityλ‘ λμκ° μ€ν κ²°κ³Όλ₯Ό νμΈνλ€.
- μ€ν¬λ¦½νΈλ₯Ό μμ νμ¬, μΌμͺ½, μ, μλλ‘λ μ΄λν μ μλλ‘ μ€ν¬λ¦½νΈλ₯Ό μμ νμ¬ λ³Έλ€.
- μ½λμ Vector3.right λ₯Ό Vector3.up, Vector3.down μΌλ‘ κ΅μ°¨νλ©΄ λλ€.
π₯οΈ PlayerMove.cs νλ μ΄μ΄ μ΄λ μ½λ
public class PlayerMove : MonoBehaviour
{
void Update()
{
transform.Translate(Vector3.right * 5 * Time.deltaTime);
}
}
πΆ νλ μ΄μ΄ μ΄λ μν€κΈ° 1 - Vector
- Vector λ ν¬κΈ°μ λ°©ν₯μ κ°κ³ μλ€.
- μ¬μΉμ°μ° μ€ λνκΈ°, λΉΌκΈ°, κ³±νκΈ°(λ΄μ , μΈμ ) μ΄ κ°λ₯νλ€.
- ν¬κΈ°λ κ·Έλ¦Όμμ νλμ, λ°©ν₯μ λΉ¨κ°μ νμ΄νλ‘ νμ
πΆ νλ μ΄μ΄ μ΄λ μν€κΈ° 1 - Vector λνκΈ°
- Vector λ λͺ¨λ νμ ν©μ νν
- μ€λ₯Έμͺ½ νμ΄ν ν€μ μμͺ½ νμ΄ν ν€λ₯Ό λλ₯΄λ©΄ λκ°μ μΌλ‘ κ°λ λ°©ν₯μ λ§λ€μ΄ λΌ μ μλ€.
- 골νκ²μ, λΉκ΅¬, μ΅κ·Έλ¦¬λ²λ, ν¬νΈλ¦¬μ€ κ°μ κ²μμ μ μνλλ° μ¬μ©ν μ μλ€.
πΆ νλ μ΄μ΄ μ΄λ μν€κΈ° 1 - Vector λΉΌκΈ°
- μνλ μ§μ μΌλ‘ κ°λ λ°©ν₯μ μ°ΎμλΌ λ μ μ©νκ² μ¬μ©
- Direction = B - A μ μλ―Έλ Aκ° Bλ‘ κ°κ³ μ νλ λ°©ν₯μ μ°Ύλ μμ
- μ μλ³μλ₯Ό νμ©νμ¬ Speed μμ±μ μΈλΆμ λ ΈμΆ
- μ΄λ κ² λ ΈμΆλ μμ±μ μ λν° μλν°μμ μμ μ΄ κ°λ₯
π₯οΈ PlayerMove.csμ speed μμ± μΆκ°
public class PlayerMove : MonoBehaviour
{
// νλ μ΄μ΄κ° μ΄λν μλ ₯
public float speed = 5;
void Update()
{
transform.Translate(Vector3.right * speed * Time.deltaTime);
}
}
πΆ νλ μ΄μ΄ μ΄λ μν€κΈ° 1 - λΌμ΄νμ¬μ΄ν΄ ν¨μ (Life Cycle Fucntion)
- μ λν° κ°μ²΄μ μμ μ£ΌκΈ°
- νμμμ²λΌ νμ΄λ¨μ Start, μ΄λ€κ°λ Update, μ£½λ€λ OnDestory ν¨μλ‘ λ§€μΉλλ€.
- μ λν°μμμ μ΄λ²€νΈ ν¨μμλ μ λμ΄λ‘ Onμ λΆμ¬μ€λ€.
νμ΄λ¨ | μ΄λ€κ° | μ£½λ€ | |
λ°μ νμ | 1 | κ³μ | 1 |
λ°μ μΌμ νμΈ μ¬λΆ | 0 | 0 | X |
μ λν° ν¨μ | Start | Update | OnDestroy |
πΆ νλ μ΄μ΄ μ΄λ μν€κΈ° 1 - deltaTime
- delta λ λ³νλ κ²μ λ»νλ€.
- κ·Έλ¦Όμμ μ€κ°μ ꡬκ°λ€μ PCμμ μ΄λΉ μ²λ¦¬ν μ μλ νμ
- 첫 λ²μ§Έ κ·Έλ¦Όμ μ΄λΉ 4λ²μ μ€νν μ μκ³ , λ λ²μ§Έ κ·Έλ¦Όμ μ΄λΉ 2λ²μ μ€νν μ μκΈ°μ μ΄λΉ μμ§μΌ μ μλ κ±°λ¦¬κ° λ¬λΌμ§λ€.(νλ²μ 1mμ© μμ§μΈλ€λ©΄ μλ 4m, μλλ 2m μ΄λ)
- λκΈ°ν μ²λ¦¬λ₯Ό μν΄ κ΅¬κ°μ κ±Έλ¦° μκ°(μ 0.25, μλ 0.5)λ₯Ό κ°κ°μ μ΄λ 거리μ κ³±ν΄μ£Όλ©΄ μ΅μ’ 1mμ©μΌλ‘ μμ§μΈ κ±°λ¦¬κ° κ°μμ§λ€.
- νμ , ν¬κΈ° λ³ν μμ μλ deltaTimeμ κ³±ν΄μ£Όμ΄ λκΈ°νμμΌμΌ νλ€.
πΆ μ¬μ©μ μ λ ₯ μ²λ¦¬
- ν€λ³΄λμ μ’μ°ν€, A, D ν€μ μ λ ₯μ λμνκΈ° μν μ½λλ₯Ό μμ±
- Unityμ [Edit - Project Setting - Input Manager] μ μμ±μ λ±λ‘λμ΄ μλ Horizontal μ νμ©
π₯οΈ PlayerMove.cs μ¬μ©μ μ λ ₯ μ²λ¦¬ κ°λ‘λ°©ν₯
public class PlayerMove : MonoBehaviour
{
// νλ μ΄μ΄κ° μ΄λν μλ ₯
public float speed = 5;
void Update()
{
float h = Input.GetAxis("Horizontal");
print(h);
transform.Translate(Vector3.right * speed * Time.deltaTime);
}
}
- μν μ λ ₯μ λμνλ μ½λ μμ±
π₯οΈ PlayerMove.cs μ¬μ©μ μ λ ₯ μ²λ¦¬ μΈλ‘λ°©ν₯
public class PlayerMove : MonoBehaviour
{
// νλ μ΄μ΄κ° μ΄λν μλ ₯
public float speed = 5;
void Update()
{
float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");
print("h : " + h + ", v : " + v);
transform.Translate(Vector3.right * speed * Time.deltaTime);
}
}
πΆ λ°©ν₯ λ§λ€κΈ°
- "μ¬μ©μ μ λ ₯μ λ°λΌ λ°©ν₯ λ§λ€μ΄μ μ΄λνλ€." μ΄ λ΄μ©μ μ°λ¦¬λ ꡬν
- "λ°©ν₯ λ§λ€κΈ°" κ° μμ΄μΌ μ΄λμ΄ κ°λ₯
- μ¬μ©μ μ λ ₯μμ λ°μ κ°μ λ°©ν₯μ λ§λλ λ°μ μ¬μ©
- λ§λ€μ΄μ§ λ°©ν₯μ μ΅μ’ μ΄λ λ‘μ§μ μ μ©
π₯οΈ PlayerMove.cs λ°©ν₯μ λ΄μ λ³μ λ§λ€κΈ°
public class PlayerMove : MonoBehaviour
{
// νλ μ΄μ΄κ° μ΄λν μλ ₯
public float speed = 5;
void Update()
{
float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");
Vector3 dir = Vector3.right * h + Vector3.up * v;
transform.Translate(dir * speed * Time.deltaTime);
}
}
- Vector3.right * h λ₯Ό x, y, z μ λν κ° μ±λΆμ κ°μΌλ‘ ννν΄ λ³΄λ©΄ (1, 0, 0) * h = (h, 0, 0) μ΄ λλ€.
- Vector3.up * v λ (0, 1, 0) * v = (0, v, 0) λλ€.
- λμ ν©νλ©΄ (h, 0, 0) + (0, v, 0) = (h, v, 0) μ΄ λλ―λ‘.
- μ€ν¬λ¦½νΈλ₯Ό μ½λμ²λΌ κ° μ±λΆμΌλ‘ λ³κ²½ν μ μλ€.
π₯οΈ PlayerMove.cs λ°©ν₯μ κ°μ±λΆμΌλ‘ μ μ
public class PlayerMove : MonoBehaviour
{
// νλ μ΄μ΄κ° μ΄λν μλ ₯
public float speed = 5;
void Update()
{
float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");
Vector3 dir = new Vector3(h, v, 0);
transform.Translate(dir * speed * Time.deltaTime);
}
}
πΆ νλ μ΄μ΄ μ΄λ μν€κΈ° 2
- 물체λ₯Ό μ΄λνκΈ° μν 물리 λ²μΉμΌλ‘ μ΄λ, μλ, ν μ κ΄ν 곡μμ μ¬μ©νλ€.
- P λ μμΌλ‘μ μμΉ, P0 λ νμ¬, v λ μλ, t λ μκ°μ μλ―Έ
- F λ ν, m μ μ§λ, a λ κ°μλλ₯Ό μλ―Έ
P = P0 + vt v = v0 + at F = ma |
- Translate ν¨μλ₯Ό P = P0 + vt 곡μμΌλ‘ λ³ννμ¬ μμ±
π₯οΈ PlayerMove.cs μ΄λ곡μμΌλ‘ μ½λ λ³ν
public class PlayerMove : MonoBehaviour
{
// νλ μ΄μ΄κ° μ΄λν μλ ₯
public float speed = 5;
void Update()
{
float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");
Vector3 dir = new Vector3(h, v, 0);
// P = P0 + vt 곡μμΌλ‘ λ³κ²½
transform.position += dir * speed * Time.deltaTime;
}
}
[5].1 νλ‘μ νΈ μμ±κ³Ό νκ²½μ€μ
πΆ Bullet μμ±
- νμ΄μ΄λΌν€ ν΄λ°μ + λ²νΌμ μ ννμ¬ Cube λ₯Ό νλ λ§λ€μ΄ μ£Όκ³ μ΄λ¦μ Bullet μΌλ‘ λ³κ²½
πΆ Bullet μμΉ μ€μ
- Bullet μ Transform μ 보λ₯Ό λ³κ²½ν΄ μ£Όλλ‘ νλ€.
- μ΄μμ΄ μ 보μ΄λλ‘ μμΉλ₯Ό λ³κ²½νκ³ μ΄μμ ν¬κΈ°λ λ³κ²½ν΄ μ£Όλλ‘ νλ€.
πΆ Bullet μ€ν¬λ¦½νΈ μμ±
- Project μ°½μ ν΄λ° λ²νΌμΈ + λ₯Ό λλ¬ Scripts ν΄λμ C# μ€ν¬λ¦½νΈλ₯Ό νλ λ§λ€μ΄ μ£Όκ³ μ΄λ¦μ Bullet μΌλ‘ λ³κ²½
πΆ Bullet μ€ν¬λ¦½νΈ ν λΉ
- Bullet μ€ν¬λ¦½νΈλ₯Ό μ‘μμ λλκ·Έ μ€ λλ‘νμ¬ Bullet κ²μ μ€λΈμ νΈμ μ»΄ν¬λνΈλ‘ λΆμ¬μ€λ€.
πΆ λͺ©νμ λ°λ₯Έ κ΅¬μ± μμ
λͺ©ν | μλ‘ κ³μ μ΄λνκ³ μΆλ€. |
νμ μμ± | μ΄λ μλ |
μμ | β λ°©ν₯ ꡬνκΈ° β‘ μ΄λνκΈ° |
πΆ μ΄λμλ μμ± μΆκ°
- μ λν° μλν° μμ λ ΈμΆνμ¬ κΈ°νμκ° μμ ν μ μλλ‘ μ κ·Ό μ νμλ₯Ό public λ‘ νμ¬ speed λ³μλ₯Ό νλ λ§λ λ€.
π₯οΈ Bullet.cs μ΄λμλ μμ± μΆκ°
public class Bullet : MonoBehaviour
{
//νμμμ± : μ΄λμλ
public float speed = 5;
}
- λΌμ΄νμ¬μ΄ν΄ ν¨μ μ€ μ΄μκ°λ μ€ κ³μ νΈμΆλλ ν¨μλ Update μ΄κΈ° λλ¬Έμ μ΄ κ³³μ ꡬν λΆλ₯Ό μΆκ°
- λ¨Όμ μλ‘ κ°λ up λ°©ν₯μ ꡬνκ³ μ΄λ 곡μ P = P0 + vtλ₯Ό μ΄μ©νμ¬ ν΄λΉ λ°©ν₯μΌλ‘ μ΄λ
π₯οΈ Bullet.cs μλ‘ κ³μ μ΄λνκΈ° κΈ°λ₯ ꡬν
public class Bullet : MonoBehaviour
{
//νμμμ± : μ΄λμλ
public float speed = 5;
// Update is called once per frame
void Update()
{
// 1. λ°©ν₯μ ꡬνλ€.
Vector3 dir = Vector3.up;
// 2. μ΄λνκ³ μΆλ€. 곡μ P = P0 + vt
transform.position += dir * speed * Time.deltaTime;
}
}
μ΄λ² μκ°μλ νλ μ΄μ΄, μ΄μ μ΄λ μ μμ ν΄λ³΄μλλ°μ!
본격μ μΌλ‘ κ²μμ ꡬμ±νλ μμλ₯Ό λ§λ€κΈ° μμνλ κ²μ΄ 보μ¬μ μ κΈ°νκ³ μ€λ λ€μ π
물리 곡μμ μ½λμ μ μ©νλ κ²μ΄ μΈμκΉμμ΅λλ€
μΆκ°λλ λ΄μ©μ΄ λ§μμ§λ λ§νΌ μμΌλ‘ λ μ΄μ¬ν 볡μ΅νκ³ λ°λΌκ°κ² μ΅λλ€!
κΈ μ½μ΄μ£Όμ μ κ°μ¬ν©λλ€ πβοΈ
'μμΈμ¬μλνκ΅ SWU > 2023 μ¬λ¦λ°©ν SWμ¬κ΄νκ΅ Programing GURU' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[7] μν κ²μ μ μ (3) (0) | 2023.07.06 |
---|---|
[6] μν κ²μ μ μ (2) (2) | 2023.07.06 |
[4] C# μ€ν¬λ¦½νΈ (3) (6) | 2023.06.30 |
[3] C# μ€ν¬λ¦½νΈ (2) (6) | 2023.06.29 |
[2] C# μ€ν¬λ¦½νΈ (1) (6) | 2023.06.28 |