2014年12月28日日曜日

Unity シューティングメモ 弾 スクリプト


プレイヤーに複数のスクリプトを持たせることが可能。??複雑にすると問題がでてきそうだが、今のところうまくいっている。ちなみに、https://gist.github.com/tracend/893555やろうとしたことは、プレイヤーに弾を撃たせるスクリプト C#でなかったので、

var prefabBullet: Transform;var shootForce: float ="100";function Update () {if(Input.GetButtonDown("Shoot") ){var instancebullet =Instantiate( prefabBullet ,transform.position,Quaternion.identity);instancebullet.rigidbody.AddForce(transform.forward * shootForce);}}


■説明
Var ← 「今から新しい変数を定義するよ」という宣言public var としてもうまく動いたんだけど、つけなくもていいみたい。
http://docs.unity3d.com/ScriptReference/Rigidbody.AddForce.htmlhttp://is4cafe.hatenablog.com/entry/20140306/1394036396
.rigidbody.AddForce

これについてまとめてある。
ちなみに AddForce は物体に力を加える。とのことらしいです。
shootForceを宣言しているからそれが使われているみたいだが、
反応がない。

理由は
弾のほうに 違うスクリプトをつけていたからみたです。

using UnityEngine;

public class Bullet : MonoBehaviour
{
        public int speed = 10;

        void Start ()
        {
                rigidbody2D.velocity = transform.up.normalized * speed;
        }
}


ちなみに弾の方はC#とややこしや。
色々とわかりました。


まずね。

#pragma strict

var bullet: GameObject;
var player: Transform;
var shootForce: float = 100;
var obj: GameObject;

function Update () {

   if(Input.GetButtonDown("Fire1")  ) 
   {
    obj = bullet.Instantiate( bullet );
    obj.transform.position = player.position;
    obj.rigidbody2D.velocity = transform.up.normalized * shootForce;
   }
   

}

最終的にこれになったんだけど。
考え方としては、弾のインスタンスを生成する。
そいつを機体の位置とおなじにする。
その弾に力を加える。
という流れ。

https://gist.github.com/tracend/893555
こいつとの違いは、

↑ファンクションの中で変数を宣言している。

var instancebullet =Instantiate( prefabBullet ,transform.position,Quaternion.identity);

こんな感じで。
インスタンスした弾に対して命令しないと意味がないからかな。

#pragma strict

var bullet: GameObject;
var player: Transform;
var shootForce: float = 100;

function Update () {

   if(Input.GetButtonDown("Fire1")  )
   {
    bullet.transform.position = player.position;
    bullet.rigidbody2D.velocity = transform.up.normalized * shootForce;
   }
 
}

こんな感じにするとエラーはでないけど。
弾はでないw
つまり、インスタンスを生成は重要だということだ。
http://qiita.com/2dgames_jp/items/8a28fd9cf625681faf87

であとは、そいつをいじりたおしていく。
感じです。

間違っていたのは、

rigibody.Addforce をやっていたので。うまく弾とエラーがでてた。
そりゃそーだ。3Dだしw


あとはプログラムの記述の仕方として、
if 文と それから下のアクションは
別にしたほうがいいのかな?


弾のその後とか、制限とかもかんがえられますね。
パワーがなくなってでなくなるとか。
そういうのはまた、今度かな。










0 件のコメント:

コメントを投稿

Ga4のtest

これを押すとリンクするよ 参考にした記事はこちら