【スポンサーリンク】

【Unity】 I◯◯Handlerインターフェースメソッドが動かない時のチェックリスト

どれもちょくちょくやらかして時間を無駄にした経験があるのでメモ

  • チェック1.メソッド名は正しいか
  • チェック2.対象のゲームオブジェクトにCollider(またはCollider 2D)はついているか
  • チェック3.シーンにEventSystemはあるか
  • チェック4.CameraにPhysics Raycaster(またはPhysics 2D Raycaster)はついているか

個人的にはチェック4が一番忘れがち。

【Unity5.3】JsonUtility使い方まとめ

JsonUtilityとは?

オブジェクトをJSON形式の文字列にしたり、JSON形式の文字列をオブジェクトにしたりできるJSONパーサ。今までMiniJSON、SimpleJSONなど外部ライブラリがあったが、Unity5.3で公式にJSONパーサが実装された。

変換メソッドについて

オブジェクト → JSONにしたい場合は、
string json = JsonUtility.ToJson(myObject);

JSON → オブジェクトにしたい場合は、
MyObject myObject = JsonUtility.FromJson(json);

サンプルコード

変換対象クラスのサンプル
using UnityEngine;
using System.Collections;

[System.Serializable]
class MyObject {
	public Vector3 vector;
	public int[] intArray;
	[SerializeField]
	private float privateFloat;

	public float PrivateFloat {
		get {return privateFloat;}
		set {privateFloat = value;}
	}
}
確認用コード(適当なゲームオブジェクトに貼り付ける)
using UnityEngine;
using System.Collections;

public class JSONTest : MonoBehaviour {

	void Start () {
		MyObject myObject = new MyObject();
		myObject.vector = new Vector3(1, 2, 3);
		myObject.intArray = new int[3];
		myObject.intArray[0] = 4;
		myObject.intArray[1] = 5;
		myObject.intArray[2] = 6;
		myObject.PrivateFloat = 1.23f; /* private変数は[SerializeField]がないと保存されない */

		/* オブジェクトからJSONへの変換 */
		string json = JsonUtility.ToJson(myObject);
		Debug.Log(json);

		/* JSONからオブジェクトへの変換(その1) */
		MyObject obj1 = JsonUtility.FromJson<MyObject>(json);
		Debug.Log(
			obj1.vector + ", [" +
			obj1.intArray[0] + ", " + obj1.intArray[1] + ", " + obj1.intArray[2] + "], " +
			obj1.PrivateFloat
		);

		/* JSONからオブジェクトへの変換(その2) */
		MyObject obj2 = new MyObject(); //初期化が必要
		JsonUtility.FromJsonOverwrite(json, obj2); //obj2が初期化されてないとエラーになる
		Debug.Log(
			obj2.vector + ", [" +
			obj2.intArray[0] + ", " + obj2.intArray[1] + ", " + obj2.intArray[2] + "], " +
			obj2.PrivateFloat
		);
	}

}

実行結果

きちんと変換できてます。
f:id:Phalusamil:20151210200117p:plain

その他メモ

変換対象クラスの4行目にある[System.Serializable]はあってもなくても動作する。が、あったほうが高速らしい。

JSONに変換される変数はpublic変数、または[SerializeField]がついている変数だけ。なのでprivate変数を変換したい時はサンプルにあるように[SerializeField]をつける。

JSON → オブジェクトにする方法としてFromJsonOverwriteメソッドもある。
公式では、すでにインスタンス化されてるオブジェクトに入れたい時はこっちを使うと書いてあったが、FromJsonメソッドでも正しく動作した。
もしかしたら、メモリ効率や速度などに利点があるのかもしれないので、一応FromJsonOverwriteメソッドを使ったほうがいいかもしれない。

参考文献

docs.google.com

【CodeIgniter】Hostingerのレンタルサーバで.htaccess設定

Hostingerのレンタルサーバは.htaccessが使えると公式で言っているので、CodeIgniterのindex.phpを消すためにいつもの.htaccessを使ってみたがうまくいかなかった。

いろいろと探してみたところ、次の.htaccessを使えばうまく動作することが分かった。

RewriteBase /
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/system.*
RewriteRule ^(.*)$ index.php?/$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?/$1 [L]

【Unity5】Standard Assetsで三人称視点のキャラクターをコーディングなしで作成する

準備

メニューのAssets → Inport Packageから下記をインポートする。

  • Cameras
  • Characters
  • Prototyping(動作確認用)

f:id:Phalusamil:20151014061806p:plain

次にProjectのAssets → Standard Assets → Characters → ThirdPersonCharacter → PrefabsからThirdPersonControllerをシーンに追加する。

f:id:Phalusamil:20151014061832p:plain

そして動作確認用に床が必要なのでAssets → Standard Assets → Prototyping → PrefabsからFloorPrototype64x01x64を設置する。

f:id:Phalusamil:20151014061843p:plain

最後に、カメラを設置するのでmain cameraをシーンから消して準備完了。

(以下視点操作の方法で実装が分岐します。)

マウスによる視点操作の場合

Assets → Standard Assets → Cameras → PrefabsからFreeLookCameraRigをシーンに追加する。

f:id:Phalusamil:20151014061941p:plain

そしてFreeLookCam(Script)コンポーネントのパラメータを次のようにする。

f:id:Phalusamil:20151014061901p:plain

TargetをThirdPersonControllerにし、Move Speed、Turn Speed、Turn Smoothingの三つを調整する。
Move Speedはカメラの追従速度。
Turn Speedはマウスを動かした際のカメラの回転量。
Turn Smoothingはカメラの回転速度。大きな値、または0にすればマウスを動かした分だけ瞬時に回転する。

なおLock Cursorにチェックを入れれば、実行中はマウスカーソルが動かなくなる。(※下記のサンプルはチェックなし)

サンプル

f:id:Phalusamil:20151014061917g:plain

自動的に視点変更する場合

Assets → Standard Assets → Cameras → PrefabsからMultipurposeCameraRigをシーンに追加する。

f:id:Phalusamil:20151014062158p:plain

そしてAutoCam(Script)コンポーネントのパラメータを次のようにする。

f:id:Phalusamil:20151014062633p:plain

TargetをThirdPersonControllerにし、Move Speed、Turn Speed、Spin Turn Limitの三つを調整する。
Move Speedはカメラの追従速度。
Turn Speedはカメラの回転速度。
Spin Turn Limitはカメラが一度に回転する角度の上限。360にしておけばスムーズに動く。

サンプル

f:id:Phalusamil:20151014062223g:plain

参考文献

Standard Assets全般について以下のサイトを参考にしました。tsubakit1.hateblo.jp

はてなブログのSEOが強すぎて驚いた話

※注意書き

色々なブログシステムで検証を行ったわけではありません。

私の体感で「はてブロのSEOすげぇ」と思っただけです。

本題

前日、こんなタイトルの記事をはてなブログに投稿しました。

【Unity 2D】あるオブジェクトを指定オブジェクトの方向に向ける - 備忘録

この記事を投稿してから5分後くらいに、なんとなくタイトルをコピペしてgoogle検索したところ、

すでに一番上に表示されていた

という事件(?)が発生しました。

ブログ初心者の私は、

「おー最近のブログシステムはすごいんだなぁ。」

くらいにしか思いませんでしたが、5時間後くらいに

「・・・普通に検索しても上位にくるのか?」

と気になったので検証してみました。

まずはこんな感じに検索。

「unity 2d オブジェクト 向ける」

結果は・・・

f:id:Phalusamil:20151003113740p:plain

おーすごい。(母数たったの11000件ですが。)

あとは単語削ったり変えたりしてみました。

「unity オブジェクト 向ける」 → 6位
「unity 2d 向ける」 → 3位
「unity 向ける」 → 8位
「unity 2d オブジェクト 向きを変える」 → 10位

ヒットしたページの母数は数万件程度ですが、なかなかの結果です。

やはり、

記事を投稿した日に上位にくる

ってところが良いですね。

ただし、
単純に私がブログとかSEOに詳しくないだけでこんなの当たり前
という可能性も十分にあるので悪しからず。

【スポンサーリンク】