
오늘 학습 키워드
유니티 심화 팀 프로젝트, 데이터 특강 (Excel to Json)
오늘 학습 한 내용을 나만의 언어로 정리하기
유니티 심화 팀 프로젝트
또 바뀐 BT
- 데미지 받는건 실시간 처리하고, 패링으로 인한 스턴을 처리해야함

스턴 만들기
// CheckStunNode.cs
public class CheckStunNode : Node
{
private MonsterAI monsterAI;
public CheckStunNode(MonsterAI monsterAI)
{
this.monsterAI = monsterAI;
}
public override NodeState Evaluate()
{
if (monsterAI.Monster.IsStunned)
{
state = NodeState.Success;
}
else
{
state = NodeState.Failure;
}
return state;
}
}
// StunWaitNode.cs
public class StunWaitNode : Node
{
private MonsterAI monsterAI;
private float waitTime;
private float startTime;
private bool isStarted = false;
public StunWaitNode(MonsterAI monsterAI, float waitTime)
{
this.waitTime = waitTime;
this.monsterAI = monsterAI;
startTime = 0;
}
public override NodeState Evaluate()
{
if (!isStarted)
{
startTime = Time.time;
monsterAI.Damaged();
monsterAI.Monster.Animator.animator.speed = 0f;
isStarted = true;
}
if (Time.time - startTime >= waitTime)
{
isStarted = false;
startTime = 0;
state = NodeState.Success;
monsterAI.Monster.Animator.animator.speed = 1f;
monsterAI.Monster.IsStunned = false;
monsterAI.Monster.Animator.StopAnimation(monsterAI.Monster.Animator.data.StunnedHash);
return state;
}
state = NodeState.Running;
return state;
}
}보스 몬스터?
- 근거리 몬스터랑 원거리 몬스터 합쳐서 만듬
데이터 특강 (Excel to Json)
-
게임 데이터 : 각 아이템이 어떤 아이콘을 가지고 있는지, 가격은 얼미인지 등 개발자가 준비해 두는 고정된 데이터
-
유저 데이터 : 유저의 행동에 따라 변하는 데이터
-
오늘 할 일 : 컴퓨터에 있는 파일을 유니티에서 활용가능한 데이터로 가공하는 것
- SO : 빠름. 타입 체크에 강함.
- JSON : 서버랑 통신하기에도 좋음, 근데 연산 비용 듬
- 엑셀 파일을 만든다.
- 엑셀 파일에 맞게 Serializable한 클래스를 만들어준다.
- 엑셀 파일 우클릭 후 Create> ExcelAssetScript 하면 알아서 스크립트 생성됨.
- 엑셀 파일 우클릭 후 Reimport 하면 SO 자동 생성됨
학습하며 겪었던 문제점 & 에러
문제 1
- 문제&에러에 대한 정의
몬스터 공격 구현을 하려는데 콜라이더가 달린 오브젝트를 껐다 켰다 했는데, 플레이어가 움직이지 않으면 플레이어의 콜라이더를 검출하지 못하는 현상이 있었음
- 해결 방법
콜라이더가 달린 오브젝트를 껐다 키지 말고, 콜라이더 컴포넌트만 껐다 키기
- 이 문제&에러를 다시 만나게 되었다면?
컴포넌트만 껐다 킬 수 있다는걸 잊지 말기
문제 2
- 문제&에러에 대한 정의
스프라이트 렌더러의 색상을 바꿔도 자꾸 자동으로 기본 색상 (흰색)으로 돌아감
- 해결 방법
public void SetColor(Color color)
{
var block = new MaterialPropertyBlock();
spriteRenderer.GetPropertyBlock(block);
block.SetColor("_Color", color);
spriteRenderer.SetPropertyBlock(block);
}
MaterialPropertyBlock 을 사용해서 바꿈
- 새롭게 알게 된 점
MaterialPropertyBlock = 마테리얼 속성 컨테이너
- 이 문제&에러를 다시 만나게 되었다면?
상황에 따라 MaterialPropertyBlock을 사용해야겠다.