프로그래밍 농장

오픈월드 게임 TODO 22/11/03 [Unity] 본문

Unity

오픈월드 게임 TODO 22/11/03 [Unity]

Tennessee201 2022. 11. 3.
728x90

0. 사용자 착용 아이템 ( Consumable / Equipable . .) 에 따른 값 추가 및 실시간 반영 

방식 수정 : 기존 생성자참조방식 -> 직접 참조방식    

이유 : Scriptable Object를 사용함으로 인스펙터상 재정의한 해당 값을 참조하는데에는 Awake()상에서 처리해주는 방식이 가장 간결하고 직관적이어서 변경하였다. 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
using System;

public class Slot : MonoBehaviour, IPointerUpHandler
{

    PlayerController player_status;

    [SerializeField]
    Inventory inventory;
    Animator _animator;
    
    public int slotnum;
    public Item item;
    public Image itemIcon;
    public GameObject Player;

    private void Start()
    {
        player_status = GetComponentInParent<PlayerController>();
        player_status.Equipment = "1";
        _animator = player_status.GetComponentInChildren<Animator>();
    }


    //���� ������Ʈ (��ü �߰�)
    public void UpdateSlotUI()
    {
        itemIcon.sprite = item.Image;
        itemIcon.gameObject.SetActive(true);
    }

    //���� �ʱ�ȭ (��ü ����)
    public void RemoveSlot()
    {
        item = null;
        itemIcon.gameObject.SetActive(false);
    }


    public void OnEquip()
    {
        // UI적으로 보여줄 스트립트
        GetComponentInParent<Inventory>().ItemDict[item.ItemList].SetActive(true);
    }

    public void OnUpEquip()
    {
        // UI적으로 보여줄 스트립트
        GetComponentInParent<Inventory>().ItemDict[item.ItemList].SetActive(false);
    }


    public void OnPointerUp(PointerEventData eventData)
    {
        bool isUse = item.Use();
        if (isUse)
        {
            //HP포션 사용
            if (item.itemName == "HpPotion")
            {
                Debug.Log("Hp를 회복하였습니다!");
                GetComponentInParent<Inventory>().ItemDict[item.ItemList].SetActive(true);
                inventory.RemoveItem(slotnum);
            }

            // 장비를 장착하고 있을때
            if (player_status.IsEquip == true) {

                if (player_status.Equipment == "Sword")
                {
                    //Sword 사용
                    if (item.itemName == "Sword")
                    {
                        _animator.SetTrigger("UnEquip");
                        Debug.Log("Sword를 장착 해제하였습니다!");
                        player_status.Equipment = "";
                        ;
                        // 실질적으로 데미지를 내려줄 스크립트 
                        player_status.IsEquip = false;
                        player_status._damage = player_status._damage - item.efts[0].value;
                    }
                }

                //Dagger 사용
                if (item.itemName == "Dagger")
                {
                    _animator.SetTrigger("UnEquip");
                    Debug.Log("Dagger를 장착 해제하였습니다!");
                    player_status.Equipment = "";
                    // UI적으로 보여줄 스트립트
                    GetComponentInParent<Inventory>().ItemDict[item.ItemList].SetActive(false);
                    // 실질적으로 데미지를 내려줄 스크립트 
                    player_status.IsEquip = false;
                    player_status._damage = player_status._damage - item.efts[0].value;
                }

            }

            // 장비를 장착하지 않고있을때
            else
            {
                //Sword 사용
                if (item.itemName == "Sword")
                {
                    _animator.SetTrigger("Equip");
                    Debug.Log("Sword를 장착하였습니다!");
                    // UI적으로 보여줄 스트립트
                    player_status.Equipment = "Sword";
                    GetComponentInParent<Inventory>().ItemDict[item.ItemList].SetActive(true);
                    // 실질적으로 데미지를 올려줄 스크립트 
                    player_status.IsEquip = true;
                    player_status._damage = player_status._damage + item.efts[0].value;




                    player_status.IsEquip = true;
                }

                //Dagger 사용
                if (item.itemName == "Dagger")
                {
                    _animator.SetTrigger("Equip");
                    Debug.Log("Dagger를 장착하였습니다!");
                    player_status.Equipment = "Dagger";
                    // UI적으로 보여줄 스트립트
                    GetComponentInParent<Inventory>().ItemDict[item.ItemList].SetActive(true);
                    // 실질적으로 데미지를 올려줄 스크립트 
                    player_status.IsEquip = true;
                    player_status._damage = player_status._damage + item.efts[0].value;
                }
            }
            
        }
    }
}

 

 

1. Photon 환경에서의 아이템 동기화 및 인벤토리 별도관리.

-> 맵에 생성되는 아이템들이 동기화 될수있도록 처리


2. 플레이어 장비 무기에 맞는 타격모션 및 스크립터블 데이터에 따른 데미지 조절 추가.

 

3. 무기장착여부 ( isEquiped 처리 ) . .및 무기교체시 조건 처리 하기 .


0. Attack Raycast 특정방향으로만 발사되는 문제(해결)

-> 프리팹 모델링 forward 기준으로 발사되던문제 : 부모 오브젝트 기준으로 잡아주어 정상적으로 Raycast 발사되도록 수정완료.  


 

 

 

 

 

 

 

 

728x90