デバスバスター

わたすのメモ帳を盗み見るあなた的なスタンス

ローカル環境のWebアプリケーションにホスト名でアクセスする設定

例えばCodeigniterで構築したサイトとか、ローカル環境のWebアプリケーションにhttp://hogehoge.local/みたいにホスト名でアクセスする設定を記述す。

環境

OS X 10.9.4
僕の家

手順

1. VirtualHostの設定

apacheのVirtualHostを設定する。
/etc/apache2/httpd.confにこんな感じで追記。

NameVirtualHost *:80

<VirtualHost *:80>
    DocumentRoot "/Users/boku/workspace/hogehoge/public"
    ServerName hogehoge.local

    <Directory "/Users/boku/workspace/hogehoge/public">
        DirectoryIndex index.php
        order deny,allow
        allow from All
        Options FollowSymLinks
        AllowOverride All
    </Directory>
</VirtualHost>

追記したらapacheを再起動

sudo apachectl restart

2. /etc/hostsを設定

ホスト名でアクセスできるように設定す。

例えばこんな感じ

127.0.0.1 hogehoge.local

以上。

ブラウザ上からhttp://hogehoge.local/のような感じでアクセスできるようになる。はず。

リモートサーバー上のmysqlのdbをまるごとコピーしてローカルに反映する方法

まずリモート上でコピー

mysqldump -u [username] -p [dbname] > /remote/dbname.dump

scpでサーバーからコピー

scp username@hoge.com:/remote/dbname.dump /local/save/directory 

ローカルのmysqlに反映

mysql -u [username] -p [dbname] < /local/save/directory/dbname.dump

たぶんもっと簡単な方法ある。

CodeigniterでMysqlのエラー文が読みたかったら

クエリ実行した後にこの文を入れよ

log_message ('error', $this->db->_error_message());

さらば救われん。

UnityでSkydome

裏面にテクスチャ表示するシェーダをSphereに貼ってあげるとこんな感じのスカイドームが作れる。

f:id:cosmocleaner:20140501215736g:plain

これは3つの球体に空、雲、山のテクスチャをそれぞれ貼って、雲テクスチャが貼ってある球体を回している。

以下シェーダのコード

Shader "Custom/Skydome" {
    Properties {
        _HogeTex ( "Base", 2D ) = "white" {}
    }

    SubShader {
        Tags {"Queue"="Transparent"}
        Cull Front
    
        CGPROGRAM

        #pragma surface surf Lambert alpha

        sampler2D _HogeTex;

        struct Input {
            float2 uv_HogeTex;
        };

        void surf( Input IN, inout SurfaceOutput o ) {
            half4 color = tex2D( _HogeTex, IN.uv_HogeTex );
            o.Albedo = color.rgb;
            o.Alpha = color.a;
        }

        ENDCG
    }

    FallBack "Diffuse"
}

NGUIでクリックが効かないな〜と思ったらチェックすべきポイント

CameraのClipping Planesの値を確認すべし。

f:id:cosmocleaner:20140501194549p:plain

UICameraによって飛ぶRaycastの範囲はこの間のみ。この範囲内にコライダーがないとRaycastが当たらないため、クリックなどのメッセージが飛ばない。

GameObjectをDestroyしたら可能であればDetachChildrenすべし

UnityでGameObjectをDestroyすると即時に消されるわけではなく、Destroyを実行したフレームでは残っている。 単にGameObjectを消すだけならさほど問題ないが、 例えばNGUIのUITableで子オブジェクトを整列させているような時、消したはずの子GameObjectがくっついていてReposition()しても思うように整列されない、といったことが起こる。

そんな時、親のGameObjectで子を削除するのと同時にtransform.DetachChildrenしてあげると即親子関係が解かれるので新たに子を生成してReposition()すると想定通り動作する。

ただしDetachChildrenしてしまうと全ての子との関係が解かれてしまうので注意。

スクリプト上でTransform.parentを変更する時はスケール値が変わるので注意

例えば、PrefabをInstantiateしようと思った時

GameObject obj = Instantiate(prefab) as GameObject;
// この時、objのlocalScaleは ( 1, 1, 1 )で、parentはrootになっている
obj.transform.parent = this.transform;
// この時、objのlocalScaleはparentに応じて変更されている
obj.transform.localScale = Vector3.one;
// こんな感じで直してあげる必要がある