디시인사이드 갤러리

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

갤러리 본문 영역

[💬] 이동형 조이스틱

늅늅(222.114) 2017.11.18 15:47:44
조회 1494 추천 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
등록순정렬 기준선택
본문 보기
자동등록방지

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 말머리 제목 글쓴이 작성일 조회 추천
2853 설문 연인과 헤어지고 뒤끝 작렬할 것 같은 스타는? 운영자 24/04/22 - -
2854 AD [원신] 신규 5성 아를레키노 등장 운영자 24/04/26 - -
154955 공지 주딱호출벨 [62] 에뚜갤로그로 이동합니다. 24.03.14 1299 2
114838 공지 🐣질문 글엔 말머리를 답시다🐣 [9] 로도타갤로그로 이동합니다. 22.12.15 4184 8
52873 공지 게임제작 초심자를 위한 글 모음 [9] Goranic갤로그로 이동합니다. 20.07.02 62073 50
123789 공지 뉴비 개임개발 하려는데 뭐부터 해야하나요 복사본 [13] 흉황갤로그로 이동합니다. 23.04.11 10861 16
108991 공지 인디게임개발 갤러리 규칙 - 질문 전 필독!! [23] 로도타갤로그로 이동합니다. 22.09.30 11535 17
158578 💬 돈 좀 생겼는데 ㅇㅇ갤로그로 이동합니다. 13:49 7 0
158577 💬 유니티 카메라 캡쳐 질문 [2] ㅇㅇ(203.252) 12:30 66 1
158576 💬 요즘 PC 트렌드는 ㅇㅇ갤로그로 이동합니다. 12:23 62 0
158575 💬 테서렉트 5차원게임 만들면 대박나냐 [3] ㅇㅇ(118.221) 12:18 72 0
158574 💬 강박이 너무 심할때는 [1] ㅇㅇ갤로그로 이동합니다. 12:02 67 0
158573 💬 terrain 시스템 구현 난이도 어떰? [1] ㅇㅇ(210.101) 12:02 57 0
158572 💬 자기가 원해서 게임개발하는 게 맞는데 [1] ㅇㅇ(222.101) 11:52 104 2
158571 📜일지 냥냥펀치 날리는 게임 후속작 제작일지 #1 개발 시작 [2] 노마리갤로그로 이동합니다. 11:48 78 3
158570 💬 해외 게임에서 PC는 투자때문임 [3] ㅇㅇ(211.211) 11:44 202 0
158569 🐣질문 블렌더 FBX파일 내보내기 할때 ㅇㅇ(121.168) 11:42 42 0
158568 🐣질문 스팀 출시예정 페이지는 언제부터해야해? 도도한떡볶이갤로그로 이동합니다. 09:46 66 0
158567 💬 요즘 서양은 pc때문에 여캐가 예쁘면 안된다매 [4] ㅇㅇ(59.6) 09:27 220 0
158566 💬 액수 입력하면 돈이 뚝딱 나왔으면 좋겠다 [1] ㅇㅇ갤로그로 이동합니다. 09:17 92 0
158565 💬 하던거 갈아엎었음 채썰기고양이갤로그로 이동합니다. 09:11 122 2
158564 💬 혹시 모바일겜 인스타나 페북 광고 내는사람 있음?? [10] ㅇㅇ(115.137) 07:00 118 0
158563 🐣질문 [셀프완]오브젝트 안에서 밖에볼때 보이도록 하는방법 있음? [1] ㅇㅇ(211.54) 03:59 94 0
158562 🐣질문 UI 간 Blur 관련해서 질문 있습니다. [3] 라라루라갤로그로 이동합니다. 03:58 72 0
158560 💬 기획서랑 아트 넣으면 게임 뚝딱 나왔으면 좋겠다 [1] 나방이(122.254) 03:13 127 0
158558 💬 라이더 로그안나오는데 해결법 아시는분? [1] ㅇㅇ갤로그로 이동합니다. 02:23 54 0
158557 📜일지 팀 터졌던 개발일지 #5, 나름의 각오 [1] 허당갤로그로 이동합니다. 02:04 190 4
158556 💬 탑다운 캐릭터 커미션은 왤케 추가금 요구하는곳이 많지 [51] ㅆㅇㅆ(124.216) 02:01 383 1
158554 💬 코딩아트음악홍보 다해주는 여친있었으면 [5] solish갤로그로 이동합니다. 04.27 295 0
158553 💬 실물 연애 시뮬 제작비 생각보다 쌀 것 같은데 [7] ㅇㅇ(58.226) 04.27 183 0
158552 💬 특이장르게임 튜토리얼 테스트에 참가하실 분을 찾습니다. [3] ㅇㅇ(61.79) 04.27 177 1
158551 🐣질문 스팀 게임 올리려면 뭘 해야하나요? [3] ㅇㅇ(14.39) 04.27 168 0
158550 🐣질문 3D 1인칭 고딕호러 로그라이크 먹힐까? [4] ㅇㅇ(124.50) 04.27 155 0
158549 🐣질문 해결함) 시간을 느리게 해서 떨어지는 물체를 밟고 점프하는 기능 [4] 매우큰코갤로그로 이동합니다. 04.27 222 0
158548 💬 인디게임개발갤러리를 줄이면 뭐임? [6] ㅇㅇ(220.122) 04.27 221 0
158547 🐣질문 졸작 퀄은 보통 어느정도 나오나요 [5] ㅇㅇ(211.208) 04.27 161 0
158546 💬 더 많은 코딩 더더 많은 구현 라라루라갤로그로 이동합니다. 04.27 86 0
158545 📚정보 [번역] 스팀에서 성공하는 방법 [6] 매튜돌갤로그로 이동합니다. 04.27 711 22
158544 🐣질문 유니티에서 Task 만들면 작동안하는 이유 [5] ㅇㅇ(115.92) 04.27 160 0
158543 💬 원화 원툴따리 블렌더 찍먹해 봄 [5] ㅇㅇ(58.235) 04.27 148 0
158542 🐣질문 유니티에서 카메라 사이즈는 세로 기준인가요? ㅇㅇ(115.92) 04.27 43 0
158540 📜일지 비주얼 노벨 같은 게임 시스템 개발 일지 [7] 닌거갤로그로 이동합니다. 04.27 447 10
158537 💬 형님들 앱출시 할 때 그래픽이미지가 대체 뭔가요? [5] ㅇㅇ(118.218) 04.27 139 0
158536 💬 코딩을 하면 할수록 mbti가 F로 바뀌는듯 [8] ㅇㅇ갤로그로 이동합니다. 04.27 297 0
158535 💬 시네머신으로 TPS 3인칭 구현하니까 좋노 ㅇㅇ(114.202) 04.27 101 0
158534 🐣질문 좀 도와주세요 [4] ㅇㅇ(182.210) 04.27 123 2
158533 📢홍보 스팀, 안드로이드 출시했다 [13] ㅇㅇ갤로그로 이동합니다. 04.27 486 10
158532 🐣질문 스팀 출시 질문-검토되면 바로 출시 가능해지는거임? [5] 단바바(211.112) 04.27 149 0
158531 🐣질문 raycast와 collider collision의 성능차이가 심하나요? [4] ㅇㅇ갤로그로 이동합니다. 04.27 150 0
158530 💬 의욕이 너무 없다 [4] ㅇㅇ(124.62) 04.27 154 0
158529 📚정보 UniRx를 배워야할까?(+UniRx 개발자 블로그 기사 인용) [11] ㅇㅇ(203.253) 04.27 423 9
158528 💬 게임이 전체 10프로 정도 제작됐는데 얼엑으로 출시가능할까? [7] ㅇㅇ(121.142) 04.27 253 0
158527 🐣질문 자주 변동하는 enum상수 설계 도와줘 [5] ㅇㅇ갤로그로 이동합니다. 04.27 146 0
158526 🐣질문 코딩할때 뭔가 불안하면 어케 해야 함 [9] ㅇㅇ(210.100) 04.27 222 0
158525 💬 매니저가 자꾸 스태틱이 되는데 [5] ㅇㅇ갤로그로 이동합니다. 04.27 112 0
158524 💬 내부함수 이름고민보고 어제작업했던게 생각남 [6] ㅇㅇ(125.132) 04.27 138 0
158523 🐣질문 레이캐스트 충돌체크 질문좀 [4] ㅇㅇ(211.178) 04.27 103 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2