종잇장
Unity ECS Study Log - 2
종잇장
언제까지 유니티만 할거냐
종잇장
전체
오늘
어제
  • 분류 전체보기 (60)
    • 내 생각 (1)
    • 개인프로젝트 일지 (11)
    • Study Log (8)
    • Unity Tips (18)
    • Unity Entities Tutorial (10)
    • Unity Fungus (9)
    • Unity VContainer (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • injection
  • Fungus
  • 링크
  • inject
  • Zelda
  • tutorial
  • 싱글턴
  • 펑거스
  • Unity
  • 싱글톤
  • 비주얼노벨
  • Awakening
  • 스토리텔링
  • 비주얼 노벨
  • Visual Novel
  • Dots
  • scene
  • 미연시
  • 꿈꾸는 섬
  • 튜토리얼
  • 젤다
  • 꿈섬
  • c#
  • 유니티
  • Dependency
  • DOP
  • singleton
  • Entities
  • vcontainer
  • ECS

최근 댓글

최근 글

hELLO · Designed By 정상우.
Study Log

Unity ECS Study Log - 2

2023. 1. 1. 21:49
목차
  1. 1. 직접 구현해보기
  2. 다음에 할 일.

이전에 구현에 대해 대충 감만 잡았고 이번에는 대충 어느 정도 구현해보고 앞으로 어떻게 프로젝트해보면서 공부해봐야 할지 정리를 해봤습니다.

 


 

1. 직접 구현해보기

 

public struct TransformTargetData : IComponentData
{
    public float moveSpeed;
}

public class TransformTargetAuthoring : MonoBehaviour
{
    public float moveSpeed = 1.0f;
}

public class TransformTargetBaker : Baker<TransformTargetAuthoring>
{
    public override void Bake(TransformTargetAuthoring authoring)
    {
        AddComponent(new TransformTargetData()
        {
            moveSpeed = authoring.moveSpeed,
        });
    }
}

저번에 Spawner코드를 참고해서 오브젝트를 이동시키는 코드를 짜봤습니다.

 

 

public partial struct TransformTargetSystem : ISystem
{
    public void OnCreate(ref SystemState state) { }

    public void OnDestroy(ref SystemState state) { }

    public void OnUpdate(ref SystemState state)
    {
        foreach (var (transform, transformTarget) in SystemAPI.Query<RefRW<LocalTransform>, RefRO<TransformTargetData>>())
        {
            Vector3 dir = Vector3.zero;
            if (Input.GetKey(KeyCode.UpArrow)) dir += Vector3.forward;
            if (Input.GetKey(KeyCode.DownArrow)) dir += Vector3.back;
            if (Input.GetKey(KeyCode.LeftArrow)) dir += Vector3.left;
            if (Input.GetKey(KeyCode.RightArrow)) dir += Vector3.right;
            if (dir == Vector3.zero) continue;

            dir = dir.normalized;
            var transformValue = transform.ValueRW;
            transformValue.Rotation = Quaternion.Euler(0f, 90f - Mathf.Atan2(dir.z, dir.x) * Mathf.Rad2Deg, 0f);
            transformValue = transformValue.Translate(dir * transformTarget.ValueRO.moveSpeed * SystemAPI.Time.DeltaTime);
            transform.ValueRW = transformValue;
        }
    }
}

Input 클래스는 접근이 가능하길래 사용해서 간단하게 이동하는 코드를 짜봤습니다.

RW, RO가 ReadWrite, ReadOnly의 약자로 보이는데, 제한하는 것 외에도 구분한 특별한 이유가 있지 않을까 싶네요.

시간이 된다면 읽기만 하는 코드에서 rw, ro 각각 사용을 비교해보도록 하겠습니다.

 

 

 

 


 

 

다음에 할 일.

이 샘플 프로젝트처럼 Input을 받아서 움직이고 투사체를 발사하는 간단한 슈팅게임을 만들어볼까 합니다.

이후에는 Physics 관련 코드도 추가해 보고, JobSystem, BurstCompiler 차근차근 공부해보며 추가할 예정입니다.

'Study Log' 카테고리의 다른 글

Unity ECS Study Log - 6  (0) 2023.01.15
Unity ECS Study Log - 5  (0) 2023.01.14
Unity ECS Study Log - 4  (0) 2023.01.09
Unity ECS Study Log - 3  (1) 2023.01.07
Unity ECS Study Log - 1  (0) 2023.01.01
  • 1. 직접 구현해보기
  • 다음에 할 일.
'Study Log' 카테고리의 다른 글
  • Unity ECS Study Log - 5
  • Unity ECS Study Log - 4
  • Unity ECS Study Log - 3
  • Unity ECS Study Log - 1
종잇장
종잇장
언제까지 유니티만 할거냐종잇장 님의 블로그입니다.
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.