디시인사이드 갤러리

마이너 갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

[💬] 이동형 조이스틱

늅늅(222.114) 2017.11.18 15:47:44
조회 1497 추천 14 댓글 6
														

질문글 : https://gall.dcinside.com/mgallery/board/view/?id=game_dev&no=13203&page=1


// 어느정도 수준으로 글을 써야하는지 몰라서

// 최적화나 그런거 신경안쓰고 최대한 이해하기 쉽게 구현했어



viewimage.php?id=2abcdd23dad63db0&no=29bcc427bd8777a16fb3dab004c86b6fe0f25512895f218fe4112c1029e51c1473504281c34c82dbc1d19a0fa54c4023b650235ef6e6351a7590

이걸 원한게 맞겠지?


일단 코드랑 에디터 모습 보여주고 설명할게


코드

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class Player : MonoBehaviour {
 
    public GameObject Origin;
    public GameObject Controller;
 
    public float Speed;
 
    private Transform _transform;
    private GameObject _originObj;
    private GameObject _controllerObj;
    private Vector3 _originPos;
 
    // Use this for initialization
    void Start () {
        _transform = this.transform;
    }
    
    // Update is called once per frame
    void Update () {
        Move();
    }
 
    private void Move()
    {
        // 첫 클릭 : 조이스틱 생성
        // 이후 클릭 : 이동
        // 클릭 끝 : 조이스틱 제거
        // 첫 클릭 = Input.GetMouseButtonDown(0)       : 클릭 처음 했을때 한번 호출
        // 이후 클릭 = Input.GetMouseButton(0)         : 클릭하는 중에 호출됨 (클릭 끝나지 않으면 계속 호출)
        // 클릭 끝 = Input.GetMouseButtonUp(0)         : 클릭 끝나면 호출됨 (손 떼면 호출)
 
        if (Input.GetMouseButtonDown(0))
        {
            // 첫 클릭
            // 1. 클릭된 좌표를 기준 좌표로 설정
            // 2. 조이스틱 이미지 생성
 
            // 1. 클릭된 좌표를 기준 좌표로 설정
            // 기준 좌표 = 메인카메라 기준으로 마우스 위치를 스크린 좌표를 월드 좌표로 변환 
            // ScreenToWorldPoint = 스크린 좌표계 -> 월드 좌표계 변환
            // Input.mousePosition = 현재 마우스 위치(스크린 좌표계)
            _originPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
 
            // 2. 클릭된 좌표에 조이스틱 생성
            _originObj = Instantiate(Origin, _originPos - (Vector3.forward * _originPos.z), Quaternion.identity);
            _controllerObj = Instantiate(Controller, _originPos, Quaternion.identity);
        }
        else if (Input.GetMouseButton(0))
        {
            // 이후 클릭
            // 1. 컨트롤러 현재 클릭 위치로 이동
            // 2. 기준 좌표와 이동한 마우스 위치의 방향을 계산
            // 3. 해당 방향으로 캐릭터 이동
 
            // 1. 컨트롤러 현재 클릭 위치로 이동
            _controllerObj.transform.position = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            _controllerObj.transform.position -= (Vector3.forward * _controllerObj.transform.position.z);
 
            // 2. 기준 좌표와 이동한 마우스의 위치의 방향을 계산
            // 벡터의 개념을 알고있으면 A-B = B가 A를 보는 방향
            // 즉 이동한 마우스 위치 벡터 - 기준 좌표 벡터 = 기준좌표에서 이동한 마우스 위치를 보는 방향
 
            // 방향 = 현재 마우스 위치 (월드 좌표계) - 기준 좌표
            Vector3 dir = Camera.main.ScreenToWorldPoint(Input.mousePosition) - _originPos;
            // dir 벡터의 크기를 1로 만든다 (Normalize)
            dir.Normalize();
 
            // 3. 해당 방향으로 캐릭터 이동
            _transform.position += dir * Speed * Time.deltaTime;
        }
        else if (Input.GetMouseButtonUp(0))
        {
            // 클릭 끝
 
            // 1. 조이스틱 제거
            Destroy(_originObj);
            Destroy(_controllerObj);
        }
    }
}
cs


에디터

viewimage.php?id=2abcdd23dad63db0&no=29bcc427bd8777a16fb3dab004c86b6fe0f25512895f218fe4112c1029e51c14735042c5911defd8c2d59f0da4244128313e3042a06c2dc62314bb7c4cd6



설명은 코드에 써놨는데 이해하기 힘들 수도 있는 부분들을 아래에 적어줄게


벡터나 벡터의 연산은 내가 설명하는 것보다 이해하기 쉽게 쓴 글을 본적있어서 링크로 대체할게
http://lab.gamecodi.com/board/zboard.php?id=GAMECODILAB_Lecture_series&page=1&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=122

http://lab.gamecodi.com/board/zboard.php?id=GAMECODILAB_Lecture_series&page=1&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=123

두 글을 읽었거나 벡터에 대한 개념이 있다면
70번째 줄에서 dir을 Normalize (벡터의 크기를 1로 만든다)를 한 이유를 눈치챘을 수도 있어
그 이유는 내가 원하는 속도로 이동하기를 원하기 때문이야
만약 Normalize를 하지않는다면 니가 기준좌표(하얀색 원, 첫 클릭 위치)에서 컨트롤러(회색 원, 현재 클릭 위치)를 최대한 멀리하면
엄청 빨리 움직이고 최대한 붙이면 엄청 천천히 움직이는거야
어? 나는 그렇게 속도 조절하는게 좋은데?라고 생각하면 Normalize를 하지않고 적절한 보정을 해주고 사용하면 되는거구


Time.deltaTime에 대해서 설명하자면 프레임과 프레임간의 시간이야
이걸 곱해주는 이유를 설명할게
FPS(Frame per second) 즉 1초에 몇 프레임이냐라는 거잖아
그런데 우리가 만든 게임을 플레이하는 사람마다 성능이 다른 모바일 기기, PC를 사용하잖아
갤럭시s3 쓸수도 있고 갤럭시노트8 쓸수도 있고 
갤럭시s3는 FPS가 20이라 Move 함수가 30번 호출되고 갤럭시노트8는 FPS가 120이라 Move가 120번 호출된다고 생각해봐
싱글 플레이 게임이면 밸런스 맞추기 힘들 테고 멀티 플레이면 갤럭시s3 입장에서는 갤럭시노트8이 스피드 핵처럼 보일꺼야 
그래서 Time.deltaTime을 곱해서 이동하면 1초에 speed 만큼 이동하게 만드는거야
이렇게 되면 30번 호출되나 120번 호출되나 같은 거리 이동을 하거든

viewimage.php?id=2abcdd23dad63db0&no=29bcc427bd8777a16fb3dab004c86b6fe0f25512895f218fe4112c1029e51c14735042c5911defd8c2d59f0da4244128313e3f42f53d2a982346bb7c4cd6

FPS가 1초간 프레임수니까 프레임 수 만큼 사이 시간(deltaTime)과 speed를 곱하고 더하면 당연히 1초에 speed만큼 움직이는 거  

ㅋㅋㅋ 당연한건데 더 이해하기 쉽게 참고 자료(?)라고 생각해둬


다른거 이해안가는거 있으면 댓글 달아줘





자동등록방지

추천 비추천

14

고정닉 2

0

원본 첨부파일 1

댓글 영역

전체 댓글 0
등록순정렬 기준선택
본문 보기
자동등록방지

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 말머리 제목 글쓴이 작성일 조회 추천
2858 설문 SNS로 싸우면 절대 안 질 것 같은 고집 있는 스타는? 운영자 24/05/06 - -
2859 AD 나혼렙 어라이즈 그랜드 론칭! 운영자 24/05/09 - -
159608 뉴스 [인디言] 다마고치에 타이쿤 더한 ‘차깨비 찻집’ 게임메카갤로그로 이동합니다. 24.05.11 30 0
159490 공지 인디 게임 개발 갤러리 규칙 - 질문 전 필독!! [5] 에뚜갤로그로 이동합니다. 24.05.10 136 2
52873 공지 게임제작 초심자를 위한 글 모음 [9] Goranic갤로그로 이동합니다. 20.07.02 62834 51
123789 공지 뉴비 개임개발 하려는데 뭐부터 해야하나요 복사본 [14] 흉황갤로그로 이동합니다. 23.04.11 11331 16
159636 💬 2d게임은 유니티가 답임? ㅇㅇ [1] ㅇㅇ(125.143) 11:00 8 0
159635 💬 플레이엑스포 부스 컴퓨터는 다 사비로 사서 설치하는거? [1] ㅇㅇ갤로그로 이동합니다. 10:09 53 0
159634 💬 이겜 용량 33메가라는데 가능한거맞음?? [6] ㅇㅇ(1.224) 10:04 109 0
159633 💬 폭발관련 상호작용 구현 [2] ㅇㅇ갤로그로 이동합니다. 09:19 57 0
159632 💬 게임개발 입문자인데 [3] ㅇㅇ갤로그로 이동합니다. 09:05 95 0
159628 🐣질문 유니티 상속 관련 질문! [7] 야유요갤로그로 이동합니다. 05:33 116 0
159627 💬 이겜 존나 갓겜같은데 [7] Moriae갤로그로 이동합니다. 05:32 307 2
159626 💬 밥벌이는 역시 [2] ㅇㅇ갤로그로 이동합니다. 05:27 80 0
159625 💬 재미있는 겜은 왜 재미있는거임? [9] Moriae갤로그로 이동합니다. 05:10 192 0
159624 🐣질문 게임 개발 공부 하는데 공부용으로 볼 게임 추천해줄 수 있음? [3] ㅇㅇ(211.215) 01:52 167 0
159623 💬 도트 크기 클수록 어렵다는건 알겠는데 궁금한점 [52] ㅆㅇㅆ(124.216) 01:12 475 0
159622 📜일지 70% 제작 완료..! [JAIL DICE: Roll to Break] [9] 균이게임즈갤로그로 이동합니다. 01:08 198 4
159621 💬 실베에 올라온 애니멀 웰 홈프갤로그로 이동합니다. 00:11 279 1
159620 🐣질문 유니티 초보 질문!! [3] ㅇㅇ(175.211) 05.11 120 0
159619 💬 인디겜으로 밥벌이 가능할까? [25] ㅇㅇ(125.247) 05.11 504 1
159618 📜일지 "아사나기" 완료 [5] ㅇㅇ갤로그로 이동합니다. 05.11 371 0
159616 💬 플엑 인디게임들 보고 있는데 ㅇㅇ(121.139) 05.11 186 0
159615 🐣질문 구버전 유니티 오브젝트 생성?창에서 ui가 안잡힘 [1] 나는치킨갤로그로 이동합니다. 05.11 101 0
159614 💬 나도 1000배 챌린지 해봄 [4] 고물이갤로그로 이동합니다. 05.11 299 4
159613 💬 플레이엑스포 참가업체 소개에 있는게 다임? [1] ㅇㅇ갤로그로 이동합니다. 05.11 202 0
159612 💬 자바스크립트 너무 싫다 [2] Leopard갤로그로 이동합니다. 05.11 139 0
159611 💬 남은 토요일 코딩 더하기 vs 아트나스토리만들기 vs 게임하고 쉬기 [7] ㅇㅇ(1.251) 05.11 189 1
159610 💬 님들 그거 앎? [2] ㅇㅇ갤로그로 이동합니다. 05.11 258 0
159609 💬 public int값이 코드에서 선언 후 인스펙터에서 변경하면 [6] GAKA갤로그로 이동합니다. 05.11 164 0
159607 💬 [Project BS] 1000배의 속도로 날려본적 있나? [14] mansu3갤로그로 이동합니다. 05.11 529 8
159606 🐣질문 현 시점 유니티 언리얼 입문 난이도 차이 있음? [10] ㅇㅇ(211.206) 05.11 282 0
159605 💬 인디게임개발 한번쯤은 재밌고 해볼만하다 [2] ㅇㅇ(211.193) 05.11 385 2
159604 💬 존나 재밌는 게임 기획 생각났다 다디졌다 [4] ㅇㅇ(61.75) 05.11 243 2
159603 💬 언리얼은 유니티 없었으면 쓰지도 못했음. [3] ㅇㅇ(121.138) 05.11 442 9
159602 📜일지 Space Zombie Shooter 개발 일지 #05 - 헤머 추가 [5] Nomadway갤로그로 이동합니다. 05.11 108 1
159601 💬 님들은 스킬구상할때 걍 노트로 대충 그림 ?? ㅇㅇ갤로그로 이동합니다. 05.11 81 0
159600 🐣질문 유니티의 쉐이더가 언리얼의 쉐이더야? ㅇㅇ(221.146) 05.11 95 0
159598 💬 이정도면 러시아어를 지원해야되는건가? [5] ㅇㅇ(175.200) 05.11 318 0
159597 🐣질문 유니티 질문 [3] 7월갤로그로 이동합니다. 05.11 113 0
159596 🐣질문 초보질문 유니티 TMP텍스트 질문 [5] ㅇㅇ(211.210) 05.11 89 0
159595 💬 캐주얼 게임 사운드 에셋 찾아줘ㅠㅠ [2] ㅇㅇ(121.158) 05.11 100 0
159594 💬 유니티 프로그래밍할때 영어대신 한글 ㄱㅊ? [4] ㅇㅇ(59.13) 05.11 256 0
159593 💬 나 괴롭히던사람 악당캐릭터에 얼굴 비슷하게 묘사하려는데, 개념없는짓이려나 [8] ㅇㅇ(118.220) 05.11 251 0
159592 💬 지금까지 만든것 + 방향 정함 [10] 사슴발레리나갤로그로 이동합니다. 05.11 314 5
159591 🐣질문 야들아 블렌더로 3D 캐릭 하나 뽑는다 치자 메모리 점유는 어케봐? [2] ㅆㅇㅆ(124.216) 05.11 212 0
159590 💬 유데미 강의 할인 자주하는거임? [2] ㅇㅇ(14.38) 05.11 117 0
159589 🐣질문 스팀에 출시해보신 분들 질문좀요 처음이라 어려움ㅠㅠ [9] ㅇㅇ(112.148) 05.11 263 0
159588 💬 3끼 배달음식먹으며 코딩만하는게 소원 [4] ㅇㅇ(118.221) 05.11 252 1
159587 💬 돈이 존나 많으면 좋겠다. [7] ㅇㅇ갤로그로 이동합니다. 05.11 294 2
159586 💬 오랜만에 좋은 강좌 찾아서 알리려는데 [7] ㅇㅇ(203.152) 05.11 260 0
159584 💬 네러티브 자산 이야기 [1] ㅐㅐㅋㄷ갤로그로 이동합니다. 05.11 172 1
159583 🐣질문 데이터애셋이랑 데이터 테이블이랑 [3] 뱁새(221.146) 05.11 98 0
159582 💬 스팀 상점 페이지 만드는 게 이렇게 힘든 거였나 [5] 닉넴을못정함갤로그로 이동합니다. 05.11 233 0
159581 📜일지 커넥티드클루 개발일지 20. [7] Alpheratz*갤로그로 이동합니다. 05.11 277 7
159580 💬 유니티 linq 마니씀? [6] ㅇㅇ(221.146) 05.11 190 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2