質問編集履歴

3

書くべきところが抜けていたので修正

2020/07/24 11:12

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -34,6 +34,86 @@
34
34
 
35
35
  ```
36
36
 
37
+ public class UnityChanControlScriptWithRgidBody : MonoBehaviour
38
+
39
+ {
40
+
41
+ public float animSpeed = 1.5f; // アニメーション再生速度設定
42
+
43
+ public float lookSmoother = 3.0f; // a smoothing setting for camera motion
44
+
45
+ public bool useCurves = true; // Mecanimでカーブ調整を使うか設定する
46
+
47
+ // このスイッチが入っていないとカーブは使われない
48
+
49
+ public float useCurvesHeight = 0.5f; // カーブ補正の有効高さ(地面をすり抜けやすい時には大きくする)
50
+
51
+
52
+
53
+ // 以下キャラクターコントローラ用パラメタ
54
+
55
+ // 前進速度
56
+
57
+ public float forwardSpeed = 7.0f;
58
+
59
+ // 後退速度
60
+
61
+ public float backwardSpeed = 2.0f;
62
+
63
+ // 旋回速度
64
+
65
+ public float rotateSpeed = 2.0f;
66
+
67
+ // ジャンプ威力
68
+
69
+ public float jumpPower = 3.0f;
70
+
71
+ // キャラクターコントローラ(カプセルコライダ)の参照
72
+
73
+ private CapsuleCollider col;
74
+
75
+ private Rigidbody rb;
76
+
77
+ // キャラクターコントローラ(カプセルコライダ)の移動量
78
+
79
+ private Vector3 velocity;
80
+
81
+ // CapsuleColliderで設定されているコライダのHeiht、Centerの初期値を収める変数
82
+
83
+ private float orgColHight;
84
+
85
+ private Vector3 orgVectColCenter;
86
+
87
+ private Animator anim; // キャラにアタッチされるアニメーターへの参照
88
+
89
+ private AnimatorStateInfo currentBaseState; // base layerで使われる、アニメーターの現在の状態の参照
90
+
91
+ private GameObject cameraObject; // メインカメラへの参照
92
+
93
+
94
+
95
+ // アニメーター各ステートへの参照
96
+
97
+ static int idleState = Animator.StringToHash ("Base Layer.Idle");
98
+
99
+ static int locoState = Animator.StringToHash ("Base Layer.Locomotion");
100
+
101
+ static int jumpState = Animator.StringToHash ("Base Layer.Jump");
102
+
103
+ static int restState = Animator.StringToHash ("Base Layer.Rest");
104
+
105
+
106
+
107
+ //自分で加えたやつ
108
+
109
+ Grasshopper grassHopper;
110
+
111
+
112
+
113
+ /**************************中略***********************/
114
+
115
+
116
+
37
117
  // JUMP中の処理
38
118
 
39
119
  else if (currentBaseState.nameHash == jumpState) {

2

少し修正

2020/07/24 11:12

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -110,7 +110,7 @@
110
110
 
111
111
 
112
112
 
113
- grassHopper.apper(true);
113
+ grassHopper.apper(true); //該当部分です
114
114
 
115
115
  }
116
116
 

1

コードが長すぎたため要点を絞りました

2020/07/24 07:59

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -34,416 +34,138 @@
34
34
 
35
35
  ```
36
36
 
37
+ // JUMP中の処理
38
+
39
+ else if (currentBaseState.nameHash == jumpState) {
40
+
41
+      //cameraObject.SendMessage ("setCameraPositionJumpView"); // ジャンプ中のカメラに変更
42
+
43
+ if (!anim.IsInTransition (0)) {
44
+
45
+
46
+
47
+ // 以下、カーブ調整をする場合の処理
48
+
49
+ if (useCurves) {
50
+
51
+ // 以下JUMP00アニメーションについているカーブJumpHeightとGravityControl
52
+
53
+ // JumpHeight:JUMP00でのジャンプの高さ(0〜1)
54
+
55
+ // GravityControl:1⇒ジャンプ中(重力無効)、0⇒重力有効
56
+
57
+ float jumpHeight = anim.GetFloat ("JumpHeight");
58
+
59
+ float gravityControl = anim.GetFloat ("GravityControl");
60
+
61
+ if (gravityControl > 0)
62
+
63
+ rb.useGravity = false;
64
+
65
+
66
+
67
+ // レイキャストをキャラクターのセンターから落とす
68
+
69
+ Ray ray = new Ray (transform.position + Vector3.up, -Vector3.up);
70
+
71
+ RaycastHit hitInfo = new RaycastHit ();
72
+
73
+
74
+
75
+ if (Physics.Raycast (ray, out hitInfo)) {
76
+
77
+ if (hitInfo.distance > useCurvesHeight) {
78
+
79
+ col.height = orgColHight - jumpHeight;
80
+
81
+ float adjCenterY = orgVectColCenter.y + jumpHeight;
82
+
83
+ col.center = new Vector3 (0, adjCenterY, 0);
84
+
85
+ } else {
86
+
87
+ // 閾値よりも低い時には初期値に戻す(念のため)
88
+
89
+ resetCollider ();
90
+
91
+ }
92
+
93
+ }
94
+
95
+ }
96
+
97
+ anim.SetBool ("Jump", false);
98
+
99
+
100
+
101
+ //自分で追加しました
102
+
103
+ if (Input.GetButtonDown("Jump") && !anim.IsInTransition(0))
104
+
105
+ {
106
+
107
+ anim.Play("Jump", 0,0);
108
+
109
+ rb.AddForce(Vector3.up * jumpPower, ForceMode.VelocityChange);
110
+
111
+
112
+
113
+ grassHopper.apper(true);
114
+
115
+ }
116
+
117
+ }
118
+
119
+ }
120
+
121
+ ```
122
+
123
+
124
+
125
+ Grasshopper.cs
126
+
127
+ ```
128
+
129
+ using System.Collections;
130
+
131
+ using System.Collections.Generic;
132
+
37
133
  using UnityEngine;
38
134
 
135
+
136
+
39
- using System.Collections;
137
+ public class Grasshopper : MonoBehaviour
40
-
41
-
42
-
43
- namespace UnityChan
44
138
 
45
139
  {
46
140
 
47
-
48
-
49
- [RequireComponent(typeof(Animator))]
50
-
51
- [RequireComponent(typeof(CapsuleCollider))]
52
-
53
- [RequireComponent(typeof(Rigidbody))]
54
-
55
-
56
-
57
- public class UnityChanControlScriptWithRgidBody : MonoBehaviour
58
-
59
- {
60
-
61
-
62
-
63
- public float animSpeed = 1.5f;
64
-
65
- public float lookSmoother = 3.0f;
66
-
67
- public bool useCurves = true;
68
-
69
-
70
-
71
- public float useCurvesHeight = 0.5f;
72
-
73
-
74
-
75
- public float forwardSpeed = 7.0f;
76
-
77
- public float backwardSpeed = 2.0f;
78
-
79
- public float rotateSpeed = 2.0f;
80
-
81
- public float jumpPower = 3.0f;
82
-
83
-
84
-
85
- private CapsuleCollider col;
86
-
87
- private Rigidbody rb;
88
-
89
- // キャラクターコントローラ(カプセルコライダ)の移動量
90
-
91
- private Vector3 velocity;
92
-
93
- // CapsuleColliderで設定されているコライダのHeiht、Centerの初期値を収める変数
94
-
95
- private float orgColHight;
96
-
97
- private Vector3 orgVectColCenter;
98
-
99
- private Animator anim;
100
-
101
- private AnimatorStateInfo currentBaseState;
102
-
103
-
104
-
105
- private GameObject cameraObject;
106
-
107
-
108
-
109
- static int idleState = Animator.StringToHash ("Base Layer.Idle");
110
-
111
- static int locoState = Animator.StringToHash ("Base Layer.Locomotion");
112
-
113
- static int jumpState = Animator.StringToHash ("Base Layer.Jump");
114
-
115
- static int restState = Animator.StringToHash ("Base Layer.Rest");
116
-
117
-
118
-
119
- Grasshopper grassHopper;
120
-
121
-
122
-
123
- void Start ()
124
-
125
- {
126
-
127
- anim = GetComponent<Animator> ();
128
-
129
- col = GetComponent<CapsuleCollider> ();
130
-
131
- rb = GetComponent<Rigidbody> ();
132
-
133
- cameraObject = GameObject.FindWithTag ("MainCamera");
134
-
135
- // CapsuleColliderコンポーネントのHeight、Centerの初期値を保存する
136
-
137
- orgColHight = col.height;
138
-
139
- orgVectColCenter = col.center;
140
-
141
- }
142
-
143
-
144
-
145
-
146
-
147
- void FixedUpdate ()
148
-
149
- {
150
-
151
- float h = Input.GetAxis ("Horizontal");
152
-
153
- float v = Input.GetAxis ("Vertical");
154
-
155
- anim.SetFloat ("Speed", v);
156
-
157
- anim.SetFloat ("Direction", h);
158
-
159
- anim.speed = animSpeed;
160
-
161
- currentBaseState = anim.GetCurrentAnimatorStateInfo (0);
162
-
163
- rb.useGravity = true;//ジャンプ中に重力を切るので、それ以外は重力の影響を受けるようにする
164
-
165
-
166
-
167
- // 以下、キャラクターの移動処理
168
-
169
- velocity = new Vector3 (0, 0, v);
170
-
171
- // キャラクターのローカル空間での方向に変換
172
-
173
- velocity = transform.TransformDirection (velocity);
174
-
175
- //以下のvの閾値は、Mecanim側のトランジションと一緒に調整する
176
-
177
- if (v > 0.1) {
178
-
179
- velocity *= forwardSpeed;
180
-
181
- } else if (v < -0.1) {
182
-
183
- velocity *= backwardSpeed;
184
-
185
- }
186
-
187
-
188
-
189
- if (Input.GetButtonDown ("Jump")) {
190
-
191
- if (currentBaseState.nameHash == locoState) {
192
-
193
- if (!anim.IsInTransition (0)) {
194
-
195
- rb.AddForce (Vector3.up * jumpPower, ForceMode.VelocityChange);
196
-
197
- anim.SetBool ("Jump", true);
198
-
199
- }
200
-
201
- }
202
-
203
- }
204
-
205
-
206
-
207
-
208
-
209
- transform.localPosition += velocity * Time.fixedDeltaTime;
210
-
211
-
212
-
213
- transform.Rotate (0, h * rotateSpeed, 0);
214
-
215
-
216
-
217
-
218
-
219
- // 以下、Animatorの各ステート中での処理
220
-
221
- // Locomotion中
222
-
223
- if (currentBaseState.nameHash == locoState) {
224
-
225
- //カーブでコライダ調整をしている時は、念のためにリセットする
226
-
227
- if (useCurves) {
228
-
229
- resetCollider ();
230
-
231
- }
232
-
233
- }
234
-
235
- // JUMP中の処理
236
-
237
- else if (currentBaseState.nameHash == jumpState) {
238
-
239
- //cameraObject.SendMessage ("setCameraPositionJumpView"); // ジャンプ中のカメラに変更
240
-
241
- if (!anim.IsInTransition (0)) {
242
-
243
-
244
-
245
- // 以下、カーブ調整をする場合の処理
246
-
247
- if (useCurves) {
248
-
249
- // 以下JUMP00アニメーションについているカーブJumpHeightとGravityControl
250
-
251
- // JumpHeight:JUMP00でのジャンプの高さ(0〜1)
252
-
253
- // GravityControl:1⇒ジャンプ中(重力無効)、0⇒重力有効
254
-
255
- float jumpHeight = anim.GetFloat ("JumpHeight");
256
-
257
- float gravityControl = anim.GetFloat ("GravityControl");
258
-
259
- if (gravityControl > 0)
260
-
261
- rb.useGravity = false;
262
-
263
-
264
-
265
- // レイキャストをキャラクターのセンターから落とす
266
-
267
- Ray ray = new Ray (transform.position + Vector3.up, -Vector3.up);
268
-
269
- RaycastHit hitInfo = new RaycastHit ();
270
-
271
-
272
-
273
- if (Physics.Raycast (ray, out hitInfo)) {
274
-
275
- if (hitInfo.distance > useCurvesHeight) {
276
-
277
- col.height = orgColHight - jumpHeight;
278
-
279
- float adjCenterY = orgVectColCenter.y + jumpHeight;
280
-
281
- col.center = new Vector3 (0, adjCenterY, 0);
282
-
283
- } else {
284
-
285
- // 閾値よりも低い時には初期値に戻す(念のため)
286
-
287
- resetCollider ();
288
-
289
- }
290
-
291
- }
292
-
293
- }
294
-
295
- anim.SetBool ("Jump", false);
296
-
297
-
298
-
299
- //自分で追加しました
300
-
301
- if (Input.GetButtonDown("Jump") && !anim.IsInTransition(0))
302
-
303
- {
304
-
305
- anim.Play("Jump", 0,0);
306
-
307
- rb.AddForce(Vector3.up * jumpPower, ForceMode.VelocityChange);
308
-
309
-
310
-
311
- grassHopper.apper(true);
312
-
313
- }
314
-
315
- }
316
-
317
- }
318
-
319
- // IDLE中の処理
320
-
321
- else if (currentBaseState.nameHash == idleState) {
322
-
323
- //カーブでコライダ調整をしている時は、念のためにリセットする
324
-
325
- if (useCurves) {
326
-
327
- resetCollider ();
328
-
329
- }
330
-
331
- if (Input.GetButtonDown ("Jump")) {
332
-
333
- anim.SetBool ("Rest", true);
334
-
335
- }
336
-
337
- }
338
-
339
- // REST中の処理
340
-
341
- else if (currentBaseState.nameHash == restState) {
342
-
343
- //cameraObject.SendMessage("setCameraPositionFrontView");
344
-
345
- if (!anim.IsInTransition (0)) {
346
-
347
- anim.SetBool ("Rest", false);
348
-
349
- }
350
-
351
- }
352
-
353
- }
354
-
355
-
356
-
357
- void OnGUI ()
358
-
359
- {
360
-
361
- GUI.Box (new Rect (Screen.width - 260, 10, 250, 150), "Interaction");
362
-
363
- GUI.Label (new Rect (Screen.width - 245, 30, 250, 30), "Up/Down Arrow : Go Forwald/Go Back");
364
-
365
- GUI.Label (new Rect (Screen.width - 245, 50, 250, 30), "Left/Right Arrow : Turn Left/Turn Right");
366
-
367
- GUI.Label (new Rect (Screen.width - 245, 70, 250, 30), "Hit Space key while Running : Jump");
368
-
369
- GUI.Label (new Rect (Screen.width - 245, 90, 250, 30), "Hit Spase key while Stopping : Rest");
370
-
371
- GUI.Label (new Rect (Screen.width - 245, 110, 250, 30), "Left Control : Front Camera");
372
-
373
- GUI.Label (new Rect (Screen.width - 245, 130, 250, 30), "Alt : LookAt Camera");
374
-
375
- }
376
-
377
-
378
-
379
-
380
-
381
- // キャラクターのコライダーサイズのリセット関数
382
-
383
- void resetCollider ()
384
-
385
- {
386
-
387
- // コンポーネントのHeight、Centerの初期値を戻す
388
-
389
- col.height = orgColHight;
390
-
391
- col.center = orgVectColCenter;
392
-
393
- }
394
-
395
- }
141
+ GameObject GHCube;
142
+
143
+ void Start()
144
+
145
+ {
146
+
147
+ GHCube = (GameObject)Resources.Load("GHCube");
148
+
149
+ }
150
+
151
+ public void apper(bool enable)
152
+
153
+ {
154
+
155
+ if (enable)
156
+
157
+ {
158
+
159
+ Instantiate(GHCube, new Vector3(0.0f, 0.0f, 0.0f), Quaternion.identity);
160
+
161
+ }
162
+
163
+ }
396
164
 
397
165
  }
398
166
 
399
167
  ```
400
168
 
401
-
402
-
403
- Grasshopper.cs
404
-
405
- ```
406
-
407
- using System.Collections;
408
-
409
- using System.Collections.Generic;
410
-
411
- using UnityEngine;
412
-
413
-
414
-
415
- public class Grasshopper : MonoBehaviour
416
-
417
- {
418
-
419
- GameObject GHCube;
420
-
421
- void Start()
422
-
423
- {
424
-
425
- GHCube = (GameObject)Resources.Load("GHCube");
426
-
427
- }
428
-
429
- public void apper(bool enable)
430
-
431
- {
432
-
433
- if (enable)
434
-
435
- {
436
-
437
- Instantiate(GHCube, new Vector3(0.0f, 0.0f, 0.0f), Quaternion.identity);
438
-
439
- }
440
-
441
- }
442
-
443
- }
444
-
445
- ```
446
-
447
169
  GHCubeのパス
448
170
 
449
171
  `Assets/Resources/GHCube.prefab`