| 일 | 월 | 화 | 수 | 목 | 금 | 토 | 
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 | 
| 9 | 10 | 11 | 12 | 13 | 14 | 15 | 
| 16 | 17 | 18 | 19 | 20 | 21 | 22 | 
| 23 | 24 | 25 | 26 | 27 | 28 | 29 | 
| 30 | 
- python
- 문제풀이
- w3school
- guide
- W3Schools
- 오류
- Class
- loop
- 시작해요 언리얼 2022
- parameter
- Basic
- 기초
- github
- DP
- String
- 백준
- 파이썬
- Unreal Engine 5
- c++
- dynamic
- UE5
- Algorithm
- Unity
- Material
- C#
- 프로그래밍
- 재귀
- dfs
- Tutorial
- Programming
- Today
- Total
행복한 개구리
Unity 3D 개인프로젝트 21.04.24. 본문

당장 구현해야 하는 부분
- 회피시 위치이동
- 아이템 주우면 인벤토리 및 캐릭터와 연동
============================================================================
아이템 인벤토리 및 캐릭터연동을 공부하는데 잘 안 돼버렸다
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TestHero : MonoBehaviour
{
    public float speed = 2f;
    public Animation anime;
    public System.Action<int> OnGetItem;
    private Coroutine moveRoutine;
    void Start()
    {
        this.moveRoutine = this.StartCoroutine(MoveForwardImpl());
    }
    public void Stop()
    {
        if(this.moveRoutine != null)
        {
            this.StopCoroutine(this.moveRoutine);
            
        }
    }
    IEnumerator MoveForwardImpl()
    {
        
        while (true)
        {
            this.transform.Translate(Vector3.forward * this.speed * Time.deltaTime);
            yield return null;
        }
    }
    private void OnTriggerEnter(Collider other)
    {
        if(other.tag == "Item")
        {
            var item = other.GetComponent<TestItem>();
            this.OnGetItem(item.id);
            Destroy(item.gameObject);
        }
    }
    // Update is called once per frame
    void Update()
    {
        
    }
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TestItem : MonoBehaviour
{
    public int id = 100;
    public float speed = 10f;
    
    // Update is called once per frame
    void Update()
    {
        this.transform.Rotate(0, this.speed * Time.deltaTime, 0);
    }
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class UITestItem : MonoBehaviour
{
    public int id;
    public Image icon;
    public void Init(int id, Sprite icon)
    {
        this.id = id;
        this.icon.sprite = icon;
    }
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class TEST : MonoBehaviour
{
    public Button open;
    public Button close;
    public UITestInven inven;
    public TestHero hero;
    // Start is called before the first frame update
    void Start()
    {
        this.hero.OnGetItem = (id) =>
        {
            Debug.LogFormat("{0}을 획득했습니다.", id);
            this.inven.AddItem(id);
            this.hero.Stop();
        };
        this.inven.Close();
        this.open.onClick.AddListener(() =>
        {
            this.inven.gameObject.SetActive(true);
        });
        this.close.onClick.AddListener(() =>
        {
            this.inven.gameObject.SetActive(false);
        });
    }
    // Update is called once per frame
    void Update()
    {
        
    }
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.U2D;
using UnityEngine.UI;
public class UITestInven : MonoBehaviour
{
    public SpriteAtlas atlas;
    public GameObject[] empty;
    public GameObject prefab;
    
    List<UIItem> items = new List<UIItem>();
    
    public void Open()
    {
        this.gameObject.SetActive(true);
    }
    public void Close()
    {
        this.gameObject.SetActive(false);
    }
    public void AddItem(int id)
    {
        var parent = this.empty[this.items.Count].transform;
        var go = Instantiate<GameObject>(this.prefab, parent);
        var uiItem = go.GetComponent<UITestItem>();
        var icon = this.atlas.GetSprite("inventory_item_sword_A");
        uiItem.Init(id, icon);
    }
}
일단은 어떤 원리로 돌아가는지 했다. 오류가 났지만 이해는 했으니 테이블도 있는 실전에 적용해보자.
(오류는 인벤토리에서 AddItem하면서 uiItem.Init에서 발생했다.)
============================================================================

Item이란 빈 오브젝트를 생성하여 그 안에 보여줄 물체를 넣어두고 Item의 태그를 Item으로 바꿔주었다.
그리고 HeroController에서 OnTriggerEnter을 이용하여 둘이 부딪히면 아이템이 사라지게 했다. 아직은 데이터 테이블이 없어서 여러 에러가 나지만 테이블을 만들고 실행한다면 정상작동 할 듯 하다.
-데이터 테이블 만들기
-먹을때 OnGetItem대리자로 아이템의 id를 구하고 그 id의 해당되는 아이템을 캐릭터의 오른손에 쥐어주기 (오른손의 위치는 스크립트에 바인딩 시키자.)
-회피기는 뒤쪽으로 (3정도?) 적당한 속도로 이동시키게 수정하자. 그리고 아이템을 먹으면 인벤토리에 객체를 띄우는데 그 이미지는 스프라이트아틀라스를 이용하고 아이디와 수량은 전부 코드로 넘겨주자. 버튼도 하나 달아서 클릭하면 간략한 정보가 뜨게 할 예정이다.
이걸 다 하고 시간이 넉넉하다면
-로그인 구현
-적과의 싸움 구현
-애니메이션 이용해서 으로 스킬 애니메이션 되면 구현
'Unity > Project : Unity 3D Untitled' 카테고리의 다른 글
| Unity3D 개인프로젝트 21.04.25. (0) | 2021.04.25 | 
|---|---|
| Unity 3D 개인프로젝트 21.04.20. (0) | 2021.04.20 | 
| Unity 3D 개인프로젝트 21.04.19. (0) | 2021.04.20 | 
| Unity 3D 개인프로젝트 21.04.18. (0) | 2021.04.20 | 
| Unity 3D 2021.04.17~ (0) | 2021.04.17 | 
 
           
                   
                   
                  