https://www.youtube.com/watch?v=NE5j8YmJ5Ds&list=PLO-mt5Iu5TeZF8xMHqtT_DhAPKmjF6i3x&index=15&t=35s
1. 양손 배치
왼손 오브젝트 추가 Player > 우클릭 > 2D Object > Sprites > Triangle (Hand Left)
Sprite weapon 0 연결
스프라이트 렌더러의 Order in Layer를 플레이어(5)보다 높게 설정
왼손은 Z축 회전으로 표현 (-35)
오른손 오브젝트 추가(Hand Right, weapon 3)
2. 반전 컨트롤 구현
Hand.cs 생성
public class Hand : MonoBehaviour
{
public bool isleft;
public SpriteRenderer spriter;
SpriteRenderer player;
Vector3 rightPos = new Vector3(0.35f, -0.15f, 0);
Vector3 rightPosReverse = new Vector3(-0.35f, -0.15f, 0);
Quaternion leftRot= Quaternion.Euler(0,0,-35);
Quaternion leftRotReverse = Quaternion.Euler(0, 0, -135);
private void Awake()
{
player = GetComponentsInParent<SpriteRenderer>()[1];
}
}
오른손, 왼손 구분을 위한 bool 변수 선언
SpriteRenderer을 public으로 선언
플레이어의 스프라이트렌터거 변수 선언 및 초기화
player = GetComponentsInParent<SpriteRenderer>()[1];
- 0번은 자기 자신
오른손의 위치를 Vector3 형태로 저장
Vector3 rightPos = new Vector3(0.35f, -0.15f, 0);
Vector3 rightPosReverse = new Vector3(-0.35f, -0.15f, 0);
Quaternion leftRot= Quaternion.Euler(0,0,-35);
Quaternion leftRotReverse = Quaternion.Euler(0, 0, -135);
왼손 오른손 오브젝트에 스크립트 추가하고 변수 초기화(직접 SpriteRender를 눌러서 드래그드랍)
좌우 바뀔때 반전해주는 함수 작성
private void LateUpdate()
{
bool isReverse = player.flipX;
if (isleft) //근접무기
{
transform.localRotation = isReverse ? leftRotReverse : leftRot;
spriter.flipY=isReverse;
spriter.sortingOrder = isReverse ? 4 : 6;
}
else //원거리 무기
{
transform.localPosition = isReverse ? rightPosReverse : rightPos;
spriter.flipX = isReverse;
spriter.sortingOrder = isReverse ? 6 : 4;
}
}
플레이어의 반전 상태를 지역변수로 저장
왼손 회전에는 localRotaion 사용
오른손 이동에는 localPosition 사용
왼손 스프라이트는 Y축 반전
왼손 스프라이트는 X축 반전
왼손, 오른손의 sortingOrder를 바꿔주기
3. 데이터 추가
손 오브젝트에 연결되어 있는 스프라이트 삭제
손 오브젝트 비활성화
ItemData.cs에 스크립트블 오브젝트 코드에서 손 스프라이트를 담을 속성 추가
[Header("# Weapon")]
public GameObject projectile;
public Sprite hand;
Item 0과 Item 1 Hand에 weapon 0, 3 삽입
4. 데이터 연동
Player.cs 안에 핸드 구현
public Hand[] hands;
void Awake()
{
hands = GetComponentsInChildren<Hand>(true);
}
- 플레이어에서 손 스크립트를 담을 배열변수 선언 및 초기화
- 이떄 Hand Right,Left는 비활성화 되어 있어서, 적용하기 위해 인자값 으로 true를 넣어줘야 한다.
Weapon 스크립트의 초기화 함수에서 로직 작성
public void Init(ItemData data)
{
//...
//Hand Set
Hand hand = player.hands[(int)data.itemType];
hand.spriter.sprite = data.hand;
hand.gameObject.SetActive(true);
player.BroadcastMessage("ApplyGear",SendMessageOptions.DontRequireReceiver);
}
- player.hands[] 어떤 인자로 줄지 어렵다.
- enum 열거형 데이터는 정수 형태로도 사용 가능하여 (int)data.itemType 사용
- enum 값 앞에 int 타입을 작성하여 강제 형변환
- 근거리는 0, 원거리는 1이기 때문이다.
- 스크립트블 오브젝트의 데이터로 스프라이트 적용
- SetActive 함수로 활성화
깃허브 올리기
Commit : ver 1.11+
Description : Player Weapon Spriter+
https://github.com/mekain80/CloneCode_Undead_Survivor
'게임개발 > 언데드서바이벌_골드메탈_클론코딩' 카테고리의 다른 글
[클론코딩_유니티_골드메탈] 뱀서라이크 따라만들기 13 (게임 시작과 종료) (0) | 2023.05.11 |
---|---|
[클론코딩_유니티_골드메탈] 뱀서라이크 따라만들기 12 (레벨업🥳시스템) (0) | 2023.05.10 |
[클론코딩_유니티_골드메탈] 뱀서라이크 따라만들기 11 (능력 업그레이드💪구현) (0) | 2023.05.10 |
[클론코딩_유니티_골드메탈] 뱀서라이크 따라만들기 10 (HUD📐제작하기) (0) | 2023.05.06 |
[클론코딩_유니티_골드메탈] 뱀서라이크 따라만들기 9 (타격감🌟있는 몬스터 처치 만들기) (0) | 2023.05.06 |