質問編集履歴

1

スクリプトの記述を追加しました。

2016/08/31 14:40

投稿

mappli15
mappli15

スコア12

test CHANGED
File without changes
test CHANGED
@@ -13,3 +13,117 @@
13
13
 
14
14
 
15
15
  どちらのほうが定石というか、一般的に好まれるんでしょうか?
16
+
17
+
18
+
19
+ 質問に不備があるとご指摘いただき、今後は気を付けます。。。
20
+
21
+ それで、ちょっと情報を追加いたします。
22
+
23
+ 以下のように、敵キャラクタのスクリプトを書いた場合、
24
+
25
+ Constraintsを使うと、衝突して吹っ飛んで回転などは抑えられるのですが、
26
+
27
+ LookAt()による回転は抑えられないようで、プレイヤーと衝突するとめり込んで
28
+
29
+ 浮き上がって回転します。。。どうしたらよいでしょうか?
30
+
31
+
32
+
33
+ ```lang-C#
34
+
35
+ using UnityEngine;
36
+
37
+ using System.Collections;
38
+
39
+
40
+
41
+ public class Enemy : MonoBehaviour {
42
+
43
+ private Animator anim;
44
+
45
+ public Transform player; //プレイヤーを代入
46
+
47
+ public float speed = 3; //移動速度
48
+
49
+ public float scope = 15; //敵の知覚範囲
50
+
51
+ // Use this for initialization
52
+
53
+ void Start () {
54
+
55
+ player = GameObject.FindGameObjectWithTag("Player").transform;
56
+
57
+ anim = GetComponent<Animator>();
58
+
59
+ }
60
+
61
+
62
+
63
+ // Update is called once per frame
64
+
65
+ void FixedUpdate () {
66
+
67
+
68
+
69
+
70
+
71
+ if (getDistance()<scope) {
72
+
73
+
74
+
75
+ anim.SetBool("Tracking", true);
76
+
77
+ transform.position = transform.position + (getDirection() * speed * Time.deltaTime);
78
+
79
+ transform.LookAt(player); //プレイヤーの方を向く
80
+
81
+ }
82
+
83
+ else
84
+
85
+ {
86
+
87
+ anim.SetBool("Tracking",false);
88
+
89
+ }
90
+
91
+ }
92
+
93
+
94
+
95
+ float getDistance()
96
+
97
+ {
98
+
99
+ Vector3 playerPos = player.position; //プレイヤーの位置
100
+
101
+ Vector3 relativePlayerPos = playerPos - transform.position; //敵から見た相対位置
102
+
103
+ return relativePlayerPos.magnitude; //距離
104
+
105
+ }
106
+
107
+
108
+
109
+ Vector3 getDirection()
110
+
111
+ {
112
+
113
+
114
+
115
+ Vector3 playerPos = player.position; //プレイヤーの位置
116
+
117
+ Vector3 relativePlayerPos = playerPos - transform.position; //敵から見た相対位置
118
+
119
+ return relativePlayerPos.normalized; //単位化(距離要素を取り除く)
120
+
121
+
122
+
123
+ }
124
+
125
+ }
126
+
127
+
128
+
129
+ ```