분대 전술 게임의 핵심인 엄폐 은패를 만들어야 될 듯싶다. 3가지가 필요한데 하나는 완엄패 하나는 반엄패 또 하나는 빈엄패다. 엑스컴식 게임의 핵심중의 핵심이다. 일단 만들어야 할게 이동하려고 하면 엄패인지 플레이어에게 알려주는 것과 공격 시 엄패가 적용이 돼서 확률이 낮게 뜨는 거 은패 시에 적의 시야에 잡히지 않는 것 등이 있다. 인 공지 등 또한 엄패를 더 선호하면서 이동하도록 하게 하는 것도 만들어야 한다. 알파고 오메가인 듯 싶다.
해당 기능을 구현하기 위해서는 OnMouseEnter가 필요할듯 싶다. 타일에 들어갔을 때 만약 currentPlayer의 행동력이 남아있고 공격이 아닌 상태 즉 이동 가능 모드일 때 해당 기능을 켜도록 해야 할 듯싶다. 일종의 업데이트 상태일 텐데 생각보다 이게 예산을 잡아먹지 않기 때문에 그 걱정은 안 해도 될 듯싶다. 해당 상태일 때 주변의 8개의 좌표를 검색하도록 하면 될 듯싶다. 태그를 확인하면 되려나.
이걸 확인 하는 방법이 물리 기능을 활용해 확인하는 방법과 좌표값을 검색하는 방식 2가지로 접근할 수가 있을 듯싶다. 일단 만들기 편한 방법은 물리 기능을 활용하는 거일 테. 그렇다면 레이어 마스크를 확인하면 될 듯싶다. 최적화 면에서는 안 좋을 수 있겠지만 엔진을 쓰는 장점을 활용하는 게 좋을 듯싶다. 이게 코딩 쪽으로는 아무래도 성능 체감이 안 나고 그래픽 쪽이 티가 좀 많이 나기 때문이다. 특히 캐릭터가 움직이기 시작할 때 가장 많이 예산을 잡아먹는 듯싶다.
일단 이건 타일에서 일차적으로 관리를 해야 할것이다. 마우스가 타일 내로 들어왔을 때 게임 매니저에 연락을 취해서 지금 상태를 체크를 하는 게 우선적으로 처리해야 하는 내용일 듯싶다.
곰곰히 생각해 봤는데 그냥 타일 리스트에서 8방향이 아니라 4방향의 타일을 검출하는 편이 더 좋을 듯싶다.
void OnMouseEnter ()
{
if ( gameManager . currentPlayer != null )
{
if ( gameManager . currentPlayer . playerActiveState == PlayerActiveState . NotAnything || gameManager . currentPlayer . playerTurnState == PlayerTurnState . Waiting )
{
print ( this . coordinate );
}
}
}
일단 준비는 됬다. Vector2 체계로 우선 readonly로 4방향을 검색하는 걸 만드는 것이 필요할 듯싶다.
readonly Vector2 [] Nears =
{
new Vector2 ( 1 , 0 ), new Vector2 ( 0 , - 1 ), new Vector2 ( 0 , 1 ), new Vector2 ( - 1 , 0 ),
};
먼가 함수의 이름이 겹치는 게 있는 거 같지만 클래스가 다르니 상관없을 듯싶다.
readonly Vector2 [] Nears =
{
new Vector2 ( 1 , 0 ), new Vector2 ( 0 , - 1 ), new Vector2 ( 0 , 1 ), new Vector2 ( - 1 , 0 ),
};
List < TileNode > GetNears ()
{
var neighbours = new List < TileNode >();
foreach ( var direction in Nears )
{
neighbours .Add ( board . NodeList .Find (node => node . coordinate == this . Coordinate + direction ));
}
return neighbours ;
}
늘 조금 하고 차근차근 테스트를 해보면서 접근하는데 이번엔 바로 쭉쭉 진행한다. 안되면 머 할 수 없고 진짜 감지를 했는지는 일단은 해당 칸에 큐브를 띠우는 방식으로 만들어야 할 듯싶다. 매번 새 큐브를 만드는 게 아니라. 4개 정도 큐브를 미리 만들어 놓고 이동시키는 방법을 사용하는 게 최적화 측면에서 좋을 듯싶기도 하다. 머 이게 총알이 아니다 보니 만들었다 지워도 사실 상관은 없능듯 싶긴 하다. 그냥 일단 만들고 지우는 쪽으로 가보자.
public class Board : MonoBehaviour {
public GameObject blockPrefab;
[SerializeField] GameObject tile;
새로 만들기 귀찮으니까. 그냥 저번에 만든 플레이어 활성화를 알려주는 프리 팹을 가져다가 붇여 넣었다.
void OnMouseEnter ()
{
if ( gameManager . currentPlayer != null )
{
if ( gameManager . currentPlayer . playerActiveState == PlayerActiveState . NotAnything || gameManager . currentPlayer . playerTurnState == PlayerTurnState . Waiting )
{
foreach ( var node in GetNears())
{
Instantiate ( board . blockPrefab , GameUtility .CoordinateToTransfom ( node . coordinate ), Quaternion . identity );
}
}
}
}
나가면 지워지는 걸 만들기 전에 옆에 장애물이 있는 경우에만 뜨도록 하는 걸 만들어야 할 듯싶다.
void OnMouseEnter ()
{
if ( gameManager . currentPlayer != null )
{
if ( gameManager . currentPlayer . playerActiveState == PlayerActiveState . NotAnything || gameManager . currentPlayer . playerTurnState == PlayerTurnState . Waiting )
{
foreach ( var node in GetNears())
{
if ( node . tileStyle == TileStyle . NonWalkable )
{
Instantiate ( board . blockPrefab , GameUtility .CoordinateToTransfom ( node . coordinate ), Quaternion . identity );
}
}
}
}
}
이렇게 만들면 문제가 사람의 경우에도 엄패로 판단한다는 거다. 여하튼 그걸 해결하기 전에 일단 나갔을 때 해당 오브젝트를 삭제하는 걸 만들어야 할 듯싶다.
void OnMouseEnter ()
{
if ( gameManager . currentPlayer != null )
{
if ( gameManager . currentPlayer . playerActiveState == PlayerActiveState . NotAnything || gameManager . currentPlayer . playerTurnState == PlayerTurnState . Waiting )
{
foreach ( var node in GetNears())
{
if ( node . tileStyle == TileStyle . NonWalkable )
{
var block = Instantiate ( board . blockPrefab , GameUtility .CoordinateToTransfom ( node . coordinate ), Quaternion . identity );
DestroyObject ( block , 1 f);
}
}
}
}
}
일단 이렇게 만들면 편하게 만들 수 있긴 하다. 문제는 지금 타일을 벗어났을 때 만드는 기능이 쉽지가 않다. 버그가 있기도 하고. 이게 어느 쪽이다 방향을 표시를 해야 하고. 만일 장애물이 되더라도 적의에 의해서 방어 기능을 못하는 경우에는 파란색이 아니라 붉은색으로 표시도 해 줄 필요가 있다.
발상을 바꿔서 오브젝트가 옆 노드에서 뜨는 게 아니라. 해당 노드에서 뜨는 걸로 하는 것이 좋을 듯싶다. 노드의 4면 중에 장애물과 인접하는 경우에 해당하는 곳을 뜨게 하면 좋을 듯싶다. 그림자를 제거한 평면의 아이콘을 블랜더로 만들어야겠다.
타일에 대해 체계를 만들어야 하는 번거로움이 있으니 기존의 레이어 마스크 시스템과 통합을 해야 할듯싶다. 그렇다면 그냥 4방향으로 레이케스트를 쏴어 레이어가 어떤건지 확인을 하는 편이 좋을 듯 싶다. 다시 새로 만들어야겠네.
2D 스프라이트를 만들어 둔다. 물론 평소에는 꺼져 있다가. 필요할 때만 켜지게 만들어야 한다. 그다음에 레이 케스트를 만들어야 하는데 어떻게 만들어야 할지. 레이 캐스트를 배우긴 했는데 안으니까 어떻게 하는지 까먹었다. 그냥 아까 만들었던걸 응용하는 게 더 편하려나.
바닥 타일은 격자로 만들었는데 위에 올려진 장애물들은 또 다른 체계로 만드는 고민이 되는 듯싶다.
readonly Vector3 [] Nears =
{
Vector3 . forward , Vector3 . left , Vector3 . back , Vector3 . right ,
// new Vector3 (1, 0, 0), new Vector3 (0, 0, -1), new Vector3 (0, 0, 1), new Vector3 (-1, 0, 0),
};
void askLayer ()
{
RaycastHit hit;
foreach ( var direction in Nears )
{
Physics .Raycast ( transform . position , direction , out hit );
}
}
void OnMouseEnter ()
{
if ( gameManager . currentPlayer != null )
{
if ( gameManager . currentPlayer . playerActiveState == PlayerActiveState . NotAnything || gameManager . currentPlayer . playerTurnState == PlayerTurnState . Waiting )
{
askLayer();
}
}
}
이렇게 하면 4방향으로 레이저를 쏠듯 싶다. 아는데 실수를 한 듯싶다. 그걸 고치기 전에 떠오르는 아이디어인데 반엄패냐 완 엄폐냐 여부를 결정할 때 레이 캐스트 아래에서 한번 쏘고 검출되면 그보다 한 칸 더 위에서 쏜다음에 그 높이에도 엄패가 검출되면 완엄패로 판단하는 방법도 있을 듯싶다.
readonly Vector3 [] directions =
{
Vector3 . forward , Vector3 . left , Vector3 . back , Vector3 . right ,
// new Vector3 (1, 0, 0), new Vector3 (0, 0, -1), new Vector3 (0, 0, 1), new Vector3 (-1, 0, 0),
};
void askLayer ()
{
// RaycastHit hit;
foreach ( var direction in directions )
{
RaycastHit hit;
if ( Physics .Raycast ( transform . position + new Vector3 ( 0 , 1 f, 0 ), direction , out hit , checkRange , LayerMask .GetMask ( "Obstacle" )))
{
print ( hit . transform . name );
}
}
}
void OnMouseEnter ()
{
if ( gameManager . currentPlayer != null )
{
if ( gameManager . currentPlayer . playerActiveState == PlayerActiveState . NotAnything || gameManager . currentPlayer . playerTurnState == PlayerTurnState . Waiting )
{
askLayer();
}
}
}
수정했더니 인간이 아닌 장애물에만 반응을 한다.
readonly Vector3 [] directions =
{
Vector3 . forward , Vector3 . left , Vector3 . back , Vector3 . right ,
// new Vector3 (1, 0, 0), new Vector3 (0, 0, -1), new Vector3 (0, 0, 1), new Vector3 (-1, 0, 0),
};
void askLayer ()
{
// RaycastHit hit;
foreach ( var direction in directions )
{
RaycastHit hit;
if ( Physics .Raycast ( transform . position + new Vector3 ( 0 , 1 f, 0 ), direction , out hit , checkRange , LayerMask .GetMask ( "Obstacle" )))
{
print ( hit . transform . name + " : " + direction );
}
}
}
void OnMouseEnter ()
{
if ( gameManager . currentPlayer != null )
{
if ( gameManager . currentPlayer . playerActiveState == PlayerActiveState . NotAnything || gameManager . currentPlayer . playerTurnState == PlayerTurnState . Waiting )
{
askLayer();
}
}
}
방향도 쓰니 이거면 충분할 듯싶다. 이제 아까 등록해 놓은 오브젝트가 뜨게 만들면 될 듯싶다.
readonly Vector3 [] directions =
{
Vector3 . forward , Vector3 . back , Vector3 . right , Vector3 . left ,
// new Vector3 (0, 0, 1), new Vector3 (0, 0, -1), new Vector3 (1, 0, 0), new Vector3 (-1, 0, 0),
};
void Awake ()
{
gameManager = FindObjectOfType< GameManager >();
board = FindObjectOfType< Board >();
shieldForward = this . transform .Find ( "Shield (0, 0, 1)" );
shieldBack = this . transform .Find ( "Shield (0, 0, -1)" );
shieldRight = this . transform .Find ( "Shield (1, 0, 0)" );
shieldLeft = this . transform .Find ( "Shield (-1, 0, 0)" );
}
Find의 경우에는 말이 많던데 Awake()에 넣으면 딱히 문제가 될 일이 없는 듯싶다. 최적화를 하려면 타일마다 만드는 게 아니라. 보드 같은데 하나씩만 만들어 놓고 가져오고 일이 끝나면 옮기는 게 좋을 듯싶긴 하다.
이게 이제 좌표와 transform을 매칭을 해야 하는데. 이걸 클래스로 만들 수도 있겠다. 2개를 매칭 하는 거라 딕션너리도 가능할 듯싶어서 일단 그걸로 도전해 봐야겠다.
Dictionary < Vector3 , Transform > directionsDict;
void Awake ()
{
gameManager = FindObjectOfType< GameManager >();
board = FindObjectOfType< Board >();
shields = gameManager . transform .Find ( "Shields" );
shieldForward = shields . transform .Find ( "Shield (0, 0, 1)" );
shieldBack = shields . transform .Find ( "Shield (0, 0, -1)" );
shieldRight = shields . transform .Find ( "Shield (1, 0, 0)" );
shieldLeft = shields . transform .Find ( "Shield (-1, 0, 0)" );
directionsDict = new Dictionary < Vector3 , Transform >()
{
{ Vector3 . forward , shieldForward },
{ Vector3 . back , shieldBack },
{ Vector3 . right , shieldRight },
{ Vector3 . left , shieldLeft },
};
}
벡터 3을 넣으면 하이어 라키 노드를 반환하는 걸 만들었다.
void askLayer ()
{
// RaycastHit hit;
foreach ( var direction in directions )
{
RaycastHit hit;
if ( Physics .Raycast ( transform . position + new Vector3 ( 0 , 1 f, 0 ), direction , out hit , checkRange , LayerMask .GetMask ( "Obstacle" )))
{
// print (hit.transform.name + " : "+ direction);
directionsDict [ direction ]. transform . position = this . transform . position ;
}
}
}
이제 나가면 다시 원상 복구하는 걸 만들어야겠다.
readonly Vector3 [] directions =
{
Vector3 . forward , Vector3 . back , Vector3 . right , Vector3 . left ,
// new Vector3 (0, 0, 1), new Vector3 (0, 0, -1), new Vector3 (1, 0, 0), new Vector3 (-1, 0, 0),
};
void MakeShield ()
{
// RaycastHit hit;
foreach ( var direction in directions )
{
RaycastHit hit;
if ( Physics .Raycast ( transform . position + new Vector3 ( 0 , 1 f, 0 ), direction , out hit , checkRange , LayerMask .GetMask ( "Obstacle" )))
{
// print (hit.transform.name + " : "+ direction);
directionsDict [ direction ]. transform . position = this . transform . position ;
isShield = true ;
}
}
}
void OnMouseEnter ()
{
if ( gameManager . currentPlayer != null )
{
if ( gameManager . currentPlayer . playerActiveState == PlayerActiveState . NotAnything || gameManager . currentPlayer . playerTurnState == PlayerTurnState . Waiting )
{
MakeShield();
}
}
}
void OnMouseExit ()
{
if ( isShield )
{
foreach ( var node in directionsDict . Values )
{
node . position = Vector3 . zero ;
}
isShield = false ;
}
}
아주 만족스럽게 작동한다. 이제 완엄패 반엄패 빈엄패를 만들면 끝이 날듯 싶다.
void MakeShield ()
{
// RaycastHit hit;
foreach ( var direction in directions )
{
if ( this . tileStyle == TileStyle . NonWalkable ) break ;
RaycastHit hit;
if ( Physics .Raycast ( transform . position + new Vector3 ( 0 , 1 f, 0 ), direction , out hit , checkRange , LayerMask .GetMask ( "Obstacle" )))
{
// print (hit.transform.name + " : "+ direction);
directionsDict [ direction ]. transform . position = this . transform . position ;
isShield = true ;
}
}
}
그전에 어떤 군데에서도 실드가 생기는 문제가 있어서 해당 버그를 막는 코드를 만들었다.
내용이 점점 많아지니 실드 클래스를 따로 만들어야 될 듯싶다는 생각이 든다.
public class GameUtility : MonoBehaviour {
public static readonly Vector3 [] directions =
{
Vector3 . forward , Vector3 . back , Vector3 . right , Vector3 . left ,
// new Vector3 (0, 0, 1), new Vector3 (0, 0, -1), new Vector3 (1, 0, 0), new Vector3 (-1, 0, 0),
};
}
일단 이건 게임 유틸리티 쪽으로 옮겨 놓는다. 다른 데서도 쓸만한 내용이니 말이다.
using System . Collections ;
using System . Collections . Generic ;
using UnityEngine ;
public class Shield : MonoBehaviour {
public Sprite halfShield;
public Sprite perfectShield;
Dictionary < Vector3 , Transform > directionsDict;
Transform shieldForward;
Transform shieldBack;
Transform shieldRight;
Transform shieldLeft;
void Awake ()
{
shieldForward = transform .Find ( "Shield (0, 0, 1)" );
shieldBack = transform .Find ( "Shield (0, 0, -1)" );
shieldRight = transform .Find ( "Shield (1, 0, 0)" );
shieldLeft = transform .Find ( "Shield (-1, 0, 0)" );
public directionsDict = new Dictionary < Vector3 , Transform >()
{
{ Vector3 . forward , shieldForward },
{ Vector3 . back , shieldBack },
{ Vector3 . right , shieldRight },
{ Vector3 . left , shieldLeft },
};
}
}
랜더러의 스프라이트를 바꿔줘야 하니 해당 링크를 단다.
using System . Collections ;
using System . Collections . Generic ;
using UnityEngine ;
public class Shield : MonoBehaviour {
public Sprite halfShield;
public Sprite perfectShield;
public Dictionary < Vector3 , Transform > directionsDict;
Transform shieldForward;
Transform shieldBack;
Transform shieldRight;
Transform shieldLeft;
SpriteRenderer forwardSpriteRenderer;
SpriteRenderer backSpriteRenderer;
SpriteRenderer rightSpriteRenderer;
SpriteRenderer leftSpriteRenderer;
void Awake ()
{
shieldForward = transform .Find ( "Shield (0, 0, 1)" );
shieldBack = transform .Find ( "Shield (0, 0, -1)" );
shieldRight = transform .Find ( "Shield (1, 0, 0)" );
shieldLeft = transform .Find ( "Shield (-1, 0, 0)" );
directionsDict = new Dictionary < Vector3 , Transform >()
{
{ Vector3 . forward , shieldForward },
{ Vector3 . back , shieldBack },
{ Vector3 . right , shieldRight },
{ Vector3 . left , shieldLeft },
};
forwardSpriteRenderer = shieldForward .Find ( "Shield" ).GetComponent< SpriteRenderer >();
backSpriteRenderer = shieldBack .Find ( "Shield" ).GetComponent< SpriteRenderer >();
rightSpriteRenderer = shieldRight .Find ( "Shield" ).GetComponent< SpriteRenderer >();
leftSpriteRenderer = shieldLeft .Find ( "Shield" ).GetComponent< SpriteRenderer >();
}
}
담을 내용이 3개 이상이면 그냥 따로 객체를 만드는 게 나을 듯싶긴 한데 그냥 또 딕션러리도 만들었다.
using System . Collections ;
using System . Collections . Generic ;
using UnityEngine ;
public class Shield : MonoBehaviour {
public Sprite halfShield;
public Sprite perfectShield;
public Dictionary < Vector3 , Transform > transformDict;
public Dictionary < Vector3 , SpriteRenderer > spriteRendererDict;
Transform shieldForward;
Transform shieldBack;
Transform shieldRight;
Transform shieldLeft;
SpriteRenderer forwardSpriteRenderer;
SpriteRenderer backSpriteRenderer;
SpriteRenderer rightSpriteRenderer;
SpriteRenderer leftSpriteRenderer;
void Awake ()
{
shieldForward = transform .Find ( "Shield (0, 0, 1)" );
shieldBack = transform .Find ( "Shield (0, 0, -1)" );
shieldRight = transform .Find ( "Shield (1, 0, 0)" );
shieldLeft = transform .Find ( "Shield (-1, 0, 0)" );
transformDict = new Dictionary < Vector3 , Transform >()
{
{ Vector3 . forward , shieldForward },
{ Vector3 . back , shieldBack },
{ Vector3 . right , shieldRight },
{ Vector3 . left , shieldLeft },
};
forwardSpriteRenderer = shieldForward .Find ( "Shield" ).GetComponent< SpriteRenderer >();
backSpriteRenderer = shieldBack .Find ( "Shield" ).GetComponent< SpriteRenderer >();
rightSpriteRenderer = shieldRight .Find ( "Shield" ).GetComponent< SpriteRenderer >();
leftSpriteRenderer = shieldLeft .Find ( "Shield" ).GetComponent< SpriteRenderer >();
spriteRendererDict = new Dictionary < Vector3 , SpriteRenderer >()
{
{ Vector3 . forward , forwardSpriteRenderer },
{ Vector3 . back , backSpriteRenderer },
{ Vector3 . right , rightSpriteRenderer },
{ Vector3 . left , leftSpriteRenderer },
};
}
}
void MakeShield ()
{
// RaycastHit hit;
foreach ( var direction in GameUtility . directions )
{
if ( this . tileStyle == TileStyle . NonWalkable ) break ;
// RaycastHit hit;
if ( Physics .Raycast ( transform . position + new Vector3 ( 0 , 0.5 f, 0 ), direction , checkRange , LayerMask .GetMask ( "Obstacle" )))
{
// print (hit.transform.name + " : "+ direction);
shield . transformDict [ direction ]. position = this . transform . position ;
isShield = true ;
if ( Physics .Raycast ( transform . position + new Vector3 ( 0 , 1.5 f, 0 ), direction , checkRange , LayerMask .GetMask ( "Obstacle" )))
{
shield . spriteRendererDict [ direction ]. sprite = shield . perfectShield ;
}
else
{
shield . spriteRendererDict [ direction ]. sprite = shield . halfShield ;
}
}
}
}
근데 이게 높이가 낮은데 완엄패를 주는 게 맘에 걸리긴 하다. 얼굴 정도는 노출이 되기 때문이다.
using System . Collections ;
using System . Collections . Generic ;
using UnityEngine ;
public class Shield : MonoBehaviour {
public Sprite halfShield;
public Sprite perfectShield;
public Dictionary < Vector3 , Transform > transformDict;
public Dictionary < Vector3 , SpriteRenderer > spriteRendererDict;
Transform shieldForward;
Transform shieldBack;
Transform shieldRight;
Transform shieldLeft;
SpriteRenderer forwardSpriteRenderer;
SpriteRenderer backSpriteRenderer;
SpriteRenderer rightSpriteRenderer;
SpriteRenderer leftSpriteRenderer;
public Vector3 halfShieldVector = new Vector3 ( 0 , 1 f, 0 );
public Vector3 perfectShieldVector = new Vector3 ( 0 , 2 f, 0 );
void Awake ()
{
shieldForward = transform .Find ( "Shield (0, 0, 1)" );
shieldBack = transform .Find ( "Shield (0, 0, -1)" );
shieldRight = transform .Find ( "Shield (1, 0, 0)" );
shieldLeft = transform .Find ( "Shield (-1, 0, 0)" );
transformDict = new Dictionary < Vector3 , Transform >()
{
{ Vector3 . forward , shieldForward },
{ Vector3 . back , shieldBack },
{ Vector3 . right , shieldRight },
{ Vector3 . left , shieldLeft },
};
forwardSpriteRenderer = shieldForward .Find ( "Shield" ).GetComponent< SpriteRenderer >();
backSpriteRenderer = shieldBack .Find ( "Shield" ).GetComponent< SpriteRenderer >();
rightSpriteRenderer = shieldRight .Find ( "Shield" ).GetComponent< SpriteRenderer >();
leftSpriteRenderer = shieldLeft .Find ( "Shield" ).GetComponent< SpriteRenderer >();
spriteRendererDict = new Dictionary < Vector3 , SpriteRenderer >()
{
{ Vector3 . forward , forwardSpriteRenderer },
{ Vector3 . back , backSpriteRenderer },
{ Vector3 . right , rightSpriteRenderer },
{ Vector3 . left , leftSpriteRenderer },
};
}
}
void MakeShield ()
{
// RaycastHit hit;
foreach ( var direction in GameUtility . directions )
{
if ( this . tileStyle == TileStyle . NonWalkable ) break ;
// RaycastHit hit;
if ( Physics .Raycast ( transform . position + shield . halfShieldVector , direction , checkRange , LayerMask .GetMask ( "Obstacle" )))
{
// print (hit.transform.name + " : "+ direction);
shield . transformDict [ direction ]. position = this . transform . position ;
isShield = true ;
if ( Physics .Raycast ( transform . position + shield . perfectShieldVector , direction , checkRange , LayerMask .GetMask ( "Obstacle" )))
{
shield . spriteRendererDict [ direction ]. sprite = shield . perfectShield ;
}
else
{
shield . spriteRendererDict [ direction ]. sprite = shield . halfShield ;
}
}
}
}
일단 된다는 걸 확인했으니 해당 내용은 수정했다. 이게 유리창이라서 어차피 공격을 하면 몸통을 맞추니 말이다. 나중에 유리창 깨지는 모션도 넣어야 하고 할게 많을 듯싶다.