回答編集履歴

2

追記2

2017/12/08 04:08

投稿

fiveHundred
fiveHundred

スコア9803

test CHANGED
@@ -99,3 +99,145 @@
99
99
  }
100
100
 
101
101
  ```
102
+
103
+
104
+
105
+ ---
106
+
107
+ 追記2:
108
+
109
+ これって、Standard AssetsのFPSControllerのスクリプトだったんですね…。
110
+
111
+
112
+
113
+ というわけで、確かめてみたところ、実は``InternalLockUpdate()``は``Update()``だけではなく、``FixedUpdate()``でも呼ばれるそうです。
114
+
115
+ そのため、2回連続で``InternalLockUpdate()``を呼ばれて元に戻ってしまったのだと思います。
116
+
117
+
118
+
119
+ また、通常は``FixedUpdate()``でInputクラスの関数を呼んではいけないので、これはおそらくFPSController自体のバグではないかと思います(違ったらごめんなさい)。
120
+
121
+ 私の場合、以下のように修正したところ、上手く動作しました。
122
+
123
+
124
+
125
+ MouseLook.cs
126
+
127
+ ```C#
128
+
129
+ public void UpdateCursorLock()
130
+
131
+ {
132
+
133
+ //if the user set "lockCursor" we check & properly lock the cursos
134
+
135
+ if (lockCursor)
136
+
137
+ InternalLockUpdate(true);
138
+
139
+ }
140
+
141
+
142
+
143
+ // 新規の関数(FixedUpdate()のときはこちらを呼ぶ)
144
+
145
+ public void FixedUpdateCursorLock()
146
+
147
+ {
148
+
149
+ //if the user set "lockCursor" we check & properly lock the cursos
150
+
151
+ if (lockCursor)
152
+
153
+ InternalLockUpdate(false);
154
+
155
+ }
156
+
157
+
158
+
159
+ // Update()のときはinUpdate = true、FixedUpdate()のときはinUpdate = false
160
+
161
+ private void InternalLockUpdate(bool inUpdate)
162
+
163
+ {
164
+
165
+ if (inUpdate)
166
+
167
+ {
168
+
169
+ if (Input.GetKeyUp(KeyCode.Escape))
170
+
171
+ {
172
+
173
+ m_cursorIsLocked = false;
174
+
175
+ }
176
+
177
+ else if (Input.GetMouseButtonUp(0))
178
+
179
+ {
180
+
181
+ m_cursorIsLocked = true;
182
+
183
+ }
184
+
185
+
186
+
187
+ if (Input.GetKeyUp(KeyCode.I))
188
+
189
+ {
190
+
191
+ m_cursorIsLocked = !m_cursorIsLocked;
192
+
193
+ }
194
+
195
+ }
196
+
197
+
198
+
199
+ if (m_cursorIsLocked)
200
+
201
+ {
202
+
203
+ Cursor.lockState = CursorLockMode.Locked;
204
+
205
+ Cursor.visible = false;
206
+
207
+ }
208
+
209
+ else if (!m_cursorIsLocked)
210
+
211
+ {
212
+
213
+ Cursor.lockState = CursorLockMode.None;
214
+
215
+ Cursor.visible = true;
216
+
217
+ }
218
+
219
+ }
220
+
221
+ ```
222
+
223
+
224
+
225
+ FirstPersonController.cs
226
+
227
+ ```C#
228
+
229
+ private void FixedUpdate()
230
+
231
+ {
232
+
233
+ // …(中略)
234
+
235
+
236
+
237
+ //m_MouseLook.UpdateCursorLock(); // 変更前
238
+
239
+ m_MouseLook.FixedUpdateCursorLock();
240
+
241
+ }
242
+
243
+ ```

1

コメントを受けて追記

2017/12/08 04:08

投稿

fiveHundred
fiveHundred

スコア9803

test CHANGED
@@ -13,3 +13,89 @@
13
13
  }
14
14
 
15
15
  ```
16
+
17
+
18
+
19
+ ---
20
+
21
+
22
+
23
+ 追記:
24
+
25
+ 以下のように、``m_cursorIsLocked``を変更した後に、マウスカーソルの状態の変更処理を行うようにしてみてください。
26
+
27
+
28
+
29
+ ```C#
30
+
31
+ if (m_cursorIsLocked)
32
+
33
+ {
34
+
35
+ Cursor.lockState = CursorLockMode.Locked;
36
+
37
+ Cursor.visible = false;
38
+
39
+ }
40
+
41
+ else if (!m_cursorIsLocked)
42
+
43
+ {
44
+
45
+ Cursor.lockState = CursorLockMode.None;
46
+
47
+ Cursor.visible = true;
48
+
49
+ }
50
+
51
+
52
+
53
+ if (Input.GetKeyUp(KeyCode.I))
54
+
55
+ {
56
+
57
+ m_cursorIsLocked = false;
58
+
59
+ }
60
+
61
+ ```
62
+
63
+
64
+
65
+ ↓↓↓
66
+
67
+
68
+
69
+ ```C#
70
+
71
+ if (Input.GetKeyUp(KeyCode.I))
72
+
73
+ {
74
+
75
+ m_cursorIsLocked = !m_cursorIsLocked;
76
+
77
+ }
78
+
79
+
80
+
81
+ if (m_cursorIsLocked)
82
+
83
+ {
84
+
85
+ Cursor.lockState = CursorLockMode.Locked;
86
+
87
+ Cursor.visible = false;
88
+
89
+ }
90
+
91
+ else if (!m_cursorIsLocked)
92
+
93
+ {
94
+
95
+ Cursor.lockState = CursorLockMode.None;
96
+
97
+ Cursor.visible = true;
98
+
99
+ }
100
+
101
+ ```