質問編集履歴

3

情報の追加

2018/08/20 07:21

投稿

sinasinaEX
sinasinaEX

スコア13

test CHANGED
File without changes
test CHANGED
@@ -20,6 +20,12 @@
20
20
 
21
21
  衝突判定がキャラクター同士が正面に向かい合っている時しか衝突判定してくれません。
22
22
 
23
+ 後ろから弾がくると当たる側のwindowからは通り抜けてしまいます。
24
+
25
+ 以下のURLから実行可能です。
26
+
27
+ https://unityroom.com/games/space_fps_byunity
28
+
23
29
  ```
24
30
 
25
31
 
@@ -44,6 +50,36 @@
44
50
 
45
51
  }
46
52
 
53
+ 衝突判定部分
54
+
55
+ void OnCollisionEnter(Collision col){
56
+
57
+ //オンライン化
58
+
59
+ if(!myPV.isMine){
60
+
61
+ return;
62
+
63
+ }
64
+
65
+
66
+
67
+
68
+
69
+ //弾に当たった時の処理
70
+
71
+ if(col.gameObject.tag == "bullet"){
72
+
73
+ maincamera.HP_flag = 1;
74
+
75
+ damage.Play();
76
+
77
+ }
78
+
79
+ }
80
+
81
+
82
+
47
83
 
48
84
 
49
85
  以下が問題のメインカメラ

2

前回の質問は改善したのですが解決したが故の問題が発生したので編集しました。

2018/08/20 07:21

投稿

sinasinaEX
sinasinaEX

スコア13

test CHANGED
@@ -1 +1 @@
1
- オンライン化するとキャンバス変わらない
1
+ 正面からしか衝突判定されない
test CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  Photon Cloudを用いて行っています。
6
6
 
7
- Canvas設定中(HP)エラーが発生しました
7
+ RPCで生成同期をしたですが正面立っているときかうく衝突判定がされません
8
8
 
9
9
 
10
10
 
@@ -14,9 +14,11 @@
14
14
 
15
15
  ```
16
16
 
17
- キャラクターにCharacter Controllerがついていて、そのキャラクターの子要素にキャバスがあります。
17
+ キャラクターにCharacter Controllerがついていて、そのキャラクターの子要素にメイカメラがあります。
18
+
18
-
19
+ メインカメラの中心から弾を生成するようにしています。
20
+
19
- 発射された弾と当たるとHPを減らすようにしている(下記)のです弾が当たってオーディオは流れるのですがキャンバス書き換わってくれません。
21
+ 衝突判定がキャラクター同士正面に向かい合っている時しか衝突判定してくれません。
20
22
 
21
23
  ```
22
24
 
@@ -44,15 +46,131 @@
44
46
 
45
47
 
46
48
 
47
- 以下が問題の衝突判定
49
+ 以下が問題のメインカメラ
48
-
50
+
49
- void OnCollisionEnter(Collision col){
51
+ using System.Collections;
52
+
50
-
53
+ using System.Collections.Generic;
54
+
55
+ using UnityEngine;
56
+
57
+ using UnityEngine.UI;
58
+
59
+ using UnityEngine.SceneManagement;
60
+
61
+
62
+
63
+ public class maincamera : MonoBehaviour {
64
+
65
+ //オンライン化
66
+
67
+ [SerializeField]
68
+
69
+ private PhotonView myPV;
70
+
71
+
72
+
73
+
74
+
75
+ //弾のプレハブ
76
+
77
+ [SerializeField]
78
+
79
+ private GameObject bullet;
80
+
81
+ //レンズからのオフセット値
82
+
83
+ [SerializeField]
84
+
85
+ private float offset;
86
+
87
+ //弾を飛ばす間隔
88
+
89
+ [SerializeField]
90
+
91
+ private float waitTime = 0.1f;
92
+
93
+ //経過時間
94
+
95
+ private float elapsedTime = 0f;
96
+
97
+ //弾を飛ばす力
98
+
99
+ [SerializeField]
100
+
101
+ private float shotPower = 200f;
102
+
103
+ //弾を消去する時間間隔
104
+
105
+ [SerializeField]
106
+
107
+ private float deleteTime = 2f;
108
+
109
+ //弾薬管理
110
+
111
+ private int armo = 40;
112
+
113
+ [SerializeField]
114
+
115
+ private Text text_armo;
116
+
117
+ private float reload_time;
118
+
119
+ //オーディオ
120
+
121
+ private AudioSource[] aud;
122
+
51
- //弾に当たった時の処理
123
+ //銃を撃った時の
124
+
52
-
125
+ private AudioSource gunshoot;
126
+
127
+ //リロード音
128
+
129
+ private AudioSource gunreload;
130
+
131
+ public int HP_flag = 0;
132
+
133
+ //ダメージ管理
134
+
135
+ private int HP = 100;
136
+
137
+ [SerializeField]
138
+
139
+ private Text text_HP;
140
+
141
+
142
+
143
+ void Start () {
144
+
145
+ //カーソルを非表示
146
+
147
+ Cursor.visible = false;
148
+
149
+ // カーソルをウィンドウから出さない
150
+
53
- if(col.gameObject.name == "Bullet(Clone)"){
151
+ Cursor.lockState = CursorLockMode.Confined;
152
+
153
+
154
+
54
-
155
+ text_armo.text = armo.ToString();
156
+
157
+ aud = GetComponents<AudioSource>();
158
+
159
+ gunshoot = aud[0];
160
+
161
+ gunreload = aud[1];
162
+
163
+
164
+
165
+ text_HP.text = HP.ToString();
166
+
167
+ }
168
+
169
+
170
+
55
- damage.Play();
171
+ void Update(){
172
+
173
+ if(HP_flag==1){
56
174
 
57
175
  HP -= 20;
58
176
 
@@ -70,9 +188,97 @@
70
188
 
71
189
  text_HP.text = HP.ToString();
72
190
 
191
+ HP_flag = 0;
192
+
73
- }
193
+ }
194
+
74
-
195
+ if(HP==0){
196
+
197
+ SceneManager.LoadScene("Launcher");
198
+
75
- }
199
+ }
200
+
201
+
202
+
203
+ //弾が0の時はリロードする
204
+
205
+ if(gunreload.isPlaying){
206
+
207
+ return;
208
+
209
+ }
210
+
211
+ if(armo == 0){
212
+
213
+ reload();
214
+
215
+ }
216
+
217
+ if(Input.GetButton("Reload") && armo!=40){
218
+
219
+ reload();
220
+
221
+ }
222
+
223
+ //一定間隔でしか撃てないようにする
224
+
225
+ elapsedTime += Time.deltaTime;
226
+
227
+ if(elapsedTime < waitTime){
228
+
229
+ return;
230
+
231
+ }
232
+
233
+ //クリックされた時に弾を発射
234
+
235
+ if(Input.GetButton("Fire1")){
236
+
237
+ myPV.RPC("bulletInst",PhotonTargets.AllViaServer);
238
+
239
+ elapsedTime = 0f;
240
+
241
+ armo --;
242
+
243
+ text_armo.text = armo.ToString();
244
+
245
+ gunshoot.Play();
246
+
247
+ }
248
+
249
+
250
+
251
+ }
252
+
253
+
254
+
255
+ void reload(){
256
+
257
+ gunreload.Play();
258
+
259
+ armo = 40;
260
+
261
+ text_armo.text = armo.ToString();
262
+
263
+ }
264
+
265
+
266
+
267
+ [PunRPC]
268
+
269
+ void bulletInst(){
270
+
271
+ var bulletIns = Instantiate(bullet,transform.position + transform.forward * 0.5f,transform.rotation);
272
+
273
+ bulletIns.GetComponent<Rigidbody>().AddForce(transform.forward * shotPower);
274
+
275
+ Destroy(bulletIns,deleteTime);
276
+
277
+ }
278
+
279
+ }
280
+
281
+
76
282
 
77
283
  ```
78
284
 
@@ -82,7 +288,7 @@
82
288
 
83
289
 
84
290
 
85
- 子要素メインカメラスクリプトにこのHP減らキャンバスを書き換える処理を写し、衝突判定が起きたメインカメラのスクリプトの値を変更してHPを減らすとい処理に変えたところ、撃った方のHPが減ってしうことになってしまより一層混乱しました。
291
+ bulletInstでtransform.position等だとそれぞれtransfoemなってしまうかと思い新しいVector3,Quaternionの変数を作りそに生成場所transform入れて試てみまたが正面の時も衝突判定が起うませんでした。
86
292
 
87
293
 
88
294
 

1

試したことを書き換えました

2018/08/19 04:31

投稿

sinasinaEX
sinasinaEX

スコア13

test CHANGED
File without changes
test CHANGED
@@ -82,7 +82,7 @@
82
82
 
83
83
 
84
84
 
85
- startのキャンバスを消さずにやってみと重なって表示されるもののちゃんと減ってくれました。
85
+ 子要素メインカメラのスクリプトにこのHPを減らしキャンバスを書き換え処理を写し、衝突判定が起きたらメインカメラスクリプトの値を変更してHPをらすという処理に変えたところ、撃た方のHPが減っうことになってまいより一層混乱しました。
86
86
 
87
87
 
88
88