質問するログイン新規登録

質問編集履歴

2

文章とタイトルを編集しました。

2020/02/14 07:36

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -9,8 +9,14 @@
9
9
 
10
10
 
11
11
  結論として上手く実装する方法がわかりません。どうしたらいいのでしょうか? つまり地面にくっついて移動して落ちる時は落下したいという処理なのですがどの方法を使っても上手く実装できません。
12
+ **坂を下る時**の処理で空中に浮いたり、浮きはしないがガタガタしたり、なんやかんだで目的の処理が実現できないので重力どうこうまず、やり方自体を変えないといけないと思いましてこの参考サイトを見たのですが下る時はこのようなやり方で実装するのでしょうか? 提示コードにはありませんがこのような処理を入れたのですが上手く坂道を下ってくれず**空中に浮く**というバグが発生していまいます。
12
13
 
13
14
 
15
+ 参考サイト:https://gametukurikata.com/program/rigidbodyandcollider
16
+
17
+
18
+
19
+
14
20
  ![イメージ説明](ab75441d480dc4940f8f00e62279ddc0.png)
15
21
 
16
22
 

1

文章とタイトルを大幅修正

2020/02/14 07:36

投稿

退会済みユーザー
title CHANGED
@@ -1,1 +1,1 @@
1
- 坂道を平地と同じ速度で上るためにyの増加量を算出するプログラムしいか知りたい
1
+ 重力処理どんなやり方をても上手く実装できな
body CHANGED
@@ -1,106 +1,119 @@
1
- 提示コード////コメント部のコードですがy移動量計算すとによって坂道でも等速で上に上がはずなのですがDebug.Log()使っても正い処理行われているわかないで確認ため質問ししたこれは正しく行えているのでしょうか?
1
+ 提示コード////コメント部のコード **台上から落ちる時や坂道るとかか重力**どを設定したいのですが以下の色んなやり方ましたらのバグが発生するで実装できせん。いろいろやり方はあと思うのですがどすればいいのでしょうか?
2
2
 
3
+ 1、use gravityを使って常にY軸をマイナス方向に力を掛ける。やり方、小さい数字から大きい数字まで試しましたがガタガタ画面が揺れてしまい上手く実装できません。※AddForceを使ってY軸は0にしました。
3
4
 
5
+ 2、rb.AddForceを使ってY軸に-20設定しましたがこんどは坂道を下がるときに空中に浮いてから下がり始めるため上手く実装できません。
4
6
 
7
+ 3,velocityを使ってみましたがY軸に-20くらいの設定しましたが同じ動かせなくなり坂道で画面がガタガタしたり挙動がおかしくないります。
8
+
9
+
10
+
11
+ 結論として上手く実装する方法がわかりません。どうしたらいいのでしょうか? つまり地面にくっついて移動して落ちる時は落下したいという処理なのですがどの方法を使っても上手く実装できません。
12
+
13
+
5
- ![![イメージ説明](29417136436ef72d10447655db021e07.png)](287731018160b357de3fa990fb84e423.png)
14
+ ![イメージ説明](ab75441d480dc4940f8f00e62279ddc0.png)
15
+
16
+
17
+
6
18
  ```ここに言語を入力
7
19
  using System.Collections;
8
20
  using System.Collections.Generic;
9
21
  using UnityEngine;
10
22
 
11
- public class Player : MonoBehaviour
23
+ public class Controller : MonoBehaviour
12
24
  {
13
- public GameObject slopRay;
14
- Rigidbody rb;
15
- Animator anim;
16
- Vector3 move;
17
25
 
18
-
26
+ private float input_h;
27
+ private float input_v;
19
- float speed = 5.0f;
28
+ private Vector3 move;
29
+ private Rigidbody rb;
30
+ private float walk_speed;//移動速度
31
+ private Animator ani;//移動速度
20
- float gravity = -20.0f;
32
+ private Vector3 gravity;
33
+ private bool isJump = false;//ジャンプしてるかどうかを管理する
34
+ private Vector3 v;
35
+ private bool isDush;
36
+
21
37
 
22
38
 
39
+
40
+ GameObject Ground;
41
+ GameObject Slope;
42
+
43
+
23
- // Start is called before the first frame update
44
+ // Use this for initialization
24
45
  void Start()
25
46
  {
47
+
48
+ Ground = GameObject.Find("GroundCheck");
49
+ Slope = GameObject.Find("SlopeCheck");
50
+ walk_speed = 5.0f;
51
+ gravity = Vector3.zero;
26
52
  rb = GetComponent<Rigidbody>();
27
- anim = GetComponent<Animator>();
53
+ ani = GetComponent<Animator>();
28
- move = new Vector3();
29
- }
30
54
 
31
- /*アニメ管理*/
55
+
32
- void Animation_Mng()
33
- {
34
- anim.SetFloat("forward",Mathf.Abs(Mathf.Sqrt((move.x * move.x) + (move.z * move.z))));
35
56
  }
36
57
 
37
- /*坂道の補正*/
58
+ void Gravity_Mng()//ジャンプ管理
38
- void slopMove()
39
59
  {
40
60
 
41
61
 
42
62
  }
43
63
 
44
- // Update is called once per frame
64
+
45
- void Update()
65
+ void Move_Mng()
46
66
  {
47
- float input_H = Input.GetAxis("Horizontal");
48
- float input_V = Input.GetAxis("Vertical");
49
- Vector3 move_x = new Vector3();
50
- Vector3 move_z = new Vector3();
51
67
 
52
- move_z = Vector3.Scale(Camera.main.transform.forward,new Vector3(1,0,1)).normalized * input_V * speed;
53
- move_x = Camera.main.transform.right * input_H * speed;
68
+ input_h = Input.GetAxis("Horizontal");
54
- move = move_x + move_z;
69
+ input_v = Input.GetAxis("Vertical");
70
+
55
71
 
56
- RaycastHit hit;
57
- //float y = 0;
58
72
 
73
+ Vector3 move_z = new Vector3();
74
+ Vector3 move_x = new Vector3();
75
+ move_z = Vector3.Scale(Camera.main.transform.forward, new Vector3(1, 0, 1)).normalized * input_v ;//* walk_speed;
59
- Debug.DrawRay(slopRay.transform.position,slopRay.transform.forward * 0.1f,Color.red);
76
+ move_x = Camera.main.transform.right * input_h; //* walk_speed;
60
- if(Physics.Linecast(slopRay.transform.position, slopRay.transform.position + (slopRay.transform.forward * 0.1f),out hit))
61
- {
62
- // Debug.Log("Hit !!!");
77
+ move = move_x + move_z;
63
78
 
64
- Vector3 v = new Vector3();
65
- //velocity = new Vector3(0f, (Quaternion.FromToRotation(Vector3.up, stepHit.normal) * transform.forward * walkSpeed).y, 0f) + transform.forward * walkSpeed;
66
- //////////////////////////////////////↓のコード
67
- v = new Vector3(0f,(Quaternion.FromToRotation(transform.up , hit.normal) * transform.forward * speed ).y,0f) + transform.forward * speed;
68
- Debug.Log(v.y);
69
- move.y = v.y;
70
79
 
71
- }
72
- else
73
- {
74
-
75
- move.y = 0;
76
- }
77
80
 
78
81
 
79
82
 
80
-
81
- if(move != Vector3.zero)
83
+ if (move != Vector3.zero)
82
84
  {
83
85
  transform.rotation = Quaternion.LookRotation(move.normalized);
84
-
85
86
  }
87
+ }
86
88
 
89
+ // Update is called once per frame
90
+ void Update()
91
+ {
92
+
93
+ Gravity_Mng();
87
94
 
95
+ Move_Mng();
88
96
 
97
+ move.x *= 200;
98
+ move.z *= 200;
89
99
 
90
-
91
- //Debug.Log(Mathf.Abs(Mathf.Sqrt((move.x * move.x) + (move.z * move.z))));
92
- // Debug.Log(rb.velocity.y);
93
-
94
- //slopMove();
95
- Animation_Mng();
96
100
  }
97
101
 
102
+
103
+ //////////////////////////////////////////////////////////////////////////////////////////////
104
+
98
105
  void FixedUpdate()
99
106
  {
100
- rb.velocity = move;
101
- rb.AddForce(0,-100,0);
102
107
 
108
+ // rb.velocity = new Vector3(move.x, 0, move.z);
109
+
110
+ rb.AddForce(move.x, -50, move.z);
111
+
112
+ Debug.Log("velocity: " + rb.velocity);
103
113
  }
114
+
115
+ //////////////////////////////////////////////////////////////////////////////////////////////
116
+
104
117
  }
105
118
 
106
119
  ```