GReeeeN - 키세키 (기적)

제가 좋아하는 밴드와 노래방 18번 곡을 하나 소개할게요.
GReeeeN의 4개의 e는 4명의 멤버를 의미하는데요. 4명 모두 치과 의대생으로 얼굴 없는 가수로 데뷔를 하고 현재 모두 치과 의사 자격증을 갖고 있는 특이한 스펙을 지니고 있어요.
GReeeeN의 대표 이미지를 보면 이를 환하게 드러내고 웃는 모습이 멤버들을 잘 표현해 주고 있네요.



GReeeeN의 노래 중 사랑스러운 가사와 부드러운 선율로 커버곡으로도 인기가 많은 キセキ(키세키)를 소개할게요.
キセキ(키세키)는 한자로 奇跡(기적)、軌跡(자취)2개의 뜻을 가지고 있어요. 우리가 함께 걸어왔던 그 자취 속에서 우리들의 많고 작은 만남과 일들이 마치 기적과도 같다라는 내용을 담고 있어요.
많고 작은 기적들을 함께 하고 오늘보다도 내일 더 좋아하고 사랑해 줄 사람에게 불러주면 어떨까요.

明日、今日よりも好きになれる 溢れる想いが止まらない
아시타 쿄-요리모 스키니 나레루 아후레루 오모이가 토마라나이
내일, 오늘보다도 좋아하게 될 수 있어 흘러넘치는 마음이 멈추질 않아

今もこんなに好きでいるのに 言葉に出來ない
이마모 콘나니 스키데 이루노니 코토바니 데키나이
지금도 이렇게나 좋아하고 있는 데 말로 다할 수 없어

君のくれた日日が積み重なり 過ぎ去った日日2人步いた『軌跡』
키미노 쿠레타 히비가 츠미카사나리 스기삿타 히비 후타리 아루이타 ‘키세키’
네가 준 날들이 겹겹이 쌓여 지나간 날들 둘이 걸어온 ‘발자취’

僕らの出逢いがもし偶然ならば? 
보쿠라노 데아이가 모시 구-젠나라바? 
우리들의 만남이 만약 우연이라면? 

運命ならば? 君に巡り合えた それって
운메이나라바? 키미니 메구리아에타 소렛테
운명이라면? 너와 우연히 만났다는 그 사실이 

『奇跡』
‘키세키’
‘기적’

2人寄り添って步いて 永久の愛を形にして
후타리 요리솟테 아루이테 토와노 아이오 카타치니 시테
둘이 기대어 걸으며 영원한 사랑을 형태로 이루어

いつまでも君の橫で 笑っていたくて
이츠마데모 키미노 요코데 와랏테 이타쿠테
언제까지나 너의 곁에서 웃으며 있고 싶어서

アリガトウや Ah 愛してるじゃまだ足りないけど
아리가토-야 ah 아이시테루쟈 마다 타리나이케도
고마워나 Ah 사랑해로는 아직 부족하지만

せめて言わせて 「幸せです」と
세메테 이와세테 ‘시아와세데스’토
적어도 ‘행복합니다’라고 말하게 해줘 

いつも君の右の手の平を ただ僕の左の手の平が
이츠모 키미노 미기노 테노히라오 타다 보쿠노 히다리노 테노히라가
언제나 너의 오른손바닥을 단지 내 왼손바닥이

そっと包んでくそれだけで ただ愛を感じていた
솟토 츠츤데쿠 소레다케데 타다 아이오 칸지테이타
살며시 감싸는 단지 그 것만으로 사랑을 느꼈어

日日の中で 小さな幸せ 見つけ重ね ゆっくり步いた『軌跡』
히비노 나카데 치이사나 시아와세 미츠케카사네 윳쿠리 아루이타 ‘키세키’
일상 속에서 작은 행복을 찾길 반복하며 천천히 걸어온 ‘발자취’ 

僕らの出逢いは大きな世界で 小さな出來事 巡り合えた それって
보쿠라노 데아이와 오오키나 세카이데 치이사나 데키고토 메구리아에타 소렛테
우리들의 만남은 커다란 세상에서 생긴 작은 사건 우연히 만났다는 그 사실이 

『奇跡』
‘키세키’
‘기적’

うまく行かない日だって 2人で居れば晴れだって!
우마쿠 이카나이 히닷테 후타리데 이레바 하레닷테 !
잘 풀리지 않는 날이라도 둘이 함께라면 괜찮아!

强がりや寂しさも 忘れられるから
츠요가리야 사비시사모 와스레라레루카라
허세나 외로움도 잊을 수 있으니까

僕は君でなら 僕でいれるから!
보쿠와 키미데나라 보쿠데 이레루카라 !
나는 너로 인해 나로 있을 수 있으니까!

だからいつも そばにいてよ! 『愛しい君へ』
다카라 이츠모 소바니 이테요 ! ‘이토시이 키미에’
그러니까 항상 곁에 있어줘! ‘사랑스런 너에게’

2人フザけあった歸り道 それも大切な僕らの日日
후타리 후자케앗타 카에리미치 소레모 타이세츠나 보쿠라노 히비
둘이 서로 장난치며 돌아갔던 길 그것도 소중한 우리들의 날들

「想いよ屆け!!!」と傳えた時に 初めて見せた表情の君
‘오모이요 토도케!!!’토 츠타에타 토키니 하지메테 미세타 효-죠-노 키미
마음아 전해져라!!! 라고 말했을 때에 처음으로 네가 보인 표정

少し間が空いて 君がうなずいて 僕らの心 滿たされてく愛で
스코시 마가 아이테 키미가 우나즈이테 보쿠라노 코코로 미타사레테쿠 아이데
잠깐 뜸을 들인 뒤 네가 고개를 끄덕여 우리들의 마음은 가득 채워져 갈 사랑으로 

僕らまだ旅の途中で またこれから先も 
보쿠라 마다 타비노 토츄-데 마타 코레카라 사키모 
우리들 아직 여행 도중으로 또다시 앞으로도

何十年繼いていけるような未來へ
난쥬-넨 츠즈이테 이케루요-나 미라이에
몇 십 년 계속 될 것 같은 미래를 향해

例えばほら 明日を見失いそうに 僕らなったとしても
타토에바 호라 아시타오 미우시나이소-니 보쿠라낫타토시테모…
가령 봐, 우리들 내일을 놓칠 것 같이 되었다 할지라도…. 

2人寄り添って步いて 永久の愛を形にして
후타리 요리솟테 아루이테 토와노 아이오 카타치니 시테
둘이 기대어 걸으며 영원한 사랑을 형태로 이루어

いつまでも君の橫で 笑っていたくて
이츠마데모 키미노 요코데 와랏테 이타쿠테
언제까지나 너의 곁에서 웃으며 있고 싶어서

アリガトウや Ah 愛してるじゃまだ足りないけど
아리가토-야 ah 아이시테루쟈 마다 타리나이케도
고마워나 Ah 사랑해로는 아직 부족하지만

せめて言わせて 「幸せです」と
세메테 이와세테 ‘시아와세데스’토
적어도 ‘행복합니다’라고 말하게 해줘 

うまく行かない日だって 2人で居れば晴れだって!
우마쿠 이카나이 히닷테 후타리데 이레바 하레닷테 !
잘 풀리지 않는 날이라도 둘이 함께라면 괜찮아!

喜びや悲しみも 全て分け合える
요로코비야 카나시미모 스베테 와케아에루
기쁨이나 슬픔도 모두 서로 나눌 수 있는

君が居るから 生きていけるから!
키미가 이루카라 이키테 유케루카라 !
네가 있으니까 살아 갈 수 있으니까!

だからいつも そばに居てよ『愛しい君へ』最後の一秒まで
다카라 이츠모 소바니 이테요 ‘이토시이 키미에’ 사이고노 이치뵤-마데
그러니 언제나 곁에 있어줘 사랑스런 너에게 마지막 일초까지

明日、今日より笑顔になれる 君が居るだけで そう思えるから
아시타 쿄-요리 에가오니 나레루 키미가 이루다케데 소-오모에루카라
내일, 오늘보다 웃게 될 거야 네가 있는 것만으로 그렇게 생각할 수 있으니까

何十年 何百年 何千年 時を越えよう 君を愛してる
난쥬-넨 난뱌쿠넨 난젠넨 토키오 코에요- 키미오 아이시테루
몇 십년 몇 백년 몇 천년의 시간을 넘는 거야 너를 사랑해

[Unity Tutorial Roll-a-ball 07] Displaying the Score and Text

1. 점수 카운트 변수 생성 및 계산

PlayerController 스크립트 수정

}

    // 에디터 안 Inspector에서 편집 가능한 속도 조정 변수 생성
    public float speed;
    // Rigidbody 형태의 변수 생성
    private Rigidbody rb;
    // 점수 카운트 변수
    private int count;

    // 스크립트가 활성화된 첫 프레임에 호출
    void Start()
    {
        // 현재 오브젝트의 Rigidbody를 참조
        rb = GetComponent<Rigidbody>();
        // 점수 초기화
        count = 0;
    }

    // 프레임을 렌더링 하기 전에 호출
    void Update()
    {

    }

    // 물리효과 계산을 수행하기 전에 호출
    void FixedUpdate()
    {
        // 키보드의 키로 컨트롤하는 수평 축의 입력 (left, right)
        float moveHorizontal = Input.GetAxis("Horizontal");
        // 키보드의 키로 컨트롤하는 수직 축의 입력 (up, down)
        float moveVertical = Input.GetAxis("Vertical");

        // 플레이어의 이동량을 선언 (x축, y축, z축)
        Vector3 movemnet = new Vector3(moveHorizontal, 0, moveVertical);
        // 플레이어의 Rigidbody에서 movement 값만큼 힘을 가해서 이동시킴
        rb.AddForce(movemnet * speed);
    }

    // 트리거 콜라이더를 처음 접촉할 때 호출
    void OnTriggerEnter(Collider other)
    {
        // 오브젝트의 태그 값 비교
        if ( other.gameObject.CompareTag("PickUp"))
        {
            // 오브젝트 비활성화
            other.gameObject.SetActive(false);
            // 점수 카운트 업
            count = count + 1;
        }       
    }

2. UI 점수 텍스트 생성

Hierarchy -> Create -> UI -> Text -> CountText로 이름 변경

CountText -> Color -> 흰색으로 색상 변경

CountText -> Rect Transform -> 설정 (톱니 바퀴) -> Reset

CountText -> Rect Transform -> custom 박스를 Shift + Alt + 마우스 우클릭 -> left, top 선택 

CountText -> Rect Transform -> Pos X : 10, Pos Y : -10 으로 변경

3. UI 승리 텍스트 생성

Hierarchy -> Create -> UI -> Text -> WinText로 이름 변경

WinText-> Color -> 흰색으로 색상 변경

WinText-> Rect Transform -> 설정 (톱니 바퀴) -> Reset ->Pos Y : 75 로 변경

WinText-> Character -> Font Size : 24 로 변경

WinText-> Paragraph -> Alignment 가운데 정렬로 변경

4. UI 점수, 승리 텍스트 초기화 및 표시

PlayerController 스크립트 수정

 // UI 엔진
using UnityEngine.UI;

public class PlayerController : MonoBehaviour {

    // 에디터 안 Inspector에서 편집 가능한 속도 조정 변수 생성
    public float speed;
    // 에디터의 UI 점수 텍스트
    public Text CountText;
    // 에디터의 UI 승리 텍스트
    public Text WinText;

    // Rigidbody 형태의 변수 생성
    private Rigidbody rb;
    // 점수 카운트 변수
    private int count;

    // 스크립트가 활성화된 첫 프레임에 호출
    void Start()
    {
        // 현재 오브젝트의 Rigidbody를 참조
        rb = GetComponent<Rigidbody>();
        // 점수 초기화
        count = 0;
        // 점수 텍스트 표시
        SetCountText();
        // 승리 텍스트 초기화
        WinText.text = "";
    }

    // 프레임을 렌더링 하기 전에 호출
    void Update()
    {

    }

    // 물리효과 계산을 수행하기 전에 호출
    void FixedUpdate()
    {
        // 키보드의 키로 컨트롤하는 수평 축의 입력 (left, right)
        float moveHorizontal = Input.GetAxis("Horizontal");
        // 키보드의 키로 컨트롤하는 수직 축의 입력 (up, down)
        float moveVertical = Input.GetAxis("Vertical");

        // 플레이어의 이동량을 선언 (x축, y축, z축)
        Vector3 movemnet = new Vector3(moveHorizontal, 0, moveVertical);
        // 플레이어의 Rigidbody에서 movement 값만큼 힘을 가해서 이동시킴
        rb.AddForce(movemnet * speed);
    }

    // 트리거 콜라이더를 처음 접촉할 때 호출
    void OnTriggerEnter(Collider other)
    {
        // 오브젝트의 태그 값 비교
        if ( other.gameObject.CompareTag("PickUp"))
        {
            // 오브젝트 비활성화
            other.gameObject.SetActive(false);
            // 점수 카운트 업
            count = count + 1;
            // 점수 텍스트 표시
            SetCountText();
        }
    }

    // 점수 텍스트 표시
    void SetCountText()
    {
        CountText.text = "Count: " + count.ToString();
        // 12개 오브젝트 전부 수집시에 승리 텍스트 표시
        if (count >= 12)
        {
            WinText.text = "You Win!";
        }
    }
}

Player -> Inspector -> Player Controller(Script) -> Count Text, Win Text에 UI Text 설정

 

-Reference

[Displaying the Score and Text] https://unity3d.com/kr/learn/tutorials/projects/roll-ball-tutorial/displaying-score-and-text?playlist=17141

 

[Unity Tutorial Roll-a-ball 06] Collecting the Pick Up Objects

1. 플레이어 컨트롤러 스크립트에 충돌 트리거 추가

 public class PlayerController : MonoBehaviour {

    // 에디터 안 Inspector에서 편집 가능한 속도 조정 변수 생성
    public float speed;
    // Rigidbody 형태의 변수 생성
    private Rigidbody rb;

    // 스크립트가 활성화된 첫 프레임에 호출
    void Start()
    {
        // 현재 오브젝트의 Rigidbody를 참조
        rb = GetComponent<Rigidbody>();
    }

    // 프레임을 렌더링 하기 전에 호출
    void Update()
    {

    }

    // 물리효과 계산을 수행하기 전에 호출
    void FixedUpdate()
    {
        // 키보드의 키로 컨트롤하는 수평 축의 입력 (left, right)
        float moveHorizontal = Input.GetAxis("Horizontal");
        // 키보드의 키로 컨트롤하는 수직 축의 입력 (up, down)
        float moveVertical = Input.GetAxis("Vertical");

        // 플레이어의 이동량을 선언 (x축, y축, z축)
        Vector3 movemnet = new Vector3(moveHorizontal, 0, moveVertical);
        // 플레이어의 Rigidbody에서 movement 값만큼 힘을 가해서 이동시킴
        rb.AddForce(movemnet * speed);
    }

    // 트리거 콜라이더를 처음 접촉할 때 호출
    void OnTriggerEnter(Collider other)
    {
        // 오브젝트의 태그 값 비교
        if ( other.gameObject.CompareTag("PickUp"))
        {
            // 오브젝트 비활성화
            other.gameObject.SetActive(false);
        }       
    }
}

2. PickUp 오브젝트에 PickUp 태그 달기

Prefabs PickUp -> Inspector -> Tag -> AddTag

Tags -> PickUp 태그 추가

PickUp -> Tag -> PickUp 선택

3. PickUp 오브젝트에 충돌 트리거 활성화

Prefabs PickUp -> Box Collider -> Is Trigger 체크 박스 활성화

4. PickUp 오브젝트에 물리 엔진 추가 (PickUp 오브젝트 애니메이션 최적화)

Prefabs PickUp -> Add Component -> Physics -> Rigidbody -> Is Kinematic 체크 박스 활성화

 

 

-Reference

[Collecting the Pick Up Objects] https://unity3d.com/kr/learn/tutorials/projects/roll-ball-tutorial/collecting-pick-objects?playlist=17141

[WPF Key Input] WPF Keyboard Input Hooking



-Reference

https://stackoverflow.com/questions/4266378/how-do-i-capture-key-down-in-wpf


-Reference

https://msdn.microsoft.com/ko-kr/library/system.enum.getvalues(v=vs.110).aspx



-Reference



[WPF Mouse Control] Get the mouse position and Set the position in WPF

현재 마우스 절대 좌표를 구한 후 X좌표 축으로 마우스 커서 움직이게 하기



-Reference

https://social.msdn.microsoft.com/Forums/vstudio/en-US/6be8299a-9616-43f4-a72f-799da1193889/how-to-set-the-mouse-position-in-wpf?forum=wpf

[SetCursorPos] http://slaner.tistory.com/39

[Unity Tutorial Roll-a-ball 04] Setting up the Play Area

1. 벽의 부모 게임 오브젝트 생성

GameObject -> Create Empty -> 오브젝트 이름 Walls 로 변경 -> Inspector -> 설정 (톱니 바퀴) -> Reset

2. 벽 큐브 생성

GameObject -> 3D Object -> Cube -> 오브젝트 이름 WestWall 로 변경 -> Inspector -> 설정 (톱니 바퀴) -> Reset -> Walls 오브젝트로 드래그 하여 넣기

3. 벽 큐브 3개 복사하기

WestWall 선택 -> Edit -> Duplicate (단축키 : ctrl + D) -> 각 오브젝트 이름 EastWall, NorthWall, SouthWall 로 변경

4. 벽 큐브 크기와 위치 변경하기

 

 WestWall

EastWall 

NorthWall 

SouthWall 

Position 

 -10, 0, 0

 10, 0, 0

 0, 0, 10

 0, 0, -10

Scale 

 0.5, 2, 20.5

 0.5, 2, 20.5

 20.5, 2, 0.5

 20.5, 2, 0.5

 

 

 

- Reference

[Setting up the Play Area] https://unity3d.com/kr/learn/tutorials/projects/roll-ball-tutorial/setting-play-area?playlist=17141

[Unity Tutorial Roll-a-ball 03] Camera Moving

1. 카메라의 높이와 각도 수치를 변경

Main Camera -> Inspector -> Transform -> Position Y : 10, Rotation X : 45 로 수정

2. 카메라 컨트롤러 스크립트 생성

Main Camera -> Add Component -> New Script -> CameraController 이름 수정 -> Create and Add

생성된 CameraController 스크립트를 Scripts 폴더에 드로그하여 넣는다.

3. 카메라 컨트롤러 스크립트 수정

Project -> CameraController 스크립트 선택 -> Inspector -> Open

public class CameraController : MonoBehaviour {

    // 플레이어 오브젝트
    public GameObject player;
    // 카메라와 플레이어의 거리 차이
    private Vector3 offset;

    // Use this for initialization
    void Start ()
    {
        // 카메라와 플레이어의 거리 차이를 offset으로 둔다.
        // 카메라 위치 - 플레이어 위치
        offset = transform.position - player.transform.position;
    }

    // 프레임을 렌더링 하기 전에 호출
    void Update()
    {

    }

    // 모든 아이템이 Update()에서 다 처리된 후에 호출
    void LateUpdate ()
    {
        // 카메라가 플레이어와 offset 거리를 유지하며 움직인다.
        transform.position = player.transform.position + offset;  
    }
}

 

Hierarchy -> Main Camera -> Inspector -> CameraController -> Player 버튼 -> Scene -> Player 선택

 

- Reference

[Unity Moving the Player] https://unity3d.com/kr/learn/tutorials/projects/roll-ball-tutorial/moving-camera?playlist=17141

+ Recent posts