Exception[0]

UnityとかPHPを使って色々やるとかやらないとか

近況とコメント返し

ご無沙汰してます。

前回の記事から職場の環境が変わったりなんやりで時間はあるけど微妙に時間が取れないという状態でした。

思ったよりもコメント頂けてこりゃあSRPGの方最後まで書かないといけないなーと思いつつ、LoLやスプラトゥーンをやりこむ毎日です。げふ。
需要があるということなので、のんびりまって頂けてるとこれ幸いです。

>> roccoさん
コメントありがとうございます。
SRPGってあんまり作成講座見かけないのでぼちぼちですが完成させれたらと思います。
これで後続でSRPGを作られる方が出てくればこれ幸い。

>> 濱田基久さん
コメントありがとうございます。
モチベがないと全く動けないというどうしようもないウチですがのんびり見ていただければこれ幸い。

>> 名無しさん
コメントありがとうございます。
チュートリアルは初めは誰しもが通る道なので名無しさんがそこで楽しさを見出してこれから自分の作ってみたいゲームを形にできることを祈ってます(’人')
その足がかりになるような記事を書くように目指します。

>> くまださん
コメントありがとうございます。
しょっぱい記事しかないブログですが閲覧して頂きありがたい限りです。
エスパーではないのでそちらのコードは分かりませんが原因として考えられるのは
・TileBase.cs のクラス名が間違っている
・StageBase.cs 内で読み込んでいるクラス名が一致していない
かもしれません。
罠だらけのコードなのでただペーストすると危ないかもしれません。
ご武運を!

>>NANASHIさん
コメントありがとうございます。
数多くあるブログの中から閲覧ありがとうございます。
需要あるようなので頑張ります!
実際作る側ってそういう需要とか全くわかんないんですよね。1対不明瞭なので。

>>通りがかりさん
コメントありがとうございます。
作成モチベがあがれば現状できている所までを記事にするのですが
その記事にする過程が物凄く物凄い物凄らしく面倒なんですよね。
CPU思考ルーチンぐらいまではできているのでのんびり待って頂けるとこれ幸い。


ぼちぼちやっていきます。
課金ガチャ系の記事は需要なさそうでしたので削除しました。なむぅ。

【Unity】タクティクスSRPGぽいものを作ろう! - ③背景モデルを追加しよう! ~初めてのAssetStore~

休日は基本12時間睡眠のあがいです、こんばんわ。
起きたら既に日が落ちてました。解せぬ。

前回までのあらすじ

マス目を光らせたり投影方法を変えたりしました。

③背景モデルを追加しよう! ~初めてのAssetStore~

さて、今回はUnityの最大の強み、AssetStoreを使ってみましょう。

ツールバーからWinodow => AssetStore。もしくはCtrl+9を押してAssetStoreのウインドウを開きます。

f:id:acguychan:20140923214919j:plain

AssetStoreの利用には登録が必要なので右上のアカウント作成から作りましょう。
作り終わり、ログイン後、右上の検索バーからFree Rocksで検索します。

Free Rocks by TripleBrick http://u3d.as/8hX

今回はこちらの岩場背景を使いたいと思います。

f:id:acguychan:20140923234252j:plain
こちらのボタンを押してDLします。
※写真では既にDL済みなので、インポートに変わっています。


DLが終わったらインポートボタンに変わるのでそれを押します。
そしてそのままImport。
f:id:acguychan:20140923234437j:plain


ProjectにFree_Rocksが追加されました。
f:id:acguychan:20140923234541j:plain


Free_Rocks/_prefabsから好きな岩prefabをSceneのマス目がある辺りにポイポイしましょう。

ポイポイし終わったら実行します。

f:id:acguychan:20140923235248g:plain

それっぽくなりました!
モデリングも極力自分で作らなくてもどうにでもなるなんていい時代ですね本当。


さて、こちらのFree_RocksにはSkyboxのテクスチャもおまけでついてきています。
Skyboxとは、カメラの位置に影響されないシーン全体に適応される背景です。


書いてて自分でもよくわかってないので実際に使ってみましょう。

ツールバーのEdit => Render Settingを選びます。
Inspectorにこういうのが出てきます。
f:id:acguychan:20140923235821j:plain


こちらの、SkyboxMaterialにFree_Rocks/Standard Assets/SkyboxesにあるSunny2 Skyboxを追加します。

f:id:acguychan:20140924000205g:plain
世界が明るくなった気がします。

実行してみましょう。
f:id:acguychan:20140924000456g:plain


一気にファンタジー臭が溢れてきましたがタクティクスっぽくなってきました!


Asset Storeは開発支援・チャリティ・販売など様々な目的で配布や販売されており、無料のモデリング素材やエフェクト・スクリプトも多種多様にあります。
実際に色々落としてみて、触ってみると自分の中のUnityの世界が広がるかもしれません。


さて、次はマス目を選択した際のポップアップメニューを作っていきたいと思います。


バックナンバー:
【Unity】タクティクスSRPGぽいものを作ろう! - ①マップチップを配置しよう! - Exception[0]
【Unity】タクティクスSRPGぽいものを作ろう! - ②マス目を光らそう! ~mousePosition&Raycast~ - Exception[0]

【Unity】タクティクスSRPGぽいものを作ろう! - ②マス目を光らそう! ~mousePosition&Raycast~

未だに冷房を23度にしてガンガン部屋を冷やしているあがいです、こんばんわ。
翌朝凍えてます。

前回までのあらすじ

スクリプトからマップチップを配置する事ができました。


②マス目を光らそう! ~mousePosition&Raycast~

さて、今回はマウスで選択しているマス目を光らせる演出を入れていきます。

まず、ScriptsフォルダにStageフォルダを作ります。
その中にStageBaseスクリプトファイルを作ります。

f:id:acguychan:20140923012648j:plain

StageBaseスクリプトを開きUpdate()に以下を追加。

  // Update is called once per frame
  void Update () {
    RaycastHit  hit;  // 光線に当たったオブジェクトを受け取るクラス 
    Ray      ray;  // 光線クラス

    // スクリーン座標に対してマウスの位置の光線を取得
    ray = Camera.main.ScreenPointToRay(Input.mousePosition);
    // マウスの光線の先にオブジェクトが存在していたら hit に入る 
    if(Physics.Raycast(ray,out hit)){
      // 当たったオブジェクトのTileBaseクラスを取得
      TileBase tile_base = hit.collider.GetComponent<TileBase>();
      tile_base.bColorState = true;
    }
  }


追加後、StageBaseスクリプトをHierarchy/Stageに追加します。


次に、同じようにScriptsフォルダにTileフォルダを作り、その中にTileBaseスクリプトファイルを作ります。

TileBaseスクリプトを開き以下のように追加。

public class TileBase : MonoBehaviour {

  private Color default_color;  // 初期化カラー
  private Color select_color;    // 選択時カラー

  protected Material _material;

  public bool bColorState;

  // Use this for initialization
  void Start () {
    // このクラスが付属しているマテリアルを取得 
    _material = this.gameObject.renderer.material;
    // 選択時と非選択時のカラーを保持 
    default_color = _material.color;
    select_color = Color.magenta;
    bColorState = false;
  }
  
  // Update is called once per frame
  void Update () {
    _material.color = default_color;
    // StageBaseからbColorStateの値がtrueにされていれば色をかえる 
    if(bColorState) {
      bColorState = false;
      _material.color = select_color;
    }
  }
}

追加後、TileBase スクリプトをProject/Obects/GrassTile(配置に使っているマップチップ)に追加します。


実行してみます。

f:id:acguychan:20140923014142g:plain

※カメラのRotationをマス目に対してX軸やY軸をいじって斜めにするとそれっぽく見えます。
…選択したマス目の色が変われば成功です。


最後に、現在のカメラの投影方法のままだと奥行きがありすぎて、目標の魔人学園ぽいものは使いづらいので、
透視投影から平行投影に変更します

透視投影:遠近感があり、奥に行くほど小さくなり手前にくるほど大きくなる。
平行投影:遠近感がなく、どの距離でも同一の大きさ。


Hierarchy/Camera/Main Cameraを選択し、InspectorからCamera/ProjectionのPerspective(透視投影)をOrthographic(平行投影)に変更します。

f:id:acguychan:20140923015033g:plain

3Dモデルは使うけど2Dぽいゲームを作りたい!という場合は平行投影のほうが良さ気です。


さて、マス目が光った所で次は背景が寂しくなってきたのでAssetStoreから背景モデルを持ってきて配置してみよう!からやっていきます。

バックナンバー:
【Unity】タクティクスSRPGぽいものを作ろう! - ①マップチップを配置しよう! - Exception[0]

【Unity】タクティクスSRPGぽいものを作ろう! - ①マップチップを配置しよう!

前回からちょっと間が空きましたあがいです、こんばんわ。

さて、今回は前回の告知通りにタクティクスぽいSRPGを作っていきます。

SRPGといっても今回はあくまで戦闘部分のみ、を作ります。


f:id:acguychan:20140921042759j:plain

目指せ魔人学園!!

※今回は前回と違いスクリプトを扱う部分が多くなります。なので、C#を多少勉強しておくと理解がスムーズになるかもしれません。


タクティクスといえば、マス目から。今回はマップチップを配置しようと思います。


事前準備に、Projectのフォルダをこのような構成で作っておきます。

f:id:acguychan:20140921043307j:plain

Scripts/Battle 内にBattleBase,BattleMainの2つのスクリプトファイルを作ります。

f:id:acguychan:20140921043501j:plain

BattleMain内のスクリプトの以下を追記。

public class BattleMain : BattleBase {

  protected int _sceneTask;

  // Use this for initialization
  void Start () {
    // 配置するプレハブの読み込み 
    GameObject prefab = (GameObject) Resources.Load("Objects/GrassTile");
    // 配置元のオブジェクト指定 
    GameObject stageObject = GameObject.FindWithTag("Stage");
    // タイル配置
    for(int i = 0; i < 7 ; i ++) {
      for(int j = 0; j < 7 ; j ++) {

        Vector3 tile_pos = new Vector3(
            0 + prefab.transform.localScale.x * i,
            0,
            0 + prefab.transform.localScale.z * j
            
          );
        
        if(prefab != null){
          // プレハブの複製 
          GameObject instant_object =
            (GameObject) GameObject.Instantiate(prefab,
                                                tile_pos, Quaternion.identity);
          // 生成元の下に複製したプレハブをくっつける 
          instant_object.transform.parent = stageObject.transform;
        }
      }
    }
  }
  
  // Update is called once per frame
  void Update () {
  
  }
}

BattleBase はそのままで大丈夫です。


次に、Hierarchyで図のように配置します。
f:id:acguychan:20140921045525j:plain

空のGameObjectのCommonを作り、その下に同じく空のGameObjectのGameManagerを配置。
空のGameObjectのLightを作り、その下にDirectional lightを作り配置。
空のGameObjectのCameraを作り、その下にMain Cameraを配置。

空のGameObjectのStageを作り、Inspector/TagでStageを指定。
f:id:acguychan:20140921050133j:plain

※Tagの追加の仕方
※TagからAdd Tag..を選びElement~~にStageを追加。

GameManager内に先ほど作った Scripts/Battle/BattleMainを追加する。
f:id:acguychan:20140921052626j:plain


これでマップチップの生成準備が整ったので次はマップチップの方を作ります。


Materials/Tileの中に、新規MaterialのGrassMaterialを作ります。
f:id:acguychan:20140921050757j:plain

※後々使いそうなので何種類かマップチップ作ってます。
※Texturesフォルダの中にはMaterialで指定するテクスチャファイルを入れて下さい。

Resorces/Objectsの中に、空のGameObjectのGrassTileを作ります。
f:id:acguychan:20140921051237j:plain

※マップチップとなるので、Scaleは控えめにするといいかも

GrassMaterialに好きなテクスチャを張って(うちは草画像にしてます)GrassTileに追加します。


これで準備が整いました、実行します。

f:id:acguychan:20140921051419j:plain

こんな感じに配置されたでしょうか?

BattleMain内のfor文の7が現在配置しているマップチップの数、Resources.Load("Objects/GrassTile")が読み込んでいるマップチップとなるので、
これをランダムや好きなように変えてみるとどんな風に配置されていくのがわかると思います。



さて、次回はカーソルでマス目を指定する所からやっていきます。

【Unity】スマートボールぽいものを作ろう! - ⑤Particleを使ってみよう!

前回までのあらすじ。

プロペラや反射板をつけました。

 

それでは今回はゴールを作っていきましょう。

空のGameObjectを作り、名前をGoalに変更します。

Goalオブジェクトの下に3枚のWallオブジェクトを追加し、凹の形のオブジェクトを作ります。

 

f:id:acguychan:20140910213301j:plain

 

このままだとただ凹部分に入るだけになるので、ゴール判定となる処理をつけましょう。

Goalオブジェクトの下に空のGameObjectを作り、その中で

Component => Physics => Box Colliderを作ります。名前をGoalColliderに変更します。

Transformでサイズを周りの板よりも細くし、配置します。

そして、GoalColliderのisTriggerにチェックを入れます。

 

f:id:acguychan:20140910214812j:plain

 

緑の立方体がGoalColliderになります。

 

次に、ゴールした際のパーティクル演出を作っていきます。

自分で爆発の演出を1から作る方法もありますが今回は既に用意されているサンプルのParticleを使ってみます。

Assets => Import Packge => Particles を選択。

そのままImport。

f:id:acguychan:20140910220040j:plain

 

ProjectウインドウのAssetsにStandard AssetsとParticlesが追加されました。

次にこの中のParticles => Misc => FireworksをHierarchyに追加し、更にそれを

Resorces => Objects に追加しPrefab化します。名前をGoalEffectに。

 

次に、Scriptsに新規にスクリプトファイルを作成し、Goalと名前を変更。

スクリプト内に以下を記述。

 

 

このスクリプトをGoalColliderに追加します。

これでGoalColliderにボールが当たればパーティクルが生成されます。

 

それでは再生してみましょう。

 

f:id:acguychan:20140910233148g:plain

 

 ゴールに入ったら無事花火パーティクルが再生されました。

こんな感じに、何かをトリガーにしてエフェクトを出す方法はよく使われます。

 

ひとまずこれで、5回に渡ったスマートボールぽいものが完成しました。

後半、少々説明を省いた所がありますが、そこは試行錯誤してやってみてください。

 

最後に、これまで作成したスマートボールを置いておきます。

https://googledrive.com/host/0B_vkp_uGdsV6dzNCdEhzaFJ3dkU/build.html

 ※操作方法:左クリックでボールが出ます

 

Unity Web Playerをインストールする
ゲームをプレイするには Unity Web Player が必要です。

 

このように誰かに公開しやすいというのもUnityの利点ですね。

UnityはGUIが特徴的ですが、何がどのように何ができる事を理解すればとても使いやすいので是非興味がわいたら触ってみてください

 

次回は、魔人学園やディスガイアでおなじみ、斜め見下ろしのタクティクス風シミュレーションRPGの基本を作っていきたいと思います

 

関連記事一覧:

【Unity】スマートボールぽいものを作ろう! - ①RigidbodyとCollider - Exception[0]

【Unity】スマートボールぽいものを作ろう! - ②TextureとMaterial - Exception[0]

【Unity】スマートボールぽいものを作ろう! - ③PrefabからInstantiateで動的生成 - Exception[0]

【Unity】スマートボールぽいものを作ろう! - ④isTriggerとOnTriggerEnter - Exception[0]

 

【Unity】スマートボールぽいものを作ろう! - ④isTriggerとOnTriggerEnter

前回までのあらすじ。

ボールが発射できるようになりました。

 

今回は盤面が寂しいのでギミックを追加していきましょう。

まず釘!

 

GameObject => Create Other => Cylinder で円柱を作ります。

TransformのRotationで盤面に立つように値を調整。Scaleでお好みのでかさにしましょう。

オブジェクト名をCylinderからNailに変更してResorces => Objects にPrefab化。

PrefabからNailオブジェクトを適当に配置してみましょう。

 

f:id:acguychan:20140910060557g:plain

 

こんな感じになりました。

 

次にプロペラを作っていきましょう。

まずGameObject => Create Emptyで空のGameObjectを作り、その下に2枚

GameObject => Create Other =>Cubeで新規に立方体を作り、平べったい板になるようにScaleの値を調整します。

 

f:id:acguychan:20140910061232j:plain

 

Properaオブジェクトの下に板を配置しているのがポイントです。

Properaオブジェクトの方にRigidbodyを追加します。Cubeの方ではないので気をつけてください。

そしてRigidbodyのInspectorでConstraintsを以下のように設定。

 

f:id:acguychan:20140910061528j:plain

 

Freeze~~は、その軸の移動を制限するという設定です。

上記の場合だと、このProperaオブジェクトはチェックの入っていないZ軸の回転のみ動作するようになります。

 

設定が終わったらProperaをPrefab化して、適当に盤面に配置しちゃいましょう。

 

f:id:acguychan:20140910061921g:plain

 

プロペラを使った仕掛けを作れれば面白そうですねー。

 

次に反射板を作ります。

 

GameObject => Create Other =>Cubeで新規に立方体を作り、平べったい板になるようにScaleの値を調整します。(Wallの使い回しでもいいです)

その板の名前をRefrectに変更。

 

ProjectウインドウのScriptsでShoterスクリプトと同じ手順で新規にRefrectスクリプトを作ります。

そのRefrectスクリプト内に以下を追加。

 

 

先ほど作ったRefrectオブジェクトにスクリプトを追加。

その後、RefrectオブジェクトのBox ColliderのisTriggerにチェック

 

f:id:acguychan:20140910065301j:plain

 

このisTriggerは、他のオブジェクトとの衝突時の物理演算がされなくなる代わりに、衝突時に特定のメソッドを呼び出せるようになります。

これにチェックを入れることにより、ボールとぶつかると先ほどRefrectスクリプトに記述したOnTriggerEnterメソッドが呼ばれる事になります。

これは衝突時に一度だけ呼ばれるメソッドです。

 

上記の設定ができたら反射板を良さげなところに配置して実行してみましょう。

 

f:id:acguychan:20140910070338g:plain

 

たまに画面外にぶっとびますがそこはご愛嬌。

 

最後にゴールを作って次回で締めようと思います。

 

 

関連記事一覧:

【Unity】スマートボールぽいものを作ろう! - ①RigidbodyとCollider - Exception[0]

【Unity】スマートボールぽいものを作ろう! - ②TextureとMaterial - Exception[0]

【Unity】スマートボールぽいものを作ろう! - ③PrefabからInstantiateで動的生成 - Exception[0]

【Unity】スマートボールぽいものを作ろう! - ⑤Particleを使ってみよう! - Exception[0]

【Unity】スマートボールぽいものを作ろう! - ③PrefabからInstantiateで動的生成

前回までのあらすじ。

土台と四隅を作りました。

 

 

更にそこから、Wallを何本か足し

 

f:id:acguychan:20140909002837j:plain

 

こんな感じになりました。

 

それでは今回はボールを飛ばしてみましょう。

まず、下準備としてHierarchyにあるBallオブジェクトを

Resources => Objects にPrefab化しておきます。

 

そして同じくAssetsツリーにあるScriptsフォルダを開き、右クリック => Create => C#Script を選びファイルを作ります。

名前はShoterとでもつけて下さい。

 

Shoterファイルをダブルクリックすると、Unity付属のエディタのMonoDevelopが起動します。

そこのUpdate()内を以下のように

 

※ create_shoter_vec内の座標はボールが出る位置(画像で言う右下の位置)の座標値をいれてください。

 

これで、ボールの生成メソッドはできました。

次に、このメソッドの呼び出し元を作ります。

 

ツールバー、GameObject => Create Emptyで空のGameObjectを作って下さい。

名前をMainObjectに変更。

 

そして、Materialと同じ要領でMainObjectにShoterのスクリプトを追加します。

 

f:id:acguychan:20140909004930g:plain

 

これで、Hierarchyに配置されているMainObject内のShoterスクリプトのUpdateメソッド内に書いてある左クリックでボールを生成するメソッドが反応するようになりました!

 

それでは実行してみましょう。

 

Gameウインドウ内で左クリック連打!

 

f:id:acguychan:20140909005715g:plain

 

…このようにボールが生成されたでしょうか?

もし生成されない場合は、Prefab化したBallオブジェクトの位置が違う・ボール生成時の座標がズレている などの原因が考えられるので怪しい所を修正していきましょう。

 

次はプロペラやクギなどの盤面ギミックを作っていきます。

 

関連記事一覧:

【Unity】スマートボールぽいものを作ろう! - ①RigidbodyとCollider - Exception[0]

【Unity】スマートボールぽいものを作ろう! - ②TextureとMaterial - Exception[0]

【Unity】スマートボールぽいものを作ろう! - ④isTriggerとOnTriggerEnter - Exception[0]

【Unity】スマートボールぽいものを作ろう! - ⑤Particleを使ってみよう! - Exception[0]