前回の記事で AssetStoreの使い方を書いたと思います。
今回から、少しだけコードを書きながら前回追加した宇宙戦闘機を動かしていきたいと思います。
目次
Visual Studioを設定する
コードを書くエディタをVisual Studioに変更しましょう。
詳しくは、下記を見てください。
ソースファイルの作成方法
Scriptフォルダの作成
まずは、ソースファイルを保存するフォルダを作成しましょう。
作成する場所は、作ってもらった[MyFolder]の中です。
赤枠で囲まれている[MyFolder]の上で右クリックをして、[Create]の[Folder]をクリックします。
[MyFolder]の作成時と同じですね。
そして、その中にソースファイルを作成します。
C#のソースファイルの作成
作成するソースファイルは、C#のモノです。
言語が違うと、書いていくプログラミングのコードも違ってくるので、間違わないようにしてください。
C#のソースファイルの名前は、[StarfighterControl.cs]にしてください。
ダブルクリックかエンターを押して、作成した[StarfighterControl.cs]を開いてください。
開くと、Visual Studioが起動したと思います。
右側の赤枠で囲んだ部分に注目してください。
この欄は[Assets]→[MyFolder]→[Script]→[StarfighterControl.cs]となっています。
そうです。Unityの[Projectタブ]と同じです。
そして、[StarfighterControl.cs]をクリックしてください。そうすると、左側の大きなところで開くと思います。
こういうのが開いたと思います。これがUnityで作成したソースファイルのテンプレートです。
Start()関数
Start()関数とは、[void Start()]と書かれている部分です。
これは、このソースファイルで一番最初に一度だけ呼ばれる部分です。なのでStart()です。
Update()関数
Update()関数は、毎フレーム毎に一度呼ばれます。
なので、ゲーム中ずっと呼ばれる部分です。
便利なのですが、ここにいろいろ書きすぎるとゲームが重たくなる要員にもなるので気をつけて使いましょう。
宇宙戦闘機を動かそう!!
では、コードを書いて、宇宙戦闘機を動かしてみましょう!!
キーボードの入力
動かす方法は、キーボードの上下、左右です。
この4つのボタンで、前と後ろ、左と右に動くようにします。
using UnityEngine; using System.Collections; public class StarfighterControl : MonoBehaviour { float X_Speed = 1; float Z_Speed = 1; // Use this for initialization void Start() { } // Update is called once per frame void Update() { float vertical = Input.GetAxis("Vertical"); float horizontal = Input.GetAxis("Horizontal"); if (Input.GetKey("up")) { transform.Translate(0, 0, vertical * Z_Speed); } if (Input.GetKey("down")) { transform.Translate(0, 0, vertical * Z_Speed); } if (Input.GetKey("left")) { transform.Translate(horizontal * X_Speed, 0, 0); } if (Input.GetKey("right")) { transform.Translate(horizontal * X_Speed, 0, 0); } } }
上記のがコードです。(もしかしたら、全角スペースが入っているかもしれないので、コピペする時には注意を!)
float X_Speed = 1; float Z_Speed = 1;
6・7行目の2つが横移動時と縦移動時のスピードを決める変数です。
この数字を大きくすると、動くスピードが早くなります。
</pre> float vertical = Input.GetAxis("Vertical"); float horizontal = Input.GetAxis("Horizontal");
16行目のが、キーボードの矢印の上下が押された時に-1~1の値を取得する事が出来ます。
同様に、18行目は左右のキーが押された時に、-1~1の値を取得する事が出来ます。
if (Input.GetKey("up")) { transform.Translate(0, 0, vertical * Z_Speed); } if (Input.GetKey("down")) { transform.Translate(0, 0, vertical * Z_Speed); } if (Input.GetKey("left")) { transform.Translate(horizontal * X_Speed, 0, 0); } if (Input.GetKey("right")) { transform.Translate(horizontal * X_Speed, 0, 0); }
20行目から31行目の処理が、実際に宇宙戦闘機を動かしている処理部分です。
[Input.GetKey(
"up"
)
]が押されたら、その下の[transform.Translate(0, 0, vertical * Z_Speed);]の処理をします。
というのが、if文のしてくれる事です。
ちなみに、[Input.GetKey(
"up"
)
]とは矢印キーの上の事ですね。
ほかの3つのそれぞれ、矢印下[Input.GetKey(
"down"
)]
、左[Input.GetKey(
"left"
)
]、右[(Input.GetKey(
"right"
)
]です。
そして、それぞれキーが押された時にどんな処理をしてるのかは、
例えば[Upキー]の場合、処理は[transform.Translate(0, 0, vertical * Z_Speed);]です。
transform.Translate(x,y,z)のzに[vertial * Z_Speed]と書かれています。
Update()関数の中で、書かれているので、毎フレーム毎にZにプラス[vertial * Z_Speed]するという意味です。
vertialは、矢印キーが押された時に-1から1の値を持ち、上が押された時に0~1の値を持つので、Zに対してどんどんプラスして行くという事です。
他の項目も同様の処理が書かれています。
ゲームオブジョクトにソースファイルをセットする
では、書いたソースファイルを宇宙戦闘機のゲームオブジョクトに設定しましょう。
やり方は、簡単!!
書いたソースファイルをクリックし、それをドラッグ・アンド・ドロップで宇宙戦闘機のゲームに持っていくだけです。
今だと、宇宙戦闘機のゲームオブジョクト名か[SciFi_Fighter_AK5]になってるのでそれにドロップしてください。
このように宇宙戦闘機の[Inspector]に追加されていればOKです。
ゲームの実行
では、今回作ってもらった部分が無事動くか検証してみましょう。
Unityの画面に真ん中上にある[▶]ボタンを押してください。
これだけでゲームが実行されます。
今、矢印キーを押せば宇宙戦闘機が動くと思います。
動かない人は、赤枠で囲んだ[Gameタブ]のどこでもいいのでクリックしてみてください。
これで動くと思います。
Sceneの保存
前回の記事の最後で書いた、Sceneの保存をしましょう。
Sceneの保存を忘れると、今回行ってもらったことが保存されないので、絶対に保存しましょう。
まとめ
少し、駆け足でしたがゲームオブジェクトの動かす方法を紹介してきました。
矢印キー以外のキーボード入力やマウスのクリック入力、もちろんスマホのタッチ操作などいろいろなデバイスでいろいろな入力方法を使う事が出来ます。
今日書いたところを変える事で、いろんなことが出来ると思います。
次回は、宇宙戦闘機からビームか弾を発射出来るようにして、攻撃が出来るように変更していきましょう。
では。
コメント
こんにちは、この記事を参考にゲームを作らせてもらっているものです。
動くようにスクリプトを作ったのですが、
そもそもエラーが起きてしまい実行できません。
変えたのはカメラとライトと戦闘機だけなのですが、
なぜ実行できないのか教えていただきたいです。