前提・実現したいこと
Unityでシューティングゲームを作っており、その中でプレイヤーに向かって直線的に向かってくる弾(所謂自機狙い)を作ろうとしています。
発生している問題・エラーメッセージ
以下のソースコードで試してみたのですが、弾が敵から全く出てきません。その以外は正常に動いています。エラーメッセージはありませんでした。
該当のソースコード
(関係ありそうな部分のみ載せています)
敵に関するスクリプト
public GameObject target,bullet2;
float frame=0;
public void Update()
{
//敵の移動
Vector2 direction = new Vector2(5*Mathf.Sin(frame*variable), 0);
GetComponent<Rigidbody2D>().velocity = direction * spaceship.speed;
//自機狙い弾の生成
if(frame%50==0 && target!=null)
{
Quaternion homingRotate = Quaternion.LookRotation(target.transform.position - transform.position);
Instantiate(bullet2, transform.position, homingRotate);
}
frame++;
}
弾に関するスクリプト
public class Bullet_rapid : MonoBehaviour {
public int speed = 4;
public float lifeTime = 5;
void Start ()
{
GetComponent<Rigidbody2D>().velocity = transform.up.normalized * speed;
Destroy(gameObject, lifeTime);
}
bullet2には自機狙いの弾を、targetにはプレイヤーをセットしました。
試したこと
ここに書いたソースコード以外にもLookAtを用いたり弾とプレイヤーをむすぶベクトルを用いたりして自機狙いを作ろうとしてみましたが、いずれもエラーはないものの弾が生成されなかったり生成されてもなぜか真上に飛んでしまったりとうまくいきませんでした。
その他
Unityのバージョンは5.5.1です。
弾の生成に関してはInstantiateを使う方法のみ知っています。もし他にもっと良い方法があるよという方がいらっしゃればご教授していただけると嬉しいです。よろしくお願いします。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
+1
2Dはちょっと詳しくないですが、Bullet_rapid
の計算で使っているtransform.up
はtransform.forward
じゃないかなーと感じたのですが、違いますかね?
(3Dであればforward
を使うところだと思ったので)
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.13%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2017/03/15 02:40 編集
教えていただいた通りtransform.up→transform.forwardで弾が飛ぶようになりました。
しかし2つまだ問題がありました。
1.弾がプレイヤーの初期位置を狙ってしまっている
2.自機狙い弾が縦方向に潰れてしまっている
1について,Updateなので毎回プレイヤーの位置を取得すると思ったのですが、プレイヤーが最初に居た位置に向かって弾が飛んでしまっています。また、プレイヤーがいない時にも発射されていました。
2について、シーンの一時停止で確認したところ発射された自機狙い弾が縦方向に潰れてしまって完全に見えなくなってしまいました。3Dで確認したところ、何故か自機狙い弾がxy平面に垂直になっていました。
1,2ともに色々調べてみましたが何故そうなるかがわかりませんでした。そもそもQuaternionをよく理解していないのでもっと勉強してもう一度よく考えてみます。
ありがとうございました。
2017/03/15 12:03
それから、プレイヤーがいないとき、というのはそもそもこのコード内には処理が書かれていないので常に発射され続けると思います。
そのあたりについては別途フラグを持つなどして、「撃つべきか否か」を判断するようにする必要があると思います。
弾の見た目に関してはビルボードの扱いかなーとも思いましたが、最初の回答でも書いた通り2Dについてはどういう処理をUnityが行っているのか詳しくないのでちょっと分かりません。(3Dの場合であれば、ビルボードの「前」方向はカメラの位置によって変わるので、それを無視して「前」を設定してしまうとおかしなことになることはあります)