Unity備忘録6頁目「スクリプトを書いてみる2」

江上宿六です。

 

前回はスクリプトを記述し、Start関数やUpdate関数がどのような動きをするのか

確認しました。 今回はスクリプトでオブジェクトを操作してみたいと思います。

 

と、その前に前回し忘れていた注意です。 前回スクリプトにtestと名付けましたが

スクリプトの名前を変更したい時とかってありますよね。 しかしここで安易に

名前を変更してしまうとエラーを吐いてしまう事があるのです。

 

試しにtestをhelloworldに変えて実行してみましょう、正しく動きませんね。

多分スクリプトの名前とクラス宣言の名前が一致してないと駄目なんだと思います。

f:id:y6yegami:20180709164002p:plain

    ↓

f:id:y6yegami:20180709164007p:plain

 このようにこっちも変更を加えてあげると動きます。

 

では本題に入ります。

コンソールに文字が表示出来ましたが、だから何という感じもありますよね。

もちろんこういう処理や手順を知るのは大事な事だとは思いますが、ゲームを

今すぐにでも作りたいという人には退屈なものではなかろうかと思います。

なので早速動かしましょう、オブジェクトを。

 

新たにプロジェクトを作っても良いし、作らなくても良いですのでシーンに

Cubeを配置した状態にします。 そのCubeを選択しインスペクターの

Transform項目のPositionのXYZをそれぞれ0にします。 これで空間の中心に

Cubeが配置されました。

f:id:y6yegami:20180709184752p:plain f:id:y6yegami:20180709184757p:plain

次にスクリプトを作ります。 名前はCubeControllerとでもしておきます。

作成出来たらダブルクリックなりしてVisualStudio等のエディタを立ち上げ、

このようなコードを入力します。

f:id:y6yegami:20180709185551p:plain

まずクラスの中にfloat型のrotSpeedという変数を宣言しています。 これは

回転速度を保持するもので、宣言時は0を代入しています。 次にStart関数で

this.rotSpeed = 10としています。 thisというのはこのクラスのメンバ、つまり

今回はCubeControllerクラスのメンバを示すのに使われます。 ともかく

Start関数でこの回転速度を10と設定したわけです。

 

次はUpdate関数です。 transform.Rotateはオブジェクトを回転させるもので

括弧内は(x軸,y軸,z軸)という風になっています。 このz軸に先ほどの回転速度を

設定しています。 つまりフレームが呼ばれる度に10ずつz軸回転をする

という感じの中身になっているわけです。 保存してCubeにアタッチしたら

実行してみましょう。

f:id:y6yegami:20180710135723p:plain

カメラがデフォルトの状態ならこういう方向に回るようになったと思います。

このようにしてオブジェクトが操作出来るわけです。

 

今回はこれで終わりです。 オブジェクトを回してみただけですけども、

自分はこれだけでも結構楽しいです。 何か出来そうな可能性を感じたりですね。

f:id:y6yegami:20180710145641p:plain

ユニティちゃんを回転させてみたり。

Unity備忘録5頁目「スクリプトを書いてみる1」

江上宿六です。

 

こうやって備忘録を書いたりはしてのは良いんですけど、本業の方がなかなか

進まないんですよね。 最近になってようやく企画を始められました、遅い。

 

今回はスクリプトですね。 UnityではJavascriptC#等を使ってスクリプト

書くことが出来ますが、ここではC#を使って書いていきます。 スクリプト

プロジェクトビューのCreateからC#Scriptを選ぶことで追加出来ます。

f:id:y6yegami:20180709135953p:plain f:id:y6yegami:20180709140004p:plain

スクリプトが追加されるとまずはファイルの名前を入力させられます。

とりあえずここはtestとでもしておきましょう。 決定するとインスペクターに

自動生成されたスクリプトが表示されます。 これを編集していく事になります。

 

このスクリプトを編集するには、スクリプトを選択した状態でインスペクターの

上部にあるOpenをクリックするか、スクリプトのファイルをダブルクリック、

右クリックでOpenを選択するなど様々な方法がありますが、そこはお好みで。

 

ここでVisualStudioを入れていた人はVisualStudioが開くと思います。

アカウントの登録が出来ていなければ行いましょう。

f:id:y6yegami:20180709142434p:plain

まぁ、こんな感じになっていますね。 上から簡単に説明していきます。

1~3行目はUnityやC#で使う便利な変数や関数をこのスクリプトでも使いますよ

といった感じの宣言です。 基本的に消してはいけないやつだと思います。

 

5行目、testクラスの宣言。 MonoBehaviourというのはこれ継承だったかな。

別に今は継承とかそういうのはどうでもいいです。 肝心なのはその次です。

 

8~10行目にあるStart関数は最初に一度だけ行われる関数です。 その最初

というタイミングについては後で書きますが、変数などの初期化を行うのに

都合の良い関数です。

 

13~15行目にあるUpdate関数は毎フレーム呼び出される関数で、

主にオブジェクトを更新する処理をするのに使われる関数です。

 

早速このStart関数とUpdate関数の中に記述して機能を確かめてみましょう。

f:id:y6yegami:20180709145805p:plain

Start関数の中にこう書いてみました。 Debug.LogはUnityのコンソールに

出力を行うものです。 中身は見飽きた感のあるHello World!という文字列です。

書けたら保存をしてUnityに戻って実行ツールなどを使い実行してみましょう。

 

‥‥まぁ、何も起きませんけどね。 Unityでスクリプトを実行させるには

スクリプトをオブジェクトにアタッチする必要があります。 Cubeがあれば

それでも良いですが、無い場合はヒエラルキーのCreateからCreateEmptyを

選択して空のオブジェクトを追加します。

 

そうしたらヒエラルキーのCube、または空のオブジェクトのGameObjectに

testのスクリプトをドラッグ&ドロップします。

f:id:y6yegami:20180709151453p:plain

これでアタッチができました。 再び実行してみましょう。

f:id:y6yegami:20180709152223p:plain

今度はコンソールや画面左下の所にHello World!と表示されました。

コンソールはその画面左下の所をクリックしたり、Windowメニューから表示

させる事ができます。

 

Hello World!と一回表示されたのは記述をしたStart関数が一度だけ呼び出される

関数だからです。 それではUpdate関数にも同様にHello World!と出力するよう

記述して実行してみましょう。 一度アタッチしておけば書き換えた後に

再度アタッチする必要はありません。

f:id:y6yegami:20180709153144p:plain

f:id:y6yegami:20180709153157p:plain

想像は出来たと思いますが、凄い勢いでコンソールが流れていきました。

1秒60フレームの描画が行われるとしたら、1秒で60回Hello World!されます。

これらがStart関数とUpdate関数の機能です。

 

後述するといったStart関数が行われるタイミングですが、調べたところ

スクリプトが有効で、Update関数が行われる前に行われるとありました。

 

Startよりも先に呼び出されるAwake関数というのもあるようですが、

とりあえず現状はStartで良いと思います。 将来何かを作ろうとした時に

初期化で何か問題があると感じたらAwakeを思い出しましょう。

 

長くなりましたが今回はここで終わりです。 次回はコンソールに出力する

のではなく実際にオブジェクトを操作してみたいと思います。

Unity備忘録4頁目「インスペクター」

江上宿六です。

 

視点を回転させたときにシーンギズモも回転していた、という事がありましたが

オブジェクトが変形したときにインスペクターも変わっていたというのには

気づいていたでしょうか。 前回はあえてスルーして記事を構成してました。

f:id:y6yegami:20180707155843p:plain f:id:y6yegami:20180707155908p:plain

こんな感じでCubeが配置されていたとして、この時のPositionは(0,0,0)です。

f:id:y6yegami:20180707160054p:plain f:id:y6yegami:20180707160059p:plain

Z軸方向に動かすと、インスペクターのTransform、PositionのZが1になりました。

これはオブジェクトとインスペクターが連動しているというよりは

インスペクターがオブジェクトの情報を管理しているという方が個人的には

しっくり来ますね。

 

それでは逆にインスペクターの値をいじってみるとどうなるか。

Transform、RotationのXを45にしてみることにしましょう。

f:id:y6yegami:20180707162236p:plain f:id:y6yegami:20180707162242p:plain

X軸を基軸として45度回転したのが確認出来ました。 正確には45度回転した

状態になっているわけですね。 もう一度45と入れても90度にはなりませんから。

 

このようにインスペクター側でもオブジェクトの状態を制御出来るわけです。

というより3D空間にオブジェクトを正確に配置するのは至難の業ですから、

オブジェクトを追加したらインスペクターで値を入力して配置するというのが

恐らく一般的だと思われます。 恐らくです。

 

このオブジェクトの値ですが、操作ツールやキーボードで入力する以外にも

値を変更することが出来ます。 それはスクリプトです、プログラム要素です。

 

基本的にスクリプトを使わなければゲームの実行中に値を操作出来ないので

極力プログラムを書かなくても良いと言われるUnityでもある程度はプログラムの

知識が必要となってしまうのです。 しかし今回参考の教本では見慣れない

単語とかは多いもののプログラムとしてはそれほど難しいものではないですので

そこは一つ安心して頂ければ。

 

まぁ、しかし少し考えてみてください、Cubeが(可愛い)キャラクターだったり、

キー操作に応じてPositionの値が更新されたり(移動)、なんか回転したりしてたら

それはもうゲーム(みたいなもの)です。 こんなに簡単に形作れちゃうんだから

Unityは凄いや。

 

と、いう事で今回はこんな感じで。 次回はスクリプトを書きますけど、

プログラムの基礎みたいなのは要らんですよね、変数配列関数制御文構造体。

 

Unity備忘録3頁目「画面、オブジェクトの操作」

江上宿六です。

 

前回は各ウィンドウの説明やシーンについて記してきましたが、今回は

オブジェクトを配置し、それを操作するということをやっていこうと思います。

 

早速Cubeオブジェクトを追加してみましょう。 ヒエラルキービューの左上にある

Createをクリックし、3DObject→Cubeと選択します。

f:id:y6yegami:20180707125528p:plainf:id:y6yegami:20180707125535p:plain

f:id:y6yegami:20180707130035p:plain f:id:y6yegami:20180707130129p:plain

と、このようにシーンビューの中央にCubeが追加されて表示されています。

それと同時にヒエラルキービューにもCubeが追加されています。 この

ヒエラルキービューのCubeを右クリックしてDeleteを選択すると、どちらからも

削除されます。 こういった事からシーンとヒエラルキービューは対応している

というのがわかります。 ライトとカメラでも同様です。

 

では次にこのCubeを操作してみましょう。 シーンに再びCubeを追加したら

左上にある操作ツールの左から2番目、移動ツールを選択します。 Cube上に

三軸の矢印が表示されます。 Blenderとかでもおなじみなやつです。

f:id:y6yegami:20180707131727p:plainf:id:y6yegami:20180707132107p:plain

この矢印をドラッグする事でオブジェクトを移動させる事ができます。

真ん中のカラフルな四角い所をドラッグすると自由に移動させられます。

f:id:y6yegami:20180707132838p:plainf:id:y6yegami:20180707132844p:plain

同様に左から3番目の回転ツールを選択すると、三色の球状のやつが表示されます。

ドラッグするとその軸を基軸として回転します。 外周の所をドラッグすると

恐らく視点を軸として回転するんだと思います。

f:id:y6yegami:20180707133144p:plainf:id:y6yegami:20180707133149p:plain

左から4番目の拡大縮小ツールを選択すると先が四角い三軸が表示されます。

ドラッグするとその軸の方向に拡大、縮小されます。 真ん中をドラッグすると

オブジェクト全体が拡大縮小されます。

 

一番右のはとりあえず置いといて、一番左の手のマークを選択します。

これは視点を平行に移動させる事ができるものです。 ですが視点を動かすのに

いちいち選択してやっていたら面倒なので、視点は基本マウス操作で行います。

 

 ホイール回転  :ズームイン、ズームアウト

 ホイールドラッグ:視点の平行移動

 右ボタンドラッグ:視点の回転

 

だいたいこれくらい覚えておけばなんとかなります。

 

視点を回転させると、右上の物体も同様に動いている事に気づいたでしょうか。

f:id:y6yegami:20180707134757p:plain

これはシーンギズモといって、今自分がどの方向を向いているかを表してくれる

有能なやつです。 3Dで何かを作るにはこういう空間認識が大事でしょうから。

向きを示すだけではなく、飛び出ている部分をクリックする事で任意の方向を

向くことが出来ます。

 

中心部分をクリックする事で平行投影と透視投影を切り替える事が出来ます。

Blenderでもあったパースの有り無しですね。 それと右上の南京錠マークの所で

視点の固定というか、回転を出来なくしたり出来ます。 シーンギズモは

色々と便利なので是非とも覚えておきましょう。

 

文字数も増えたので今回はこんな感じで。 次回はインスペクターの方を

見ていきたいと思います。

Unity備忘録2頁目「画面の説明」

江上宿六です。

 

前回Unityをインストールし、プロジェクトの作成を行いました。

しかし画面に色々ありすぎて現状では何が何だかよく分からない状態だと思います。

なのでとりあえずは各ウィンドウがどのような役割なのかを説明します。

 

・シーンビュー

f:id:y6yegami:20180706134110p:plain

タブにSceneと書かれているウィンドウ。 ここの画面にオブジェクトを配置して

シーンやゲームを作っていく事になる。 シーンについてはまた後ほど。

 

・ゲームビュー

f:id:y6yegami:20180706134635p:plain

タブにGameと書かれているウィンドウ。 ゲームを実行した時の見え方を

確認したり、ゲームの処理速度や負荷のかかり方を解析できたりもする。

基本的にカメラから見た画面が映し出されるハズ。

 

ヒエラルキービュー

f:id:y6yegami:20180706135235p:plain

タブにHierarchyと書かれているウィンドウ。 現在シーンに配置されている

オブジェクト名が一覧で表示される。 プロジェクト作成時に自動的にカメラと

ライトが生成されるため、このヒエラルキービューにそれが表示されている。

上のシーンビューの画像のカメラと太陽みたいなやつがそれ。

 

・プロジェクトビュー

f:id:y6yegami:20180706135744p:plain

タブにProjectと書かれているウィンドウ。 ゲームで使う素材をここで管理する。

このウィンドウに画像などをドラッグ&ドロップする事で素材として登録出来る。

最初はもちろん空っぽです。

 

・インスペクター

f:id:y6yegami:20180706140250p:plain

タブにInspectorと書かれているウィンドウ。 シーンやヒエラルキー、または

プロジェクトで選択したオブジェクトの詳細情報を表示する。 この画像は

カメラを選択した時のインスペクター。 ここからオブジェクトの位置や回転、

そのほか色々な値を操作することが出来る。

 

・操作ツール

f:id:y6yegami:20180706141230p:plain

シーンに配置されたオブジェクトを移動させたり回転、拡大縮小させたり出来る。

 

・実行ツール

f:id:y6yegami:20180706141331p:plain

ゲームの実行や停止を行う事が出来る。

 

まぁ、こんな感じですが、結局はこれらをどうすれば良いかという事ですよね。

だいたいはプロジェクトに素材を追加し、それをシーンに追加、選択して

操作ツールやインスペクターで値を設定し、ゲームで実際の見え方を確認する。

そして実行して実際の動作を確認する、という流れになるのだとは思います。

こうやって出来上がったというか、作り上げていくのがシーンです。

 

Unityのゲームというか、ゲームというのはだいたいシーンの集合体です。

オープニングのシーンがあって、タイトルのシーンがあって、オプションやら

キャラ選択やら、もちろんゲーム本編もシーンになります。 適時にそれらを

呼び出す事によってゲームとして成立します。 そのシーンをまとめたのが

プロジェクト(非プロジェクトビュー)であり、ゲームという事です。

 

シーンを作る術をこれから学んでいくことになります。 次回は画面の操作や

オブジェクトを追加して操作してみたりという事をやっていきたいと思います。

f:id:y6yegami:20180706145527p:plain

絵が寂しかったので活きの良いSDユニティちゃんを置いておきましょう。

配布されているパッケージをインポートしてシーンを開いただけで色々と

動いてくれます。