質問編集履歴

1

Unityちゃんを動かしているコードの追加

2020/01/22 13:49

投稿

ksoto
ksoto

スコア12

test CHANGED
File without changes
test CHANGED
@@ -11,3 +11,193 @@
11
11
 
12
12
 
13
13
  C#を用いてカメラを常にUnityちゃんの後ろに追従させる方法を教えてほしいです
14
+
15
+
16
+
17
+ ```C#
18
+
19
+ using System.Collections;
20
+
21
+ using System.Collections.Generic;
22
+
23
+ using UnityEngine;
24
+
25
+
26
+
27
+ public class Player : MonoBehaviour {
28
+
29
+
30
+
31
+ //Rigidbodyを変数に入れる
32
+
33
+ Rigidbody rb;
34
+
35
+ //移動スピード
36
+
37
+ public float speed = 3f;
38
+
39
+ //ジャンプ力
40
+
41
+ public float thrust = 200;
42
+
43
+ //Animatorを入れる変数
44
+
45
+ private Animator animator;
46
+
47
+ //ユニティちゃんの位置を入れる
48
+
49
+ Vector3 playerPos;
50
+
51
+ //地面に接触しているか否か
52
+
53
+ bool ground;
54
+
55
+
56
+
57
+ void Start()
58
+
59
+ {
60
+
61
+ //Rigidbodyを取得
62
+
63
+ rb = GetComponent<Rigidbody>();
64
+
65
+ //ユニティちゃんのAnimatorにアクセスする
66
+
67
+ animator = GetComponent<Animator>();
68
+
69
+ //ユニティちゃんの現在より少し前の位置を保存
70
+
71
+ playerPos = transform.position;
72
+
73
+ }
74
+
75
+
76
+
77
+ void Update()
78
+
79
+ {
80
+
81
+ //地面に接触していると作動する
82
+
83
+ if (ground)
84
+
85
+ {
86
+
87
+ //A・Dキー、←→キーで横移動
88
+
89
+ float x = Input.GetAxisRaw("Horizontal") * Time.deltaTime * speed;
90
+
91
+
92
+
93
+ //W・Sキー、↑↓キーで前後移動
94
+
95
+ float z = Input.GetAxisRaw("Vertical") * Time.deltaTime * speed;
96
+
97
+
98
+
99
+ //現在の位置+入力した数値の場所に移動する
100
+
101
+ rb.MovePosition(transform.position + new Vector3(x, 0, z));
102
+
103
+
104
+
105
+ //ユニティちゃんの最新の位置から少し前の位置を引いて方向を割り出す
106
+
107
+ Vector3 direction = transform.position - playerPos;
108
+
109
+
110
+
111
+ //移動距離が少しでもあった場合に方向転換
112
+
113
+ if (direction.magnitude > 0.01f)
114
+
115
+ {
116
+
117
+ //directionのX軸とZ軸の方向を向かせる
118
+
119
+ transform.rotation = Quaternion.LookRotation(new Vector3
120
+
121
+ (direction.x, 0, direction.z));
122
+
123
+ //走るアニメーションを再生
124
+
125
+ animator.SetBool("Running", true);
126
+
127
+ }
128
+
129
+ else
130
+
131
+ {
132
+
133
+ //ベクトルの長さがない=移動していない時は走るアニメーションはオフ
134
+
135
+ animator.SetBool("Running", false);
136
+
137
+ }
138
+
139
+
140
+
141
+ //ユニティちゃんの位置を更新する
142
+
143
+ playerPos = transform.position;
144
+
145
+
146
+
147
+ //スペースキーやゲームパッドの3ボタンでジャンプ
148
+
149
+ if (Input.GetButton("Jump"))
150
+
151
+ {
152
+
153
+ //thrustの分だけ上方に力がかかる
154
+
155
+ rb.AddForce(transform.up * thrust);
156
+
157
+ //速度が出ていたら前方と上方に力がかかる
158
+
159
+ if (rb.velocity.magnitude > 0)
160
+
161
+ rb.AddForce(transform.forward * thrust + transform.up * thrust);
162
+
163
+ }
164
+
165
+ }
166
+
167
+ }
168
+
169
+
170
+
171
+ //Planに触れている間作動
172
+
173
+ void OnCollisionStay(Collision col)
174
+
175
+ {
176
+
177
+ ground = true;
178
+
179
+ //ジャンプのアニメーションをオフにする
180
+
181
+ animator.SetBool("Jumping", false);
182
+
183
+ }
184
+
185
+
186
+
187
+ //Planから離れると作動
188
+
189
+ void OnCollisionExit(Collision col)
190
+
191
+ {
192
+
193
+ ground = false;
194
+
195
+ //ジャンプのアニメーションをオンにする
196
+
197
+ animator.SetBool("Jumping", true);
198
+
199
+ }
200
+
201
+ }
202
+
203
+ ```