오늘 학습 키워드

유니티 심화 팀 프로젝트

오늘 학습 한 내용을 나만의 언어로 정리하기

정리된 클래스 다이어그램

---

config:

  class:

    hideEmptyMembersBox: true

  layout: dagre

---

classDiagram

direction TB

    class GameManager {

    }

    class MapManager {

    }

    class PlayerManager {

    }

    class PlayerData {

    }

    class Player {

    }

    class SceneLoadManager {

    }

    class Monster {

    }

    class MonsterAI {

    }

    class BehaviourTree {

    }

    class EliteMonsterAI {

    }

    class WarriorMonsterAI {

    }

    class LauncherMonsterAI {

    }

    class Node {

    }

    class Node_2["Node"] {

    }

    class Node_3["Node"] {

    }

    class MonsterWeapon {

    }

    class Bullet {

    }

    class MeleeWeapon {

    }

    class MonsterAnimator {

    }

    class MonsterAttackProxy {

    }

    class PlayerController {

    }

    class PlayerStat {

    }

    class PlayerAnimation {

    }

    class PlayerInteract {

    }

    class Shield {

    }

    class MapData {

    }

    class BaseScene {

    }

    class Portal {

    }

    class Water {

    }

    class Trap {

    }

    class MonsterSpawnData {

    }

    class UIManager {

    }

    class BaseUI {

    }

    class PlayerWeaponHitbox {

    }

    PlayerData -- PlayerManager

    PlayerManager -- Player

    Monster -- MonsterAI

    BehaviourTree -- MonsterAI

    MonsterAI <|-- EliteMonsterAI

    MonsterAI <|-- WarriorMonsterAI

    MonsterAI <|-- LauncherMonsterAI

    WarriorMonsterAI o-- Node

    EliteMonsterAI o-- Node_2

    LauncherMonsterAI o-- Node_3

    Monster -- MonsterWeapon

    MonsterWeapon <|-- Bullet

    MonsterWeapon <|-- MeleeWeapon

    Monster -- MonsterAnimator

    MonsterAnimator -- MonsterAttackProxy

    Player -- PlayerController

    Player -- PlayerStat

    Player -- PlayerAnimation

    Player -- PlayerInteract

    Player -- Shield

    MapManager o-- MapData

    SceneLoadManager o-- BaseScene

    MapData -- Portal

    MapData -- Water

    MapData -- Trap

    MapData -- MonsterSpawnData

    UIManager o-- BaseUI

    Player -- PlayerWeaponHitbox

    GameManager -- PlayerData

데이터 저장/불러오기

// PlayerManager.cs
public void SaveData()  
{  
    // Player == null => 게임 시작 창에서 끈거  
    if (Player == null) return;  
      
    Data.health = Player.stat.currentHP;  
    Data.runeOwned = runeOwned;  
    Data.coin = coin;  
    Data.shieldCount = Shield.RemainShield;  
      
    var str = JsonUtility.ToJson(Data, true);  
    File.WriteAllText(Path.SavePath, str);  
    Debug.Log("저장 완료" + Path.SavePath);  
}  
  
public void LoadData()  
{  
    if (File.Exists(Path.SavePath))  
    {  
        string str = File.ReadAllText(Path.SavePath);  
        PlayerData data =  JsonUtility.FromJson<PlayerData>(str);  
        Data = data;  
        SetData();  
    }  
    else  
    {  
        NewData();  
    }  
}  
  
public void SetData()  
{  
    for (int i = 0; i < Data.runeOwned.Length; i++)  
    {   
        SetRuneOwnedIndex(i, Data.runeOwned[i]);  
    }  
    SetCoin(Data.coin);  
    Shield.GetOldShield(Data.shieldCount);  
    Player.SetHealth(Data.health);  
}  
  
public void NewData()  
{  
    Data = new PlayerData  
    {  
        runeOwned = null,  
        coin = startCoin,  
        health = startHealth  
          
    };  
      
    var str = JsonUtility.ToJson(Data, true);  
    File.WriteAllText(Path.SavePath, str);  
    Debug.Log("저장 완료" + Path.SavePath);  
      
    LoadData();  
}

학습하며 겪었던 문제점 & 에러

문제 1

  • 문제&에러에 대한 정의

Trigger Stay가 안불렸음

  • 해결 방법

rigidbody가 자고있었음 그래서 깨워줌

if(rb.IsSleeping())  
    rb.WakeUp();
  • 새롭게 알게 된 점

rigidbody는 불필요한 연산을 피하기 위해 알아서 잠듬

  • 이 문제&에러를 다시 만나게 되었다면?

플레이어처럼 중요한 애는 최대한 깨어있도록 함