【Unity】タクティクスSRPGぽいものを作ろう! - ②マス目を光らそう! ~mousePosition&Raycast~
未だに冷房を23度にしてガンガン部屋を冷やしているあがいです、こんばんわ。
翌朝凍えてます。
前回までのあらすじ
スクリプトからマップチップを配置する事ができました。
②マス目を光らそう! ~mousePosition&Raycast~
さて、今回はマウスで選択しているマス目を光らせる演出を入れていきます。
まず、ScriptsフォルダにStageフォルダを作ります。
その中にStageBaseスクリプトファイルを作ります。
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(配置に使っているマップチップ)に追加します。
実行してみます。
※カメラのRotationをマス目に対してX軸やY軸をいじって斜めにするとそれっぽく見えます。
…選択したマス目の色が変われば成功です。
最後に、現在のカメラの投影方法のままだと奥行きがありすぎて、目標の魔人学園ぽいものは使いづらいので、
透視投影から平行投影に変更します。
透視投影:遠近感があり、奥に行くほど小さくなり手前にくるほど大きくなる。
平行投影:遠近感がなく、どの距離でも同一の大きさ。
Hierarchy/Camera/Main Cameraを選択し、InspectorからCamera/ProjectionのPerspective(透視投影)をOrthographic(平行投影)に変更します。
3Dモデルは使うけど2Dぽいゲームを作りたい!という場合は平行投影のほうが良さ気です。
さて、マス目が光った所で次は背景が寂しくなってきたのでAssetStoreから背景モデルを持ってきて配置してみよう!からやっていきます。
バックナンバー:
【Unity】タクティクスSRPGぽいものを作ろう! - ①マップチップを配置しよう! - Exception[0]