상세 컨텐츠

본문 제목

유니티 공부(11)

유니티

by MJ_119 2023. 10. 19. 22:52

본문

출처 : 골드메탈 유니티 뱀서라이크 11+

 

 

플레이어 무기 장착 표현하기

 

1. 양손배치

 

2. 반전 컨트롤 구현

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.35f, -0.15f, 0);

    Quaternion leftRot = Quaternion.Euler(0, 0, -35);
    Quaternion leftRotReverse = Quaternion.Euler(0, 0, -135);
    Vector3 leftPos = new Vector3(-0.17f, -0.37f, 0);
    Vector3 leftPosReverse = new Vector3(0.19f, -0.37f, 0);

    void Awake()
    {
        player = GetComponentsInParent<SpriteRenderer>()[1];
    }

    void LateUpdate()
    {
        bool isReverse = player.flipX;

        if (isLeft ) // 근접무기
        {
            transform.localRotation = isReverse ? leftRotReverse : leftRot;
            transform.localPosition = isReverse ? leftPosReverse : leftPos;
            spriter.flipY = isReverse;
            spriter.sortingOrder = isReverse ? 6 : 6;
        }
        else // 원거리 무기
        {
            transform.localPosition = isReverse ? rightPosReverse : rightPos;
            spriter.flipX = isReverse;
            spriter.sortingOrder = isReverse ? 6 : 4;
        }
    }
}

 

3. 데이터 추가

 

4. 데이터 연동

 

 - weapon 스크립트

public void Init(ItemData data)
    {
        // Basic Set
        name = "Weapon " + data.itemId;
        transform.parent = player.transform; // 부모 오브젝트를 플레이어로 지정.
        transform.localPosition = Vector3.zero; // 지역 위치인 localPosition을 원점으로 변경

        // Property Set
        id = data.itemId;
        damage = data.baseDamage;
        count = data.baseCount;

        for ( int index = 0; index < GameManager.instance.pool.prefabs.Length; index++ )
        {
            if (data.projectile == GameManager.instance.pool.prefabs[index])
            {
                prefabId = index;
                break;
            }
        }

        switch (id)
        {
            case 0:
                speed = -150;
                Batch();
                break;
            default:
                speed = 0.3f; // speed 값은 연사속도를 의미 : speed가 적을수록 많이 발사
                break;
        }

        // Hand Set
        Hand hand = player.hands[(int)data.itemType]; // 아이템 타입의 형식에 따라 적용
        hand.spriter.sprite = data.hand;
        hand.gameObject.SetActive(true);


        player.BroadcastMessage("ApplyGear", SendMessageOptions.DontRequireReceiver); // BroadcastMessage : 특정 함수 호출을 모든 자식에게 방송하는 함수
    }

 

'유니티' 카테고리의 다른 글

유니티 공부(13)  (1) 2023.10.25
유니티 공부(12)  (0) 2023.10.20
유니티 공부(10)  (0) 2023.09.18
유니티 공부(9)  (0) 2023.09.12
유니티 공부(2)  (0) 2023.08.17

관련글 더보기