- Today
- Total
Notice
Recent Posts
Recent Comments
Link
250x250
프로그래밍 농장
오픈월드 게임 TODO 22/11/03 [Unity] 본문
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
'Unity' 카테고리의 다른 글
게임개발-스크립트 작성 기본개념 [Unity] (0) | 2022.11.07 |
---|---|
2022/11/04 TODO (+비동기로딩씬 구현) [Unity] (0) | 2022.11.04 |
포톤 실시간 동기화 방식 Synchronization Issues [Unity] (0) | 2022.11.02 |
(해결)JoinRandomRoom failed. Client is on NameServer (must be MasterServer for matchmaking) . . [Unity] (0) | 2022.11.02 |
Trajectory Line (Line Renderer) [Unity] (0) | 2022.10.31 |