캐릭터의 스킬 트리 작업을 진행했다.

스킬 노드간의 관계에 따라 간선의 상태를 다르게 설정해야했다.

case 1. 활성화된 노드(부모) - 활성화된 노드(자식)  -> 밝게 빛나는 간선
case 2. 활성화된 노드(부모) - 비활성화된 노드(자식) -> 하이라이트 표시된 간선 (임시로 빨갛게 표시함)
case 3. 비활성화된 노드(부모) - 비활성화된 노드(자식) - > 회색빛 간선
세 가지 케이스로 분류할 수 있다.

해당 간선은 스킬 트리와 장비 트리에 사용되기때문에 두 케이스를 고려해 작업해야했다.

1
2
3
4
5
6
    public GameObject CreateLineObject<T>(Vector3 start, Vector3 end, T data,Transform parent) {
        GameObject LinePrefab = Resources.Load("Prefabs/LineRenderer"as GameObject;
        GameObject Line = Instantiate<GameObject>(LinePrefab,parent);
        Line.GetComponent<RenderBridge>().Init(start, end, data);
        return Line;
   }//FactoryManager
cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    public void Init<T>(Vector3 start, Vector3 end, T data) {
        type = typeof(T);
        if(type == typeof(SkillDTO)) {
            skill = (SkillDTO)Convert.ChangeType(data, type);
            Debug.Log("skill");
            Debug.Log(skill.Number);
        }
        else {
            //equip = data;
            equip = (EquipmentDTO)Convert.ChangeType(data, type);
            Debug.Log("Equip");
        }
        parentPosition = this.gameObject.transform.parent.position;
        parentPosition_2 = this.gameObject.transform.parent.position;
        startPosition = start;
        endPosition = end;
        this.GetComponent<LineRenderer>().SetPosition(0, startPosition);
        this.GetComponent<LineRenderer>().SetPosition(1, endPosition);
        parentPosition = this.transform.parent.position;
        initialized = true;
    }
cs

각 노드는 FactoryManager라는 클래스를 통해 인스턴스화된다.

FactoryManager의 CreateLineObject가 호출될 때 받은 data의 타입에 따라 어떻게 처리할지 if문으로 구분했다.(이부분은 분명 더 좋은 방법이 있을것같은데 당장 떠오르는게 없었다...)

'Unity > 작업&삽질노트' 카테고리의 다른 글

2021-08-12 작업일지  (0) 2021.08.12
2021-08-09 작업일지  (0) 2021.08.09
2021-08-04 작업일지  (0) 2021.08.04
2021-08-03 작업일지  (0) 2021.08.03
[작업일지] 2019-06-13  (0) 2019.06.13

https://www.npmjs.com/package/tedious

 

tedious

A TDS driver, for connecting to MS SQLServer databases.

www.npmjs.com

Node.js와 MSSQL을 연결하기에 앞서, 우선 MSSQL 서버 데이터베이스의 버전을 반드시 먼저 확인해야한다.

Node.js와 MSSQL을 연결하기 위해서는 tedious가 설치되어있어야 한다.

(2021-06-24 기준 tedious는 sql server 2017 버전까지만 지원한다.)

 

http://knexjs.org/

 

Knex.js - A SQL Query Builder for Javascript

The knex.schema is a getter function, which returns a stateful object containing the query. Therefore be sure to obtain a new instance of the knex.schema for every query. These methods return promises. createTable — knex.schema.createTable(tableName, cal

knexjs.org

그리고 knex를 이용해 MSSQL에 연결할것이다.

우선 위 모듈들을 npm으로 설치해준다.

npm install mssql
npm install tedious
npm install knex


다음으로 확인해보아야 할것은 Sql Server 구성 관리자에서 SQL Server Browser와 사용하려는 서버의 Tcp/Ip가 실행중/사용 상태인지 확인해야한다. (실행/사용중이 아니라면 실행/사용중으로 바꾼다.)

TCP 포트 번호는 따로 설정해줬을 경우 기억해둔다.

다음은 knex로 데이터베이스에 연결하기 위한 Config정보를 작성한다.

참고로 user와 password는 데이터베이스에 연결할 때 입력하는 아이디와 비밀번호다.

 

이제 knex를 이용해 데이터베이스의 테이블을 관리할 수 있다.

관련 메소드들은 상단에 링크된 페이지에서 확인 가능하다.

위와 같이 SELECT로 정상적으로 테이블이 불러와지는것을 확인할 수 있다.

해당 포스팅은 아래 링크의 튜토리얼을 기반으로 진행되고있습니다.

http://www.rastertek.com/tutdx11.html

 

DirectX 11 Tutorials

Tutorial 15: FPS, CPU Usage, and Timers

www.rastertek.com

 

DirectX SDK 11 (June 2010버전)과 Visual Studio 2019버전을 이용해 프레임워크 세팅을 할것이다.

우선 Windows 데스크톱 마법사 - 콘솔 애플리케이션 - 빈 프로젝트 체크로 프로젝트를 생성한다.

프로젝트 세팅에서 다음 사항을 세팅해준다.

C/C++ -> 일반 -> 추카 포함 디렉터리 -> $(DXSDK_DIR)Include

링커 -> 일반 -> 추가 라이브러리 디렉터리 -> $(DXSDK_DIR)Lib/x86

C/C++ -> 고급 -> 특정 경고 사용 안 함 ->4005

 

위 프로젝트 세팅이 앞으로 진행할 포스팅의 기본적인 설정이다.

CREATE TABLE은 DB에 새로운 테이블을 생성할 때 사용된다.

기본적인 사용법은 다음과 같다.

CREATE TABLE (TableName)
(
FirstColumnName INT IDENTITY(1,1) PRIMARY KEY NOT NULL,
SecondColumnName INT NULL
REFERENCES RelatedTable(FirstColumn)
ON DELETE SET NULL,
ThirdColumnName VARCHAR(10) NULL,
FourthColumnName FLOAT NULL DEFAULT (10)
)

첫번째 열은 기본키로 정의되었기때문에 반드시 NOT NULL체크를 해주어야만 한다.

그리고 identity(자동 증가 열)을 정의해준다(1부터 1씩 증가). 

두번째 열은 외래 키로 정의했다. RelatedTable이라는 이름을 가진 테이블의 FirstColumn이름을 가진 열과 연관을 시켰다.

나머지 열은 각자 열의 용도에 맞는 데이터 유형과 크기를 지정해주었다.

만들어진 테이블을 수정하려면 ALTER TABLE을 사용하면된다.

테이블을 삭제할때는 DROP TABLE을 사용한다.

 

CREATE INDEX를 통해 테이블에 인덱스를 생성할 수 있다.

CREATE INDEX IndexName
ON newTable(ColumnName)

DROP INDEX를 통해 인덱스를 삭제할 수 있다.

DROP INDEX IndexName
ON newTable

이 책에서는 클러스터 인덱스, 넌클러스터 인덱스, 다중컬럼 인덱스에 대해 다루지 않았다.
나중에 따로 공부해보자.

'DB > 관계형 DB' 카테고리의 다른 글

데이터 수정  (0) 2021.05.14
임시 테이블 & 테이블 변수  (0) 2021.05.13
저장 프로시저  (0) 2021.05.12
서브쿼리(Subqueries)  (0) 2021.05.07
교차 조인(cross join)  (0) 2021.04.29

 INSERT INTO

INSERT INTO (테이블 명)
(열 이름1, 열 이름2, ...)
VALUES
(넣을 데이터1, 넣을 데이터2, ...),
...

기본 형태는 위와 같다.

INSERT에서 명시하지 않은 열의 데이터는 NULL로 처리된다.

위와 같이 테이블을 삽입할수도 있다.

 

DELETE

데이터를 삭제할때는 DELETE를 사용한다.

TRUNCATE TABLE로도 테이블을 삭제할 수 있다.

 

UPDATE

UPDATE로는 원래 있던 값을 지정한 값으로 업데이트 할 수 있다.

ID가 1인 데이터에 한해 LastName과 State값을 바꿔주는 예시이다.

WHERE절을 사용하지 않으면 모든 행에 대해서 업데이트가 적용되니 주의해야한다.

 

'DB > 관계형 DB' 카테고리의 다른 글

테이블 관리  (0) 2021.05.14
임시 테이블 & 테이블 변수  (0) 2021.05.13
저장 프로시저  (0) 2021.05.12
서브쿼리(Subqueries)  (0) 2021.05.07
교차 조인(cross join)  (0) 2021.04.29

임시 테이블

- 기본적으로 로컬 임시 테이블의 이름은 #으로 시작된다.(##가 붙으면 전역 임시 테이블이다.)

- 임시 테이블은 세션이 종료되었을 때 삭제되지 않고 남아있으면 자동으로 삭제된다.

- 임시 테이블은 현재 설정된 데이터베이스에 저장되지 않고 시스템 데이터베이스 tempDB에 저장된다.
단, 데이터 건수가 작을때는 메모리에만 존재하고, tempDB 사이즈가 증가하지 않는다.(데이터가 29K이하 일때는 메모리에 존재)

- 로컬 임시 테이블은 테이블을 만든 세션에서만 사용 가능하고, 전역 임시 테이블은 외부 세션에서도 사용이 가능하다.

 

테이블 변수

- 테이블 변수의 이름은 @로 시작된다.

- 테이블 변수는 테이블 변수가 정의된 함수 및 저장프로시저 및 일괄 처리가 끝나면 자동으로 정리된다.

- 테이블 변수와 관련된 트랜잭션은 테이블 변수가 업데이트 되는 동안만 지속된다. 따라서 테이블 변수를 사용하면 리소스 잠금과 로깅에 대한 요구가 줄어든다.

 

임시 테이블과 테이블 변수

필요한 경우

1. 여러 단계를 거쳐 동일한 데이터에 반복작업을 실행할 때.

2. 복잡한 쿼리를 단순화 할때.

3. 서버상의 커서 사용으로 인한 부하를 줄일 때.

차이점

대용량의 데이터를 처리할때 임시 테이블이 유리, 소용량의 데이터를 처리할때는 테이블 변수가 유리하다.

'DB > 관계형 DB' 카테고리의 다른 글

테이블 관리  (0) 2021.05.14
데이터 수정  (0) 2021.05.14
저장 프로시저  (0) 2021.05.12
서브쿼리(Subqueries)  (0) 2021.05.07
교차 조인(cross join)  (0) 2021.04.29

+ Recent posts