【Unity】Unityちゃんの使い方・アクションを確認する方法

Unityちゃんの使い方・アクションを確認する方法

Unityちゃんを公式ページからダウンロードして、Unityにインストールするところまで出来ました。

Unityをインストールすることが出来たら、Unityちゃんの使い方が知りたい!
しかし、ダウンロードはしてみたものの、使い方がよく分からないという人も多いかも…という事で、
Unityちゃんにデフォルトで準備されている動作の確認を行ってみたいと思います。

Unityちゃんのデフォルト動作確認

早速、Unityちゃんで準備されているアクションやポーズのサンプルシーンを確認したいと思います。

Unityを起動したら、
「project」ウィンドウの「Assets」→「UnityChan」→「Scenes」を開くと、
「Scenes」フォルダの中に、3つのUnityのロゴの形をしたファイル
ActionCheck」「ARPoseTest」「Locomotion」が入っています。

Unityちゃん「Scenes」

ActionCheck」はアクション、「ARPoseTest」はポーズの確認が出来ます。
Locomotion」では実際にキー操作で走ったり、ジャンプしたりする動作の確認が出来ます。

Unityちゃんの使い方①アクションを確認

「ActionCheck」でアクションの確認をします。

まず「ActionCheck」をダブルクリックすると、
「Hierarchy」ウィンドウとメインウィンドウにUnityちゃんが追加されます。

メインウィンドウのタブを「Game」に切り替え、上部の再生ボタンをクリックすると、
アクションを確認できる状態になります。

「スペース」キーや「↑」「↓」キーを押すと、
準備されているアクションを順番に実行することができます。

Unityちゃんの使い方①アクションを確認

画面左に表示されているボタン状のものをクリックすると、
Unityちゃんに準備されている表情のアクションを確認することができます。

Unityちゃんの使い方②ポーズを確認

「ARPoseTest」でポーズの確認をします。

まず「ARPoseTest」をダブルクリックすると、
「Hierarchy」ウィンドウとメインウィンドウにUnityちゃんが追加されます。

メインウィンドウのタブを「Game」に切り替え、上部の再生ボタンをクリックすると、
アクションを確認できる状態になります。

「スペース」キーや「↑」「↓」キーを押すと、
準備されているポーズを順番に実行することができます。

Unityちゃんの使い方②ポーズを確認

画面左に表示されているボタン状のものをクリックすると、
Unityちゃんに準備されている表情をポーズに合わせて確認することができます。

Unityちゃんの使い方③操作の確認

「Locomotion」でUnityちゃんの操作の確認をします。
キー操作でUnityちゃんを走り回らせることができるデモです。

まず「Locomotion」をダブルクリックすると、
「Hierarchy」ウィンドウとメインウィンドウにUnityちゃんが追加されます。

メインウィンドウのタブを「Game」に切り替え、上部の再生ボタンをクリックすると、
アクションを確認できる状態になります。

「↑」「↓」「←」「→」キーでUnityちゃんを操作する事ができます。

「↑」キーで走りながら「スペース」キーを押すと、Unityちゃんがジャンプします。
Unityちゃん静止時に「スペース」キーを押すと伸びをします。

Unityちゃんの使い方③操作の確認

「Ctrl」キーを押している間か、マウスの左クリック中だけカメラアングルが正面に切り替わります。

Unityちゃんの使い方まとめ

とりあえず、Unityを勉強する前に、Unityちゃんを使って、Unityでどんな事ができるのか、
なんとなく知ることができました。

今後、時間があったら、Unityちゃんで別の動きを作ったりしてみたいと思います。

【PHP】正規表現で文字列を置換する関数preg_replace()

PHPで、正規表現で条件を指定して文字列の置換をしたい場合、
PHPには、preg_replace()という関数が準備されています。

preg_replace(引数1, 引数2, 引数3, 引数4(省略可))
  • 引数1…検索するパターン。正規表現で指定する。
  • 引数2…置換後のテキストを指定する。
  • 引数3…置換前の元テキスト
  • 引数4…置換を行う最大回数(省略可)

preg_replace()で文字列を置換してみる

まずは、試しにpreg_replace()を使って文字列を置換してみる。

文字列「進撃の巨乳」を「進撃の巨人」に修正したい為、
「巨乳」→「巨人」に置換してみる。

// 変数代入
$string = '進撃の巨乳';
$pattern = '/巨乳/';
$replacement = '巨人';

// ①置換前
echo $string;

// ②置換後
echo preg_replace($pattern, $replacement, $string);
  • ①置換前:進撃の巨乳
  • ②置換後:進撃の巨人

preg_replace()は指定文字列すべてが対象

引数4で置換を行う回数を指定しない限りは、
全ての指定文字列が置換の対象となります。

$string = '巨乳好きな俺の彼女も、巨乳な彼女の巨乳の友達も「進撃の巨乳」が好き。';
$pattern = '/巨乳/';
$replacement = '巨人';

// ①置換前
echo $string;

// ②置換後
echo preg_replace($pattern, $replacement, $string);
  • ①置換前:巨乳好きな俺の彼女も、巨乳な彼女の巨乳の友達も「進撃の巨乳」が好き。
  • ②置換後:巨人好きな俺の彼女も、巨人な彼女の巨人の友達も「進撃の巨人」が好き。

preg_replace() 正規表現で置換文字列の条件を指定

preg_replace()は指定文字列すべてが対象となってしまう為、
特定の文字列のみ置換の対象としたい場合は、正規表現で条件を指定します。

例えば、”巨乳好きな俺の彼女も、巨乳な彼女の巨乳の友達も「進撃の巨乳」が好き。”
という文字列のうち、行の最初の「巨乳」のみを「巨人」に変更したい場合の例。

“行の最初に一致する文字列”という条件指定’^'を使います。

例えば今回の文字列の”行の最初に一致する文字列”を指定したい場合は、
‘/^巨乳/’と記述します。

$string = '巨乳好きな俺の彼女も、巨乳な彼女の巨乳の友達も「進撃の巨乳」が好き。';
$pattern = '/^巨乳/';
$replacement = '巨人';

// ①置換前
echo $string;

// ②置換後
echo preg_replace($pattern, $replacement, $string);
  • ①置換前:巨乳好きな俺の彼女も、巨乳な彼女の巨乳の友達も「進撃の巨乳」が好き。
  • ②置換後:巨人好きな俺の彼女も、巨乳な彼女の巨乳の友達も「進撃の巨乳」が好き。

preg_replace()は正規表現で(○○~始まる)置換文字列を指定

たくさんの文字列”巨乳”がある中から、
“進撃の巨乳”のみ”進撃の巨人”に置換したい場合の例。

単純に”進撃の巨乳”→”進撃の巨人”に置換してもよいのですが、それでは面白くないので、
preg_replace()で準備されている特殊機能を使ってみます。

preg_replace()の引数2では$n形式で()内の文字列をサブパターンとして持つ事ができます。
1つ目の()は$1、2つ目の()は$2といった感じです。

$string = '巨乳好きな俺の彼女も、巨乳な彼女の巨乳の友達も「進撃の巨乳」が好き。進撃の巨乳も巨乳もだぁいすき!';
$pattern = '/(進撃の)巨乳/';
$replacement = '$1巨人';

// ①置換前
echo $string;

// ②置換後
echo preg_replace($pattern, $replacement, $string);
  • ①置換前:巨乳好きな俺の彼女も、巨乳な彼女の巨乳の友達も「進撃の巨乳」が好き。進撃の巨乳も巨乳もだぁいすき!
  • ②置換後:巨乳好きな俺の彼女も、巨乳な彼女の巨乳の友達も「進撃の巨人」が好き。進撃の巨人も巨乳もだぁいすき!

【PHP】文字列をスペースで分割し配列に入れる関数

文字列の全角スペースを半角スペースに変換して、その半角スペースごとに文字列を分割して単語ごとに配列に入れる処理を考えてみたのでメモ。

全角スペースと半角スペースが含まれる場合があるので、一旦全角スペースを半角スペースに変換して、スペースを半角スペースに統一し、半角スペースを基準として文字列を分割して配列に入れます

全角スペースを半角に変換して、スペースで分割し配列に入れる関数

▼オブジェクト型クラス編

class ClassXXX{
	private $convert_txt;
	private $arr_txt;
	
	public function spaceSeparate($txt){
		$this->convert_txt = mb_convert_kana($txt, 's', 'UTF-8');

		$this->arr_txt = preg_split('/[\s]+/', $this->convert_txt, -1, PREG_SPLIT_NO_EMPTY);
		return $this->arr_txt;
	}
}

▼手続き型関数編

function spaceConvert($txt){
	$txt = mb_convert_kana($txt, 's', 'UTF-8');

	$arr_txt = preg_split('/[\s]+/', $txt, -1, PREG_SPLIT_NO_EMPTY);
	return $arr_txt;
}

サーバーによっては”mb_convert_kana”が文字化けする事があるので、引数で文字コードを指定すると良いです。

IE11がIEとして認識されないトラブルについて

IE11がIEとして認識されないトラブルについて

ユーザーエージェントで各ブラウザを認識し、
ブラウザによって処理の内容を振り分ける事は良くあると思います。

今回、Internet ExplorerのバージョンがIE10からIE11にバージョンアップした事により、
IE11でページを見た際に不具合が確認されました。

ユーザーエージェント文字列の変更

<?php echo $_SERVER["HTTP_USER_AGENT"]; ?>

以前のバージョンIE10と新バージョンIE11のユーザーエージェントをPHPで出力して比較したところ、

【IE10】
Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)

【IE11】
Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko

IE11ではブラウザトークン(MSIE 10.0)がなくなり、
バージョントークン(rv:11.0)に変更されていました。

詳しくはマイクロソフトの公式ページで確認して下さい。

ユーザーエージェントを取得した文字列からIEとして認識する文字列の見直しが必要となります。

ユーザーエージェント文字列一覧

参考までに、IEのユーザーエージェント文字列一覧を集めてみました。

▼Windows8 IE11 32bit
Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko

▼Windows7 IE11 32bit
Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko

▼Windows7 IE11 64bit
Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko

▼Windows7 IE10 64bit
Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)

▼Windows7 IE8 64bit
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident/4.0; GTB7.5; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)

【WEB高速化】外部ファイル呼び出し時の二重リクエストを見直す

WEBページの表示速度を早くしたいという事で、効果がある対策があったのでメモ。

外部ファイルの呼び出し処理で、HTTPによるリクエスト再度行われていないか確認する。

例えば、PHPの関数file_get_contents()などで、外部ファイルを読み込む際に、http://~と自分自身のURLを絶対バスで記述して呼び出していないか確認する。

自分自身のURLの外部ファイルを絶対パスで読み込むと、外部ファイルを呼び出す為に、再びHTTPリクエストをかけることになり、この二重リクエストがムダなWebアクセスとなる。

【本来の処理の流れ】

  • ①WebブラウザがリクエストをWebサーバーへ送る
  • ②Webサーバーがリクエストを解析して処理する
  • ③WebサーバーがレスポンスをWebブラウザへ返信する
  • ④Webブラウザが受信データを解析して表示する

【二重リクエストでの処理の流れ】

  • ①WebブラウザがリクエストをWebサーバーへ送る
  • ②Webサーバーがリクエストを解析して処理する
  • 処理の中のHTTPリクエストを発行する
  • 再びWebサーバーへアクセスする
  • ⑤WebサーバーがレスポンスをWebブラウザへ返信する
  • ⑥Webブラウザが受信データを解析して表示する

この二重リクエストのムダを見直す事により処理速度を改善する。

【改善方法】

■改善前

file_get_contents('http://www.ore-memo.com/inc/menu.html');

■改善後

file_get_contents($_SERVER['DOCUMENT_ROOT'].'/inc/menu.html');

自分自身のURLを指定してfile_get_contentsを呼び出している箇所を$_SERVER['DOCUMENT_ROOT']getenv(‘DOCUMENT_ROOT’)に記述を変える事により、サーバ内部で処理を完結させることができる。

このように二重リクエストを解消してあげるだけで、WEBページの表示速度を早くする事ができます。

あと、$_SERVER['DOCUMENT_ROOT']getenv(‘DOCUMENT_ROOT’)
のどちらを利用するかという事になります。

PHPをUNIXのコマンドとして使うような場合は、新たにパスを取得する必要があるので関数getenv()を利用することに限定されますが、一般的なブラウザ経由(apache経由)ならすでに環境変数として習得されている$_SERVER[]を利用する方が早いという結論になりました。

一般的なWEBサーバなら$_SERVER['DOCUMENT_ROOT']が早い!

【jQuery】スマホサイトの背景画像を画面横幅に合わせてリサイズするサンプルコード

スマホサイトで画面の向きが変わる時に背景画像と画面の向きが変わった事によりリサイズされた親要素の大きさのズレを解消する処理を自作したのでメモ。

【仕様】
・画面の向き変更後に画面横幅を基準に、親要素と背景画像をリサイズする。

bg_resize

⇒デモ(スマホ実機で要確認)

【JS】

$(function(){
	var classBgResize = function(block_pass, sw) {
		var block_cnt = block_pass.length;
		var arr_img = new Array(block_cnt);
		var bg_img = new Array(block_cnt);
		var bg_img_name = new Array(block_cnt);
		
		for(var i=0 ; i<=(block_cnt-1) ; i++){
			bg_img[i] = block_pass.eq(i).css("background-image");
			bg_img_name[i] = bg_img[i].substring(4, bg_img[i].length - 1);
		
			arr_img[i] = new Image();
			arr_img[i].src = bg_img_name[i];
		}
		
		arr_img[(i-1)].onload = function(){
			var iw = new Array(block_cnt);
			var ih = new Array(block_cnt);
			var bw = new Array(block_cnt);
			var bh = new Array(block_cnt);
			var arr_h = new Array(block_cnt);
			var arr_w = new Array(block_cnt);
	
			var n = 0;
			$.each(arr_img, function(){
			
				iw[n] = arr_img[n].width;
				ih[n] = arr_img[n].height;
				bw[n] = block_pass.eq(n).width();
				bh[n] = block_pass.eq(n).height();
				
				n++;
			});
			$(window).resize((function(){
				resizeAction(block_pass, iw, ih, bw, bh, arr_h, arr_w, sw);
			}));
		}
		
		// リサイズ処理
		function resizeAction(block_pass, iw, ih, bw, bh, arr_h, arr_w, sw){	
			var cw  = $(this).width();
			
			for(var s=0 ; s<=(bw.length-1) ; s++){
				if(sw == cw){
					//alert("スタート時と同じ向き");
					arr_h[s] = bw[s]/iw[s]*ih[s];
					
					block_pass.eq(s).css({backgroundSize: "100%"});
					block_pass.eq(s).css("width", bw[s]+"px");
					block_pass.eq(s).css("height", arr_h[s]+"px");
				
				}else{
					//alert("スタート時と違う向き");
					arr_w[s] = (cw)*(bw[s]/sw);
					arr_h[s] = (cw/iw[s]*ih[s])*(bw[s]/sw);
					
					block_pass.eq(s).css({backgroundSize: "100%"});
					block_pass.eq(s).css("width", arr_w[s]+"px");
					block_pass.eq(s).css("height", arr_h[s]+"px");
				}
			}
		}
	}
	
	// クラス名と画面横幅初期値を代入
	var block_pass = $(".bg_resize");
	var sw = $(this).width();
	
	new classBgResize(block_pass, sw);
});

【HTML】

<div id="conteiner"> 
	<p class="aaa bg_resize">bg_resize_aaa</p>
	<p class="bbb bg_resize">bg_resize_bbb</p>
	<p class="ccc">no_resize_ccc</p>
</div>

【CSS】

#conteiner{
	width: 100%;
	margin: 0 auto;
}

.img_chenge img{
	width: 100%;
}

.aaa{
	width: 100%;
	background: url(../img/s_test_1.jpg) no-repeat; 
}

.bbb{
	width: 50%;
	background: url(../img/s_test_2.jpg) no-repeat; 
}

.ccc{
	width: 50%;
	background: url(../img/s_test_1.jpg) no-repeat; 
}

⇒デモ(スマホ実機で要確認)

【MySQL】テーブル内指定カラムの文字列をREPLACE関数で一括置換する

MySQLテーブル内指定カラムのテキストを一括置換したいが一発勝負なので、
一括置換する前に、あらかじめ置換後の文字列を確認したい時のSELECT文を作ってみたのでメモ

【確認用SELECT文】

SELECT
置換カラム名,
REPLACE(置換カラム名, '置換したい文字列', '置換後の文字列') AS 置換後カラム名
FROM
テーブル名

使用例)
SELECT
beforer_column,
REPLACE(beforer_column, '置換したい文字列', '置換後の文字列') AS after_column
FROM
table_name

【実行用UPDATE文】

UPDATE
テーブル名
SET
置換カラム名 = REPLACE(置換カラム名, '置換したい文字列', '置換後の文字列')

使用例)
UPDATE
table_name
SET
column_name = REPLACE(column_name, '置換したい文字列', '置換後の文字列')

REPLACE関数:REPLACE(カラム名, ‘置換したい文字列’, ‘置換後の文字列’)

【PHP】ユーザーエージェント(User Agent)からデバイスやキャリアを判別するクラス

スマホ・タブレット・携帯(ガラケー)・PCなどデバイスごとに振り分ける処理をしたいので、各デバイス情報を取得したい。

前回作った、ユーザーエージェント(User Agent)を取得してデバイスを判別するクラスを改造して、携帯(ガラケー)情報とキャリア情報も取得できるようにした。

ユーザーエージェント判定クラス(改)

class UserAgent{
	
	private $ua;
	private $device;
	private $career;
 
	public function UserAgent(){
		$this->deviceCheck();
	}
	
	public function careerCheck(){
	
		//ユーザーエージェント取得
		$this->ua = $_SERVER['HTTP_USER_AGENT'];
 
		if(strpos($this->ua,'DoCoMo') !== false){
			//DoCoMo
			$this->career = 'docomo';
		}
		elseif(strpos($this->ua,'UP.Browser') !== false){
			//au
			$this->career = 'au';
		}
		elseif((strpos($this->ua,'SoftBank') !== false) || (strpos($this->ua, 'Vodafone') !== false) || (strpos($this->ua,'J-PHONE') !== false) || (strpos($this->ua,'SMOT') !== false)){
			//SoftBank
			$this->career = 'softbank';
		}
		elseif(strpos($this->ua,'WILLCOM') !== false){
			//WILLCOM
			$this->career = 'willcom';
		}
		elseif(strpos($this->ua,'emobile') !== false){
			//eモバイル
			$this->career = 'emobile';
		}
		else{
			//不明
			$this->career = 'unknown';
		}
	}
	 
	public function deviceCheck(){
		 
		//ユーザーエージェント取得
		$this->ua = $_SERVER['HTTP_USER_AGENT'];
		$this->careerCheck();
 
		if(strpos($this->ua,'iPhone') !== false){
			//iPhone
			$this->device = 'sp';
		}
		elseif(strpos($this->ua,'iPad') !== false){
			//iPad
			$this->device = 'tb';
		}
		elseif((strpos($this->ua,'Android') !== false) && (strpos($this->ua, 'Mobile') !== false)){
			//Android
			$this->device = 'sp';
		}
		elseif(strpos($this->ua,'Android') !== false){
			//Android
			$this->device = 'tb';
		}
		elseif($this->career != 'unknown'){
			//携帯
			$this->device = 'mb';
		}
		else{
			//PC
			$this->device = 'pc';
		}
	}
	
	public function getDevice(){
		return $this->device;
	}
	
	public function getCareer(){
		$this->careerCheck();
		return $this->career;
	}
}

実行

$ua = new UserAgent();

// スマホ:sp タブレット:tb 携帯:mb PC:pc
echo $ua->getDevice();

getCareer()でキャリア情報も取得できるようにしました。

【ExcelVBA】エクセルで指定数以外の文字列を伏字に置換する

エクセルでメールアドレスなどの個人情報の保護を理由に1部分を残して伏字にしたい。
今回は、メールアドレスの文字列のうち左から8桁残して、それ以外の文字列を伏字(“x”)に変換する。

【要件】

  • ・文字列が打ち込まれた時コピペされた時に伏字にしたものに上書きする。
  • ・左から8文字はそのまま残し、それ以外の文字列を伏字(“x”)に置換する。
  • ・メールアドレスを元に戻す必要はない。

【仕様】

  • Worksheet_Change()セルの値が変更された時に発生するイベントを利用する。
  • 対象カラムを指定し、その列に打ち込まれた文字列のみ処理を行う。
  • ・文字列がない場合エラーになるので、0文字以上の場合のみ実行する。

【コード】

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim ColNum
    '対象カラムを指定
    ColNum = 3

    '対象カラムで条件分岐
    If Target.Column = ColNum Then
        Call putSecurityText(Target.row, Target.Column)
    End If
End Sub
  
'指定したrowとColumnからセルを割り出し文字列をセキュリティコードに上書きするサブプロシージャ
Sub putSecurityText(row, col)
    Dim num
    Dim xText
    Dim SecurityText
    Dim cellVal
    
    '残すテキスト数
    num = 8
    cellVal = Cells(row, col).Value

    leftVal = Left(cellVal, num)
    lenVal = Len(cellVal)
    cntVal = lenVal - num
    
    '文字列分"x"を生成し連結する
    For i = 1 To cntVal Step 1
    xText = xText & "x"
    Next i
    
    SecurityText = leftVal & xText
    
    '文字列が0以上の場合のみ実行
    If lenVal > 0 Then
        Cells(row, col).Value = SecurityText
    End If
End Sub

‘Target.Column’,'Target.Row’からセルの列番号,行番号を取得することが出来る。

【ExcelVBA】指定セルの値が変更された時にイベントを発生させる”Worksheet_Change”イベント

指定セル更新後の処理イベント(指定セルの値が変更された時)が発生した時に処理を実行する。

今回は、指定したセル内の文字列が変更された時に、ダイアログボックス(ウィンドウ)に文字列を出力する。

Worksheet_Change()
セルの値が変更された時に発生するイベント。

Private Sub Worksheet_Change(ByVal Target As Range)
    'カラムで条件分岐
    If Target.Column = 2 Then
        'サブプロシージャを呼び出す
        Call putCellVal(Target.Value)
    End If
End Sub
  
'文字列(値)を出力する関数サブプロシージャ
Sub putCellVal(val)
    MsgBox val
End Sub
Targetにはイベントが発生した時点でのセルの情報が入ってきます。
Target.Column…そのセルの列番号を取得
Target.Row …そのセルの行番号を取得
Target.Value …そのセルの値を取得