質問編集履歴

2

写真の挿入

2020/05/21 20:39

投稿

Nanmotsu
Nanmotsu

スコア22

test CHANGED
File without changes
test CHANGED
@@ -61,3 +61,11 @@
61
61
  rayをぶつけるオブジェクトをprefab化する前はうまく動いていました。
62
62
 
63
63
  それも要因かもしれません。。
64
+
65
+
66
+
67
+ Rayが当たる予定のオブジェクトのインスペクターです。
68
+
69
+
70
+
71
+ ![イメージ説明](28e143a556fcf1faa9447a05813057be.png)

1

問題点の変更

2020/05/21 20:39

投稿

Nanmotsu
Nanmotsu

スコア22

test CHANGED
@@ -1 +1 @@
1
- unityで「メソッド」がうまく動かない。
1
+ unityでprefab化したオブジェクトにRayCastがうまく作用しない。
test CHANGED
@@ -1,8 +1,6 @@
1
1
  unityで図形の「型はめゲーム」を作っています。
2
2
 
3
- 図形でマウスをクリック&ドラッグで動かし、ゴール近くまでいくと、位置を自動調節するメソッドを作り
3
+ 図形でマウスをクリック&ドラッグで動かし、ゴール近くまでいくと、位置を自動調節するコードを書きましたがうまく動きません。
4
-
5
- 図形本体にアタッチしているスクリプトで実行しましたが、うまく動きません。
6
4
 
7
5
  エラー表示などないので、どこが悪いのかわからない状態ですので、ご教授お願い致します。
8
6
 
@@ -10,79 +8,39 @@
10
8
 
11
9
 
12
10
 
13
- 以下メソッドスクリプト
11
+ 以下prefabオブジェクト側のスクリプト 修正版
14
12
 
15
13
  ```C#
16
14
 
17
- public void grphicmethod(string name1, string name2, float buzzle, Vector3 point)
18
-
19
- {
20
-
21
- if (Input.GetMouseButton(0))
15
+ if (Input.GetMouseButton(0))
22
16
 
23
17
  {
24
18
 
25
- Debug.Log("1");
19
+ Debug.Log("2");
20
+
21
+ screenPoint = Camera.main.WorldToScreenPoint(transform.position);
26
22
 
27
23
  Ray ray = new Ray();
24
+
25
+ Debug.Log("3");
28
26
 
29
27
  RaycastHit hit = new RaycastHit();
30
28
 
31
29
  ray = Camera.main.ScreenPointToRay(Input.mousePosition);
32
30
 
31
+ Debug.Log("4");
33
32
 
33
+ Debug.DrawRay(ray.origin, ray.direction, Color.red);
34
+
35
+
34
36
 
35
37
  if (Physics.Raycast(ray.origin, ray.direction, out hit, Mathf.Infinity))
36
38
 
37
39
  {
38
40
 
39
- Debug.Log("2");
41
+ //以降が動かない。
40
-
41
- if (hit.collider.gameObject.CompareTag(name1))
42
-
43
- {
44
-
45
- Debug.Log("3");
46
-
47
- // point = Camera.main.WorldToScreenPoint(transform.position);
48
-
49
- Vector3 currentScreenPoint = new Vector3(Input.mousePosition.x, Input.mousePosition.y, point.z);
50
-
51
- Vector3 currentPosition = Camera.main.ScreenToWorldPoint(currentScreenPoint);
52
-
53
- transform.position = currentPosition;
54
-
55
- }
56
42
 
57
43
 
58
-
59
- }
60
-
61
- }
62
-
63
-
64
-
65
- if (this.transform.position.x > GameObject.FindWithTag(name2).transform.position.x - buzzle
66
-
67
- && this.transform.position.x < GameObject.FindWithTag(name2).transform.position.x + buzzle
68
-
69
- && this.transform.position.y > GameObject.FindWithTag(name2).transform.position.y - buzzle
70
-
71
- && this.transform.position.y < GameObject.FindWithTag(name2).transform.position.y + buzzle)
72
-
73
- {
74
-
75
- Debug.Log("OK");
76
-
77
- this.transform.position = GameObject.FindWithTag(name2).transform.position;
78
-
79
-
80
-
81
-
82
-
83
-
84
-
85
- }
86
44
 
87
45
 
88
46
 
@@ -90,86 +48,16 @@
90
48
 
91
49
 
92
50
 
51
+ ray可視化画像(赤色がrayです)
52
+
53
+
54
+
93
- Debug.Logが、"1"しか表示されないのでそこで止まっているようです。
55
+ ![イメージ説明](5231929151044b74b1478ee9a360e002.png)
94
56
 
95
57
 
96
58
 
97
59
 
98
60
 
61
+ rayをぶつけるオブジェクトをprefab化する前はうまく動いていました。
99
62
 
100
-
101
-
102
-
103
-
104
-
105
-
106
-
107
- 実行側スクリプトは
108
-
109
-
110
-
111
- ```C#
112
-
113
- using System.Collections;
114
-
115
- using System.Collections.Generic;
116
-
117
- using UnityEngine;
118
-
119
-
120
-
121
- public class triangleScript : MonoBehaviour
122
-
123
- {
124
-
125
-
126
-
127
- private Vector3 screenPoint;
128
-
129
-
130
-
131
- private GameControllerScript gcs;
132
-
133
-
134
-
135
-
136
-
137
-
138
-
139
- // Start is called before the first frame update
140
-
141
- void Start()
142
-
143
- {
144
-
145
-
146
-
147
- screenPoint = Camera.main.WorldToScreenPoint(transform.position);
148
-
149
-
150
-
151
- gcs = GameObject
152
-
153
- .FindWithTag("GameController")
154
-
155
- .GetComponent<GameControllerScript>();
156
-
157
- }
158
-
159
-
160
-
161
- // Update is called once per frame
162
-
163
- void Update()
63
+ それも要因かもしれません。。
164
-
165
- {
166
-
167
- gcs.grphicmethod("tr", "trgoal", 0.2f, screenPoint);
168
-
169
-
170
-
171
- }
172
-
173
- }
174
-
175
- ```