今回はUnityのC#Script(スクリプト)を使用してオブジェクトを動かす方法を解説します。
UnityではC#Scrriptでコンポーネントの値を操作してゲーム上でイベントを発生させます。C#Scriptを使いこなせる様になると、Unityでできる事が一気に増えます!
- UnityではC#を使うと聞いた事があるけど、具体的に何をするのか分からない
- Unity上でC#を使ってオブジェクトを操作してみたい
C#を使うとどんな事ができるのかイメージできる様になると思います。
そして、Unityでのゲーム作成にC#は必須のスキルだという事も分かってもらえるはずです。
今は個人でも本格的なゲーム開発を行える環境が整いつつあります! 特に世界中のゲームクリエイターが使用しているのが、ゲーム開発エンジンのUnity。個人開発を行っているほとんどのクリエイターが使用しているとも言われている超 …
コンテンツ
C#Script(スクリプト)でオブジェクトを動かす
では、C#Scriptを使ってオブジェクト(今回は青いボール)を動かしてみたいと思います。
準備
まずはC#Scriptを使って動かす対象のオブジェクトを準備します。
今回は動かす対象のオブジェクトとしてのボールを用意します。台座の上のボールを置きました。
※ちなみに、ボールは3DオブジェクトのSphereを作るだけで簡単にできてしまいます。台座はCubeから作ります。
■台座に置かれたボール
手動でボールを動かす
C#Scriptを使ってオブジェクトを動かす前に手動でオブジェクトを動かしてみましょう。
- Sceneビューのオブジェクトをクリックして、移動ツールで動かす
- InspectorウィンドウのTransformコンポーネントのPositionの値を変更
■TransformコンポーネントのPosition操作(ボールがY軸上に移動)
C#Scriptを作成
さて、C#Scriptを作成しましょう。C#Scriptを作るためにはProjectウィンドウのCreateをクリックして、C#Scriptを選択します。
■ProjectウィンドウのCreateをクリックして、C#Scriptを選択
以上の操作でC#ScriptがScenesフォルダに作成されます。
作成時にファイル名を変更する事もできるので、必要に応じてファイル名も変更しましょう。ちなみに、ファイル名はクラス名と同じになっていないとエラーになるので、クラス名と合わせて下さい。デフォルトのままだとファイル名もクラス名もNewBehaviourScriptと設定されます。
■C#Script作成される
ここでC#Scriptを開いてみましょう。
■C#Script(デフォルト)
デフォルトのC#Scriptの中身を少しだけ紹介しておきます。
StartとUpdateというメソッドが登場しています。
それぞれの意味は、とりあえず以下の通りと思っておけばOKです。
- Start:初期化処理
- Update:一定時間毎に繰り返される処理
つまり、C#Scriptが呼び出された時点でStart(初期化処理)が走り、その後はUpdate(繰り返し処理)が走ります。初見だと何だそれ?と思うかもしれませんが、そんなものだと思っておいて下さい。
C#Scriptを編集
デフォルトのコードを元に、Unityの画面上に表示されている青色のボールを画面上部へと移動させていくコードを追記してみたいと思います。
Start、Updateメソッドそれぞれで以下の処理を行う様にしましょう。
- Startメソッド:transformコンポーネントを取得
- Updateメソッド:transformコンポーネントの座標(Y軸のみ)を変更する
ちなみにUpdateメソッドは延々と繰り返されるので、青色のボールは延々とY軸を移動していく事になります。
コンポーネントを取得する場合は「GetComponent」を使用します。transformコンポーネントを取得する場合には以下の様に記述します。
■GetComponentでtransformコンポーネントを取得
1 |
Transform test_transform = GetComponent<Transform>(); |
また、transformコンポーネントのposition(X軸、Y軸、Z軸)を変更したい場合は「Vector3」を使用します。
Vector3の詳細についてはVector3の公式リファレンスを参照
以下の様に記述する事で、positionのY軸を0.1fだけ動かす事ができます。
■Vector3でtransformコンポーネントのposition(Y軸)を変更
1 |
test_transform.position += new Vector3(0,0.1f,0); |
※この処理をUpdateの中に記載するだけで、何度も繰り返し呼び出してくれます。
という訳で、これらの処理をデフォルトのC#Scriptに追記しましょう。
※記載方法を多少変更している箇所がありますが、内容を見ていただけるとすぐ分かると思います。
■C#Scriptを変更
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class NewBehaviourScript : MonoBehaviour { Transform test_transform; // Start is called before the first frame update void Start() { test_transform = GetComponent<Transform>(); } // Update is called once per frame void Update() { test_transform.position += new Vector3(0,0.1f,0); } } |
オブジェクトにC#Scriptを適用
C#Scriptができあがったら、青いボール(Sphere)のオブジェクトにドラッグしてあげましょう。
ドラッグしてあげるだけで、オブジェクトのコンポーネントにアタッチされます!ちなみに、アタッチするタイミングはC#Scriptの編集前でも大丈夫です。
■C#Scriptをボールのオブジェクトにドラッグしてアタッチ
■C#Scriptがアタッチされている
実行してみよう!
さて、無事にオブジェクトへのアタッチも完了したので、実際にゲーム画面で動作を確認してみましょう。
この状態で、ゲーム実行ボタンを押せば動作を確認する事ができます。
■ゲーム実行画面
想定通りに、青いボールがY軸を移動(画面真横から見て上に移動)していますね!
簡単ではありますが、C#Scriptによってオブジェクトを操作できる!という事が実感できたかと思います。
まとめ
今回はUnityのC#Scriptを使用してオブジェクトを動かす方法についてご紹介しました。
以下の流れを意識すれば、すぐにC#Scriptでオブジェクトを動かす事は簡単だと思います。
- C#Scriptを用意する
- C#ScriptにはStart、Updateメソッドが存在する事を理解する
- C#Scriptを編集する
- オブジェクトにC#Scriptをアタッチする
様々なオブジェクトを用意して、様々なコンポーネントに動きを加えてあげれば、ゲームの中の世界にまさに命が吹き込まれます!その時にC#Scriptは非常に役に立つと思います。
例えば、街を作ってその中を移動する人達を作ってあげれば、賑やかな街へと変わっていきます。そうしてゲームプレイヤーは生き生きとしたゲームの世界の中に引き込まれていくと思います。