이번 시간에는 플레이어가 무기를 장착한 모습을 만들어 보도록 하겠습니다.
먼저 플레이어 모습에 손 모양이 올라가도록 만들어주고,
플레이어의 이동 방향에 따라 손의 방향도 바뀌도록 해 주고
플레이어가 가진 무기에 따라서 손에 들고 있는 무기의 모습도 바뀌도록 해주겠습니다.
먼저 플레이어 오브젝트 아래에 2d script -- triangle 을 만들어 이름을 Hand Left라고 지어주고, 플레이어의 적당한 곳에 가도록 위치시켜줍니다. 또한 z축으로 방향을 돌려 배치해줍니다.
반대손도 마찬가지로 만들어주고, 이번에는 z축을 돌리지 않고 놔두도록 하겠습니다.
이제 손의 방향 반전을 구현해보도록 하겠습니다. 먼저 c# 스크립트를 만들어 주고 이름은 hand라고 짓습니다.
아래가 그 스크립트의 코드입니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
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.15f,-0.15f,0);
Quaternion leftRot = Quaternion.Euler(0,0,-35);
Quaternion leftRotReverse = Quaternion.Euler(0,0,-135);
void Awake(){
player = GetComponentsInParent<SpriteRenderer>()[1];
}
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;
}
}
}
왼쪽손인지 아닌지를 표시하기위한 bool값 isleft
스프라이트 띄워주는 spriter
그 아래부터는 손의 위치와 각도를 조절해 주었습니다.
그 뒤 awake에서 플레이어는 그 컴포넌트의 부모에서 스프라이트를 가져와 사용하게 합니다.
그리고 매번 업데이트 마다 플레이어가 어디 방향인지를 받아와서 손 모양을 조정해주게 됩니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[CreateAssetMenu(fileName ="Item", menuName ="Scriptable Object/ItemData")]
public class ItemData : ScriptableObject
{
public enum ItemType {Melee, Range, Glove, Shoe, Heal}
[Header("# Main Info")]
public ItemType itemType;
public int itemId;
public string itemName;
public string itemDesc;
public Sprite itemIcon;
[Header("# Level Info")]
public float baseDamage;
public int baseCount;
public float[] damages;
public int[] counts;
[Header("# Weapon")]
public GameObject projectile;
public Sprite hand;
}
그 뒤 itemdata 스크립트에서 weapon부분에 hand를 추가해줍니다
또한 weapon 스크립트의 Init 함수 안쪽에 다음과 같은 코드를 추가해줍니다.
Hand hand = player.hands[(int)data.itemType];
hand.spriter.sprite = data.hand;
hand.gameObject.SetActive(true);
hand를 불러와서 플레이어의 손 넣어준 타입중 아이템 타입에 맞는 번째의 손을 출력하고 , 그 손은 보이게 만들어 주도록 만들었습니다.
다음 시간에는 레벨업 시스템을 만들어 보도록 하겠습니다!