質問編集履歴

2

スクリプトの追加

2023/05/22 03:41

投稿

Jennifer
Jennifer

スコア0

test CHANGED
File without changes
test CHANGED
@@ -9,3 +9,194 @@
9
9
 
10
10
 
11
11
  初めての質問なので少し見にくかったり分かりずらいかもです
12
+ ```C#
13
+ 移動の入力用のスクリプトを貼り付けました。
14
+ 文字化けした影響でコメントアウトは削除してしまいました。
15
+ using System.Collections;
16
+ using System.Collections.Generic;
17
+ using UnityEngine;
18
+ using NamePlayer;
19
+ using SaveDate;
20
+ using UnityEngine.InputSystem;
21
+
22
+
23
+
24
+ //入力用のスクリプト
25
+ public class InputManager : MonoBehaviour
26
+ {
27
+
28
+ private Vector3 worldPos = new Vector3(0, 0, 0);
29
+ private Vector3 worldPosCopy = new Vector3(0, 0, 2);
30
+
31
+ [SerializeField] private PlayerController Pcon;
32
+
33
+ [SerializeField] private SaveTest Sates;
34
+
35
+ private Inpputer InputTouch;
36
+ bool Input_Ok = false;
37
+ private Vector3 InputStartPos;
38
+
39
+ private Vector3 V0 = Vector3.zero;
40
+ Vector2 StartPos;
41
+ private int InputCount = 0;
42
+
43
+ [SerializeField, Tooltip("タップした場所を何秒クリックしたら攻撃判定に変える")] private int Hold;
44
+
45
+ [SerializeField] private float SpaceX;
46
+ [SerializeField] private float SpaceY;
47
+
48
+ private bool Sp;
49
+ [SerializeField] Camera cam;
50
+ private float TouchingTime;
51
+
52
+
53
+ [SerializeField] float NomalAttackTime;
54
+ [SerializeField] float StrongAttack;
55
+
56
+ bool NotHold;
57
+ int HoldCount = 0;
58
+ testM tm;
59
+
60
+ private Vector3 temp;
61
+ private void Awake()
62
+ {
63
+ InputTouch = new Inpputer();
64
+ }
65
+
66
+ // Start is called before the first frame update
67
+ void Start()
68
+ {
69
+ InputStartPos = Vector3.zero;
70
+ NotHold = false;
71
+ Sp = false;
72
+ }
73
+
74
+ #region
75
+ private void OnEnable()
76
+ {
77
+ //有効化
78
+ InputTouch.Enable();
79
+ }
80
+ private void OnDisable()
81
+ {
82
+ //削除
83
+ InputTouch.Disable();
84
+ }
85
+ #endregion
86
+
87
+ // Update is called once per frame
88
+ void Update()
89
+ {
90
+ PlayerInputVec();
91
+ if (Input_Ok)
92
+ {
93
+ TouchingTime += Time.deltaTime;
94
+ InputHold();
95
+ }
96
+ }
97
+
98
+ private void PlayerInputVec()
99
+ {
100
+ #region
101
+ InputTouch.Player.Touchpos.started += (InputAction.CallbackContext context) =>
102
+ {
103
+ //最初に入力してきた値取得
104
+ InputStartPos = cam.ScreenToWorldPoint(InputTouch.Player.SwaipPos.ReadValue<Vector2>());
105
+ //タップしたかのflag
106
+ Input_Ok = true;
107
+ //スキル技を使っているflag
108
+ Sp = false;
109
+ InputCount = 0;
110
+ temp = V0;
111
+ worldPos = V0;
112
+ NotHold = false;
113
+ TouchingTime = 0;
114
+ InputStartPos = cam.ScreenToWorldPoint(InputTouch.Player.SwaipPos.ReadValue<Vector2>());
115
+ };
116
+ InputTouch.Player.Touchpos.canceled += (InputAction.CallbackContext context) =>
117
+ {
118
+ Pcon.InputCancel();
119
+ Sp = false;
120
+ Input_Ok = false;
121
+ InputStartPos = V0;
122
+ InputCount = 0;
123
+ temp = V0;
124
+ worldPos = V0;
125
+ NotHold = false;
126
+ if(TouchingTime <= NomalAttackTime)
127
+ {
128
+ Pcon.NomalAttack();
129
+ TouchingTime = 0.0f;
130
+ }
131
+ if(TouchingTime >= StrongAttack)
132
+ {
133
+ //Pcon.StrongAttack();
134
+
135
+ }
136
+ };
137
+ #endregion
138
+ }
139
+ private void InputHold()
140
+ {
141
+ StartPos = InputTouch.Player.SwaipPos.ReadValue<Vector2>();
142
+
143
+ if (worldPos == InputStartPos && !NotHold)
144
+ {
145
+ InputCount++;
146
+ if (InputCount >= Hold)
147
+ {
148
+ Pcon.PlayerHold();
149
+ Sp = true;
150
+ }
151
+ }
152
+ else
153
+ {
154
+ InputCount = 0;
155
+ }
156
+ worldPosCopy = worldPos;
157
+ worldPos = cam.ScreenToWorldPoint(StartPos);
158
+ temp = worldPos -InputStartPos;
159
+ float angle = GetAngle(InputStartPos, worldPos);
160
+
161
+ if(temp.x <0.0f)
162
+ {
163
+ temp.x = temp.x * -1;
164
+ }
165
+ if (temp.y < 0.0f)
166
+ {
167
+ temp.y = temp.y * -1;
168
+ }
169
+ //スキル技を使ってるかどうか
170
+ if (!Sp)
171
+ {
172
+ //スピード調整
173
+ if (temp.x >= 3)
174
+ {
175
+ temp.x = 3;
176
+ }
177
+ if (temp.x <= -3)
178
+ {
179
+ temp.x = 3;
180
+ }
181
+ if (temp.y >= 3)
182
+ {
183
+ temp.y = 3;
184
+ }
185
+ if (temp.y <= -3)
186
+ {
187
+ temp.y = -3;
188
+ }
189
+ }
190
+ }
191
+
192
+ //最初に入力した値と最後に入力した値から方向ベクトルを求めてから角度を算出している
193
+ float GetAngle(Vector2 start, Vector2 target)
194
+ {
195
+ Vector2 dt = target - start;
196
+ float rad = Mathf.Atan2(dt.y, dt.x);
197
+ float degree = rad * Mathf.Rad2Deg;
198
+
199
+ return degree;
200
+ }
201
+ }
202
+ ```

1

█変更点 : 無し

2023/05/21 12:35

投稿

Jennifer
Jennifer

スコア0

test CHANGED
File without changes
test CHANGED
@@ -1,7 +1,8 @@
1
1
  █実現したいこと
2
2
 
3
3
  スマホでよくある画面の半分より左側はスティックを動かしたりスワイプしたりでキャラクターの移動
4
- 右半分の画面をスワイプするとカメラが動くみたいな感じで実装したいのですが、どうやって実現するか分からなくて。教えて下さると助かります。
4
+ 右半分の画面をスワイプするとカメラが動くみたいな感じで実装したいのですが、どうやって実現するか分からなくて。
5
+ 教えて下さると助かります。
5
6
 
6
7
  █現在の状態
7
8
  右画面左画面関係なくスワイプするとキャラクターが移動する。