2014年12月30日火曜日

動画サイトのError loading skin:Crossdomain loading denied

動画サイトの動画を視聴していたところプレイヤーに"Error loading skin:Crossdomain loading denied"と表示されて動画が見れなくなっていました。
数日前までは普通に利用できていたのですが、とりあえず広告を消すプラグインを停止したら動画が見られるようになりました。自分も作ったアプリには広告を削除すると機能しなくなるプログラムを入れているので広告ブロック対策の否定はできません。それとクロスドメイン対策でもあります。

解決方法

広告をブロックするプラグインを停止する。
もしくは動画の配信元サイトで視聴すること。※動画ファイルだけ他のサイトから読み込む仕組みだと同様に対策されるため


2014年12月28日日曜日

unityの二種類の衝突イベントの違いと注意点

Unityには二種類の衝突イベントがあります。
  • OnCollision (衝突対象とすりぬけない
  • OnTrigger (衝突対象がすりぬける

どちらも衝突発生と衝突中、衝突終了の3種類のイベントを拾えます。

二つの衝突イベントの違い

OnCollision衝突イベントには衝突オブジェクトのどちらかにリジットボディが必要。
コライダーには実体があり、他のオブジェクトにぶつかります

void OnCollisionEnter(Collision other) {

OnTrigger衝突イベントは動きのあるコライダー単位で発生する。※位置をワープさせてぶつけても衝突にならない。
コライダーには実体がなく、他のオブジェクトにはぶつからない。当たり判定のみ存在する。
void OnTriggerEnter(Collider other) {

注意点

二つのイベントはリジットボディ単位かコライダー単位かで発生数が変わってしまう。
当たり判定をワープさせると反応しない場合があること。

2014年12月23日火曜日

無効化できないボタン

 Android3X以降のAndroidはディスプレイの下部に「バック、ホーム、タスク」の三つのボタンがあります。
そのうち「ホーム、タスク」はアプリから無効化することはできません。ボタンの誤動作を防ぐにはGUIを工夫するしかないようです。

2014年12月22日月曜日

Unityオブジェクトの子要素を取得する

プレファブはsensya>housin>anaの入れ子の親子関係になっています。
pXXはゲームオブジェクトです。

子要素の取得

        p1 = getJittai (presen);//一つのプレファブから二つの戦車の実態を作成
        p2 = getJittai (presen);
        //p1a = GameObject.Find ("Ana");これだとどちらの戦車の砲身だかわからない
        p1a = p1.transform.FindChild ("Housin").transform.FindChild("Ana").gameObject;


    }
//プレファブから実体を作成して画面に配置
    public GameObject getJittai(GameObject prefab){
        GameObject gameObj = Instantiate (prefabas GameObject;
        Transform tran = gameObj.transform;
        tran.position = this.transform.position;
        return gameObj;
    }

親要素の取得は以下です。
gameObject.transform.parent.gameObject
親は一つしかないので名前を指定する必要はありません。

2014年12月16日火曜日

移動に合わせてキャラクターの向きを8方向に変えるサンプル

矢印キー入力でプレイヤーの向きを変える方法。
右矢印キーと下矢印キーを同時押しすることで斜め右下に向きを変えます。
計算式はラジアン*180/円周率です。

以下サンプルソース

public void Update()  
//矢印キーでの移動
Vector3 vc1 = new Vector3 (Input.GetAxisRaw("Horizontal"), 0Input.GetAxisRaw ("Vertical"));
//角度を算出
  float kakudo = Mathf.Atan2(Input.GetAxisRaw("Horizontal"),Input.GetAxisRaw("Vertical"))*180/Mathf.PI;
//移動        transform.rigidbody.velocity = vc1;
//向きを変える
        transform.rotation = Quaternion.Euler (0kakudo0);

2014年12月10日水曜日

Galaxy Sシリーズのカメラ音を消す。

Galaxy S seriesのカメラをroot化無しで無音化するアプリ「カメラサイレンサー」
ギャラクシーS2 S3 S4 S5の動作報告がありました。
シャッタ音を消すアプリ
 このアプリはroot化せずに全てのカメラアプリのシャッター音を無音化できます。
フォーカス音やその他の音も消すことができます。
ギャラクシーシリーズとは相性が良いようで最新のs5やGalaxy Player 4.2などでも動作報告あります。他にもXperia Z3の動作報告もあります。
 このアプリは1年以上更新していませんが、最新の機種での動作報告が増えていてまだまだプログラムは使えていて人気があるようです。音声を利用するアプリの副産物でしかなかったアプリですが人気に応えてプログラムを更新できればとは思っています。ただ、作者のandroid実機が旧式のhtc製しかありません。手持ちの実機なら完全なものを作れますが、その他のスマホはメーカのカスタム具合やハードウエアの構成しだいで動作が異なります。そのため動作報告をもらって新しいプログラムを作成しています。
沢山のレビューをありがとうございます。

2014年11月22日土曜日

スマホがリカバリーモードで起動した場合

先日、力仕事をした後に手元が狂ってスマホを投げてしまいました。。
裏蓋とバッテリーが外れて本体の角には深い傷が…
とりあえず電源を入れてみるとリカバリーモードで起動しました。
ボリュームキーで上下選択、電源キーで決定するようです。
Powerdownを選択して起動しなおしたらいつも通り起動しました。

2014年11月15日土曜日

初macの使用感想

mac mini 2014で作ったアプリをiosシュミレーターで動かすまでやってみました。
感想はというと…winユーザにはおすすめできません
理由は以下です。

macの使いにくい点

・jisキーボードとの相性が悪い
設定画面からキーボードを認識させてあげないといけません。
バックスラッシュを入力しようとするとアンダースコアにしかならない。(alt+yで入力可能)
一部アプリのパスワードで大文字の入力ができない。(yosemiteのバグ?)
・ディスプレイの解像度が合わない
ディスプレイの設定画面でaltキーを押しながら解像度設定をしないといけない(裏技?)
・フォルダのパスをコピーできない
アプリで解決できるそうです。
・システムのフォントサイズを変更できない
4kディスプレイの場合は綺麗に解像度を4分の1にするモードがあるそうです。
・ミドルウエアのアンインストールはコンソールからコマンド入力する
jdkとか共通機能の削除はlinaxコマンドが必要です。

一通りショートカットを覚えてやっとストレス無く使えるようにはなってきました。

2014年11月6日木曜日

Unity warning CS0618: SetActiveRecursively

SetActiveRecursivelyを使用するとゲームオブジェクトを非表示にできます。
RendrerやTextureを使うのとは違い。子オブジェクトもまとめて非表示にできます。
使用の際に以下の注意が表示されていました。

Assets/x/xx.cs(41,39): warning CS0618: `UnityEngine.GameObject.SetActiveRecursively(bool)' is obsolete: `gameObject.SetActiveRecursively() is obsolete. Use GameObject.SetActive(), which is now inherited by children.'

SetActiveRecursivelyは廃止され。
SetActive()になりました。使い方は同じです。
SetActive(false)で非表示になります。真を渡せば再表示できます。

2014年11月5日水曜日

Unity CSVファイルの読み取り

UnityのC#スクリプトでCSVファイルを読み取るサンプルソースです。
Resources.LoadはAsett/Resourcesフォルダのファイルを読み込みます。
Resourcesフォルダを作成し、そこにファイルを配置してください。

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.IO;
//適当なゲームオブジェクトに貼りつけてください
public class FileSousa  : MonoBehaviour{
private string[,] CsvDate1;

void Start () {
CsvDate1= readCsv ("Namelist");
Debug.Log (CsvDate1 [2, 0]);//三行目の一列目を表示例
}

private string[,] readCsv(string fileName){

TextAsset ta = Resources.Load(fileName, typeof(TextAsset)) as TextAsset;
//改行コードで一次配列に
string[] lineArray = ta.text.Replace("\r\n", "\n").Split('\n');   
ArrayList dataList = new ArrayList (lineArray);

//行数と列数を
int lineCount =  dataList.Count;
string tmp =  dataList [0].ToString();
string[] tmp2 = tmp.Split(","[0]);
int colCount = tmp2.Length;
string[,] tmpCsvData = new string[lineCount, colCount];
int i = 0;


foreach (string str1 in  dataList) {
int j = 0;
string[] tempLine = str1.Split(',');
foreach(string str2 in tempLine){
//二次配列を作成
tmpCsvData[i, j] = str2;
j++;
}
i++;
}
return tmpCsvData;
}
}

MonoBehaviourを削除して普通のクラスにしてもOKです。
ゲームデータをCSVで管理できます。

2014年11月1日土曜日

着信音を最大以上に大きくするアプリ

以前作成した通話音量を最大以上にアップさせるアプリについて。
着信音量
アプリのダウンロードはこちら
レビューをみたところ着信音を大きくするアプリとして利用されているようです。
プログラムの仕組み上、着信中は全ての音量がブースとされます。
機種によっては通話音を4割ほど引き上げることができているようです。

公開しているアプリはAnroidAPIを特殊な使い方をしているものが多いのでAndroidのバージョンと機種で挙動が大きく変わってしまいます。
公言されていませんが全てのディバイスを完全なバックグランドサービスから操作できるのはバージョン3.xまでですし。

スマホの内部ストレージの容量回復

スマホを何年も初期化せずに使用しているとデータベースに使用されないデータが増えていきます。使用するアプリや数にもよりますが数百メガバイトも消費することも。

内部ストレージの容量を回復させるにはスマホを出荷時の状態へ戻すのが手っ取り早いようです。
メーカーにもよりますが母艦でバックアップを取ってからスマホを初期化して復元をすれば、内蔵ストレージの容量が増えます。

旧式や廃価版スマホは内蔵ストレージが少ないので年に一回くらい初期化することをお勧めします。

Unity at System.Reflection.Emit.AssemblyBuilder.Save

Unityにmp3ファイルを追加したところAvastにDllをウイルス扱いされてしまった。

  at System.Reflection.Emit.AssemblyBuilder.Save (System.String assemblyFileName, PortableExecutableKinds portableExecutableKind, ImageFileMachine imageFileMachine) [0x00000] in <filename unknown>:0 

  at Mono.CSharp.CodeGen.Save (System.String name, Boolean saveDebugInfo, Mono.CSharp.Report Report) [0x00000] in <filename unknown>:0 

  at Mono.CSharp.Driver.Compile () [0x00000] in <filename unknown>:0 

  at Mono.CSharp.Driver.Main (System.String[] args) [0x00000] in <filename unknown>:0 

Unityのプロジェクトを除外リストに入れて実行ボタンを押せばDLLが再作成されます。

2014年10月31日金曜日

エクリプスの文字化け対応。デフォルトをUTF8にする

開発環境を再構築したところフォルダにエラーマークが。。
ソースを開いてみたところ日本語が文字化けしていました。
プロジェクトごとに文字コードを設定するのは面倒なのでエクリプスの設定ファイルを編集しました。

対応策

エクリプスのeclipse.ini
-Dfile.encoding=utf-8
と追記する。
eclipse.exe -clean.cmdを実行。
バッチが無い場合は-cleanを自動時の引数にしてください。

以上でデフォルトの文字コードを設定できます。

2014年10月26日日曜日

Unity Remote4 USB接続からのタッチパネル操作

スマホ用のUnity Remoteアプリを使用することで、実機にインストールせずにタッチパネルのテストができます。

Unity Remote使い方



Unity Remote USB
  1. UnityのメニューバーのEdit(Fileと表示されるバージョンもある)>Project settings>Editerを選択
  2. インスペクタウインドウのRemoteをAndroidまたはIOSにする
  3. Unity再起動(新しいプロジェクトごとに設定しなおす必要あり)
  4. スマホのUnity Remoteアプリを起動する。
  5. Unityの実行ボタンを押すとゲーム画面がスマホに映り、操作ができる。

Unite Remoteアプリのバージョンは使用しているUnityと合わせてください。

2014年10月25日土曜日

Unity バージョンアップ方法

数ヶ月ぶりにUnityをバージョンアップしてみました。
最新版はUnitySetup-4.5.5です。

Unityはアプリケーションからのアップデートには対応していません。
Unityを新規にインストールした際と同じ手順でアップデートします。

  1. Unityの本体を公式サイトからダウンロード。
  2. ダウンロードしたセットアップファイルを実行。

以上でバージョンアップされます。
あらかじめUnityをアンインストールする必要はありません。
インストールフォルダを同じにすればOK。
設定情報や履歴は引き継がれます。

注意点

セットアップが実行されるまで数分かかります。※ファイルが大きいため展開とウイルスチェックに時間がかかる。
サンプルのインストールのチェックは外してかまいません。
VistaにインストールをしたらXXX.exe初期化できませんでした。エラーメッセージがブラクラのようにインストールが終わるまで表示されました。正常にインストールはされていました。

2014年10月24日金曜日

Unity Error while importing package: Couldn't decompress package

パッケージをインポート使用としたところ以下のエラーが発生。
Error while importing package: Couldn't decompress package
どうやらパッケージ名に日本語を使っていたためのようです。
※全角文字を含めたパッケージをインポートできる事がある。
半角英数を使えばエラーが解消されます。

他にもエクスポート機能には不具合があるような気がします。
エクスポート項目が全て表示されないことがあるので注意を。
対応策はアセットをフォルダで管理して、エクスポート時にルートに近いフォルダが存在するかを確認するなど。

Unityはバグがあってもバージョンアップは面倒なので放置しがちです。
※UnityのUpdateは1ギガ以上のファイルをダウンロードしてインストールし直す必要がある。

2014年10月23日木曜日

Unityボタンでのジャンプ力の調整と空中での移動

アクションゲーム用のジャンプ制御を改良してみました。

  • ジャンプボタンを押しっぱなしでジャンプ力が増します。
  • 空中で左右へ移動できます
  • 二段ジャンプはできません。
  • 横移動して落下中もジャンプはできません。

接地判定は以下の記事を参考にしてください。
キャラクターコントロールクラスと地面判定の記事はこちら

以下がサンプルソースです。
public float speed =   9.0f;
public float jumpspeed = 5.0f;
private float JAMP_SPEED = 6.5f;
public float gravity = 9.0f;
private Vector3 idou =  new Vector3();
public void Start()
{
//kyo.jimen = false;//地面判定は自作しないと
}
public void Update()
{
//地面判定
if (kyo.jimen) { idou = new Vector3 (Input.GetAxis ("Horizontal"), 0, Input.GetAxisRaw ("Vertical"));
idou = transform.TransformDirection (idou);
idou *= speed;
if (Input.GetButton ("Jump")) {
idou.y = jumpspeed;
}

} else {//空中でも移動
idou.x = Input.GetAxis ("Horizontal") * speed;
if (Input.GetButton ("Jump")) {
jumpspeed= jumpspeed/2;
idou.y += jumpspeed;
}
}
idou.y -= gravity * Time.deltaTime;

rigidbody.velocity = idou;//直接加速度を設定すつ
}
//地面判定
void OnCollisionEnter(Collision collision)
{
kyo.jimen = true;
jumpspeed = JAMP_SPEED;

}
void OnCollisionExit(Collision collision)
{
kyo.jimen = false;
}

やっつけ仕事ですみません。操作性はゲームの要なので、まだまだ改良していく予定です。
シフトや論理演算を使うなど処理速度を改善できればと思います。

2014年10月22日水曜日

Unity衝突させない当たり判定イベント

ColliderのIsTriggerをOnにするとオブジェクトをすり抜けることができます。

その際の衝突イベント(当たり判定)
private void OnTriggerEnter(Collider other)
private void OnTriggerStay(Collider other)
private void OnTriggerExit(Collider other)
ColliderのIsTriggerをOnにすると呼び出される。

普通の衝突イベント
private void OnCollisionEnter(Collision collision)
private void OnCollisionStay(Collision collision)
private void OnCollisionExit(Collision collision)
オブジェクト同士が衝突して止まるか押される。

衝突イベントの種類

Enter

オブジェクトと接触した瞬間に呼ばれるメソッドです。
接触時に一回呼ばれます

Stay

オブジェクトと触れている間に呼ばれるメソッドです。
接触中は毎フレーム呼ばれます。

Exit

接触していたオブジェクトから離れた瞬間に呼ばれるメソッドです。
接触時に一回呼ばれます。

Unity開発環境用MacPCスペック検証2014

Unity開発で使用するPCスペックを調べて新型のMacとの相性を調べてみました。
Unityはトライアンドエラーでの開発に向いているのでデバッグに重点を置いて考えます。
GPUよりCPUを重視します。ただし、内蔵グラフィックだと性能が低いためCPUとの性能バランスが悪いこともあります。

iMac 2014

コストパフォーマンス悪し
クアッドコアモデルなら性能十分。
ディスプレイを持っていない人向け。

Mac mini 2014

廃価モデルはコストパフォーマンスが優秀。
メモリを交換できないのでメモリ4GでMac OS Xをそのまま使うには難がある。BootcampでWindowsを入れたほうが良い
i5-4260U 1.4Gも上位モデルのi5もCUPの値段がほぼ同じ。キャッシュもシェーダ数も変わらない。
消費電力と静音性と排熱はディスクトップ最高レベル。ファンが油圧ベアリングになった。

Mac mini 2012

コストパフォーマンス優秀。
クアッドコアモデルにメモリを増設すればiMac2014よりも優れているはず。
グラフィック性能と排熱が弱い。

Mac Book Air 2014

コストパフォーマンスは普通。
PCを持ち運ぶ人向き。Macノートはバッテリーのもちが良い。
SSDなのでメモリが少なくても問題はない。
SSDなので容量が少ないため、Bootcampを使うなら外付けHDDが必要。
開発に使うなら外部ディスプレイがほしい。

Mac Book Pro 2014

コストパフォーマンスは普通。
お金に余裕があるならAirよりもProのRetinaモデルを買ったほうが画面が広くて良い。

結論

廃価版Mac miniにWindowsを入れて開発をしよう・・・
何よりWindowsのほうが慣れていますし、Win8のパッケージ版は安い。
MacはiOSのビルド環境です。

ハードウェア的にはHDDがボトルネックです。上位モデルを選択するのならフュージョンドライブよりもPCIe接続のSSDがおすすめです。
Mac mini2014の分解画像を見る限りではPCIeポートが存在するようですが形状が独自になっています。





2014年10月19日日曜日

Unity バーチャルジョイスティックとボタンを作成

アセットストアのユニティテクノロジーが無料で配布しているバーチャルジョイスティックとボタンをプロジェクトに追加しました。

https://www.assetstore.unity3d.com/jp/#!/content/14474
アセット名 Sample Assets (beta)
その中からインポートするフォルダ Cross Platform Input
インポート完了後はアセットのSample Assets/Cross Platform Input/Prefab/Mobile Single Stick Control Rigをヒエラルキーウインドウにドラックアンドドロップするだけです。
※ビルドセッティングをスマホにしないとバーチャルスティックが表示されません
バーチャルジョイスティック画像

ジョイスティックの使用方法

Vector3(Input.GetAxis("Horizontal"),0,Input.GetAxisRaw("Vertical"));
Vector3(CrossPlatformInput.GetAxisRaw("Horizontal"),0,CrossPlatformInput.GetAxisRaw("Vertical"));
に書き直すことでタッチしたジョイスティックの入力を拾えます。

バーチャルボタンの使用方法

Input.GetButton ( "Jump")
CrossPlatformInput.GetButton ( "Jump")
に書き直すことでボタンのタッチを拾えます。


ゲームエンジンの比較まとめ

ゲームエンジン

自分はゲームエンジンにUnityを選びました。
理由は以下のとおりです。
  1. 情報量の多さ
  2. 統合開発環境
  3. マルチプラットフォーム
  4. 利用できる言語
  5. ネイティブプログラムの組み込み
 Unityは利用者数が多く、ほかのゲームエンジンの10倍以上の人口です。
そのため日本語の情報も多く、アセットストアを通じてプログラムや3Dモデルの開発者も数多くいます。
 アセットストアを通すことで様々な部品を利用することができ、素材を集めるのが楽になります。
 個人で3Dゲームを開発するならばUnity一択かもしれません。

2014年10月18日土曜日

MacでUnity開発に必要な最低スペック

Mac miniやMacBookAirでどのくらいUnityでゲーム開発ができるか調べてみました。
必要な最低スペック

PCスペック

Intel Core i5 1.4G
メモリ DDR3 1600 4G

現在販売されているMacの最低スペックです。

結果

重そうなデモプロジェクトも普通に動作します。
テスクチャを拡大縮小しても問題なし。
個人で開発をする分には最小構成のMacで十分です。
Macは起動するだけでメモリを5ギガくらい大量消費しますが、
内3ギガはメモリの高速化をするためキャッシュです。
実際は1.5ギガ程度のメモリ消費と考えて問題ありません。
メモリは大いに越したことはありませんが開発効率を考えると以下になります。

Macで開発を始めようと考えている方は以下の優先度でハードを選ぶといいです。
  1. 20インチ以上のディスプレイ
  2. SSD
  3. メモリ8G以上
  4. GPU GForce X50以上
  5. CPU Intel クアッドコア

ノートPCで開発をするのなら最低でもディアルディスプレイと外付けキーボードはほしいところです。

Unity オブジェクトを移動させる方法色々

オブジェクトの移動にはtransform.positionを使う方法がありますが他にも


があります。

velocityはオブジェクトの速度を設定します。
AddForceはオブジェクトに力を加えます。
動かしてみると分かりますがvelocityは速度を直接指定しているので摩擦がかからずに一定速度になります。一方AddForceは地面では摩擦で動きが遅いですが、ジャンプさせると加速し続けます。

具体的な使用方法は以下のサンプルソースを参考にしてください。
リジットボディも必要です。
using UnityEngine;
using System.Collections;

public class Sousa : MonoBehaviour {

public float speed =   9.0f;
public float jumpspeed = 9.0f;
public float gravity = 20.0f;
private bool jimen = false;

private Vector3 idou =  new Vector3();

public void Start()
{
jimen = true;//地面判定は自作しないと
}

public void Update()
{
if (jimen)
{
idou = new Vector3(Input.GetAxis("Horizontal"),0,Input.GetAxisRaw("Vertical"));
idou = transform.TransformDirection (idou);
idou *= speed;

if(Input.GetButton ( "Jump"))
{
idou.y = jumpspeed;
}
}
idou.y -= gravity * Time.deltaTime;
//transform.rigidbody.AddForce(moveDirection);//力を加えて移動
rigidbody.velocity = idou;//直接加速度を設定すつ


}
}

2014年10月17日金曜日

Mac mini 性能比較 2012 vs 2014

本日午前2時頃にアップル社の新製品発表がありました。

タブレット指紋認証が付いたくらいの変更です。
一体型デスクトップパソコンはiMac5kディスプレイの映像クリエイター向けバージョンが追加されました。

IOS開発用に期待していたMac miniはというと

旧型と性能はたいし
て変わらなそうです。
クアッドコアモデルが無くなりました。

2年前あたりでCUPやメモリなどPC部品の進歩が止まっているせいです。
来年ならBroadwelやDDR4が期待できたのですが。。
追記。よくみたらメモリがLPDDR3になっていました。性能向上よりもメモリを交換できないのがネックのような。

ベンチマークと比較してみると

Mac mini 2012 intel Core i5 2.5G Mac mini 2014 intel Core i5 1.4G
CPUの処理は旧型、GPUは新型がやや優れていました。ほぼ変わりがありません。
旧型はクアッドコアモデルがあるぶん伸び城が大きい。CPU以外の他のパーツはほぼ同じですし。

2014年10月16日木曜日

Unity キャラクターの移動とジャンプ

スペースキーでジャンプ。矢印キーで移動します。
CharacterControllerクラスを使用したアクションゲームのサンプルソース。
動かしたいオブジェクトにRegitBodyとCharacterControllerと以下のスクリプトクラスを追加して使用してください。

基本オブジェクト以外を動かす場合はCharacterControllerの辺り判定を調整してください。

using UnityEngine;
using System.Collections;

public class ChareIdou : MonoBehaviour {

public float speed =   9.0f;
public float jumpspeed = 9.0f;
public float gravity = 20.0f;


private Vector3 moveDirection =  new Vector3();
private CharacterController controller;

public void Start()
{
controller =GetComponent("CharacterController")as CharacterController;
}

public void Update()
{
//CharacterController.isGroundedキャラクターが地面に接しているか?
if (controller.isGrounded)
{
moveDirection = new 
//TransformDirectionはローカルのTransform情報をワールド座標系に変換します
Vector3(Input.GetAxis("Horizontal"),0,Input.GetAxisRaw("Vertical"));
moveDirection = transform.TransformDirection (moveDirection);
moveDirection *= speed;

if(Input.GetButton ( "Jump"))
{
moveDirection.y = jumpspeed;
}
}
//Time.deltaTimeは前フレームが呼び出されたときからの経過時間を取得出来ます
moveDirection.y -= gravity * Time.deltaTime;

controller.Move (moveDirection * Time.deltaTime);
}
}

2014年10月15日水曜日

Unity MissingComponentException CharacterController

CharacterControllerを使用時のエラーメモ。
スクリプトからCharacterControllerを使う場合は、ゲームオブジェクトのインスペクタからAddComponentボタンを押して物理のCharacterControllerを追加してください。

MissingComponentException: There is no 'CharacterController' attached to the "Sphere" game object, but a script is trying to access it.
You probably need to add a CharacterController to the game object "Sphere". Or your script needs to check if the component is attached before using it.
RoboIdou.Update () (at Assets/)

例:
以下のコードを使用しているスクリプトはCharacterControllerコンポーネントを同じオブジェクトに追加して併用する必要があります。
cc = GetComponent("CharacterController")as CharacterController;

ANDROIDのアクティブバージョン統計情報





バージョン別シェア一覧


Android 4.4 24.45%
Android 4.1 24.13%
Android 4.2 16.22%





Android 2.3.3 - 2.3.7 13.96%
Android 4.0.3 - 4.0.4 10.09%
Android 4.3 8.41%
Android 2.2 2.10%
Android 3.2 0.31%
Android 2.1 0.14%
Android 3.1 0.09%

2.3がまだ14%ほど使用されています。

2014年10月11日土曜日

WindowsだけでIOS開発 Unity Cloud Build

 WindowsだけでIOS開発ができると便利なのですがMacを使わないとIOSアプリをコンパイルできません。方法がないものかと以前に調べていましたが、結局Macハードが必要と結論がでました。※仮想環境Macはアップデートができないし、安定しない。
 そこで最近サービスが開始された「Unity Cloud Build」について調べてみました。

Unity Cloud Buildは名称どおりサーバでUnityプロジェクトを管理し、アプリをコンパイルしてくれるといったもの。いろいろと登録しないといけません。複数人でプロジェクトを管理するにはいいかも?

とりあえず結論。

WindowsだけでIOSアプリを作れます。Appleストアで公開も可能なはず。
ただし、Unity Cloud Buildサービスは空きがないようで再募集されるまで登録できません。
たぶん、有料になるんじゃ。。

一番安いMac mini 2014でも買おう・・・

2014年10月8日水曜日

色彩感覚テストアプリ

カラー診断画像

色彩感覚テストアプリをリリースしました。

Unityアプリのリリース手順の確認用に作成した簡単なアプリです。
サンプルイメージ色弱テスト

色のついたパネルを並べてグラデーションを作り、
色彩感覚をチェックします。
この手のゲームはいくつかありますが、使用する色の選択や量がいまいちで、
とてもやる気になれませんでした。(忍耐力テストみたい)
そこで、このアプリは素早く色彩感覚をテストできるようにしました。
色彩感覚が弱い方で無ければ1000点取れます。

Unityでの作成について。
GUIの作成が不便です。Unity4.6のリリースが待ち遠しい。
便利な点。アプリ画像は一つ作れば大小は自動で作成してくれます。
UnityでビルドするとJavaで書く40倍の容量に。。最低20M消費?
とりあえず統合開発環境代わりに使えます。

本格的なゲームも設計中です。

2014年10月6日月曜日

Unityのフレームレートとタッチイベント

スクリプトからフレームレートを指定する場合は
Application.targetFrameRate = 10//一秒間に10回描画
と書きます。

プログラムの処理が重い場合にフレームレートを安定させるため、
フレームレートをあらかじめ下げることがあります。
注意点としては、フレームレートと各種イベント(タッチイベントなど)が同じ間隔になってしまうことです。

描画は遅くしたいが、タッチイベントは最速で処理したいときなどは、描画用のスクリプトに制御が必要になります。

初回ビルド時に以下のエラーが発生しました。

Error building Player: UnityException: Bundle Identifier has not been set up correctly
Please set the Bundle Identifier in the Player Settings. The value must follow the convention 'com.YourCompanyName.YourProductName' and can contain alphanumeric characters and underscore.
Each segment must not start with a numeric character or underscore.

バンドル識別子を設定してください。値は 'com.YourCompanyName.YourProductName'規則に従う必要がありますし、英数字とアンダースコアすることができます。
各セグメントは、数字、文字またはアンダースコアで始めることはできません。

解決方法

画面左上のFileを選択してプルダウンリストのBuild Settingを押すと表示されるウインドウのPleyre SettingボタンインスペクタのOther Setteingの項目Bunble Identyfierを入力する。社名とプロダクト名も入力わすれに注意。

例:com.test.test



Unityビルドエラー Error building Player: Win32Exception: ApplicationName zipalign.exe

UnityでBuild & Runを実行したら以下のエラーが表示されました。

Error building Player: Win32Exception: ApplicationName='C:/Android/adt-bundle-windows-x86-2014X/sdk\tools\zipalign.exe', CommandLine='4 "C:\X\X\Temp/StagingArea/Package_unaligned.apk" "C:\X\X\Temp/StagingArea/Package.apk"', CurrentDirectory='Temp/StagingArea'

zipalign.exeが見つからないそうです。

解決方法

SDK/build tools/zipalign.exeを
SDK/toolsへコピーすればよい。

2014年10月4日土曜日

スマホのおすすめのモバイルバッテリー

 予備のバッテリーを用意するよりもモバイルバッテリーがお勧めです。
あいほん
お勧め2014年夏の新製品。
スマホなら5回ほど充電可能。
端末を自動で判断し、最速の電力を供給。
安全対策も完璧。
18ヶ月保障。
LEDライトにもなる

2014年10月1日水曜日

Unityシングルトン。スクリプトやシーン間でのデータ共有

シングルトンで必要な機能。
一つの実体でいつでもどこからでもデータを保持受け渡しできること。
Unityのシングルトンにはいろいろと制約があるのでC#はJAVAに慣れている人でもリファレンスを見る必要があるかも。

以下のC#スクリプトを作成する。
Tukau1 シングルトンデータを使うクラス。どこに実装してもいい。
DataKanri 空のゲームオブジェクトに実装する。(ドラッグドロップ)
Kyouyuu 共有データ置き場。とりあえず変数mojiを共有。


データを実際に使用する場合
using UnityEngine;
using System.Collections;

public class Tukau1: MonoBehaviour {

void Start () {
DataKanri dk = DataKanri.Instance;
Debug.LogWarning (dk.moji");
                dk.moji="Tukau1"; 
       Debug.LogWarning (dk.moji");
}
}

データをゲームオブジェクトに関連付けて保持する
using UnityEngine;
using System.Collections;

public class DataKanri: Kyouyuu<DataKanri> {

void Awake(){
DontDestroyOnLoad (this);//シーン移動でゲームオブジェクトを破棄しない
}

// Use this for initialization

void Start () {

}

// Update is called once per frame
void Update () {

}

}

実際にデータを置く場所。
using UnityEngine;
using System.Collections;

public class Kyouyuu<T> : MonoBehaviour where T : Kyouyuu<T>
{
public string moji ="Kyouyuu";//必要なだけ変数を作ってOK。内部クラスを作っても良い

protected static T instance;
public static T Instance {
get {
if (instance == null) {
instance = (T)FindObjectOfType (typeof(T));

if (instance == null) {
Debug.LogWarning (typeof(T) + "インスタンス無いよ");
}
}

return instance;
}
}

protected bool CheckInstance()
{
if( instance == null)
{
instance = (T)this;
return true;
}else if( Instance == this )
{
return true;
}

Destroy(this);
return false;
}

protected void Awake()
{
CheckInstance();
}

}


適当なソースから使いやすそうなものをチョイスしました。
他にもシングルトンの書き方があるそうです。

Unity内部クラスの多次元配列C#

UnityのC#に慣れていないため配列の宣言と初期化がわかりませんでした。

多次元配列の指定は大かっこ内にカンマです。
INT[][] INT[,]
クラスの配列は一つずつインスタンスを作成しなければいけません。
System.Serializableを宣言することでインスペクタを使うことができます。

//内部クラスでデータ管理
[System.Serializable]
public class Data : Object{
public string namae="";
public float x=0f;
public float z=0f;
}
public Data[,] data = new Data[7,6];

//初期化

for(int i= 0;i<7;i++){
for(int j = 0;j<6;j++){
data[i,j] = new Data();//初期化
}
}
//値を入れる
data[z,i-1].namae= "a"+j+i;
data[z,i-1].x = cube1.gameObject.transform.position.x;
data[z,i-1].z = cube1.gameObject.transform.position.z;

2014年9月29日月曜日

Unity スクリプトから基本オブジェクトの作成

四角や丸などプリミティブオブジェクトをC#スクリプトから作成。
位置、サイズ、色、コンポーネントの指定。

色やサイズの異なるブロックを大量に配置する際に使います。
基本オブジェクトはプレファブとは違い。マテリアルなどのコンポーネントが共有されません。

//四角のオブジェクトを作成
インスタンス画像 GameObject cube1 = GameObject.CreatePrimitive(PrimitiveType.Cube);
cube1.renderer.material.color = new Color(0.5f ,0.2f,0f);
cube1.transform.Translate(10.5f,0.5f,0f);
cube1.transform.localScale= new Vector3(3,0.01f,3);
cube1.AddComponent("Move");//スクリプトの追加

UNITYで画面サイズをオブジェクト幅に合わせる

オセロや将棋盤を画面いっぱいに表示する場合のサンプルソース

・前提
メインカメラは上から盤面を見下ろす
例 positon(0,15,0) rotation(90,0,0)
盤の表面は座標 x0,y0を中心にする



using UnityEngine;
using System.Collections;

public class gamen : MonoBehaviour {

void Start () {
Camera cam = Camera.main;
float nFocalLength = focalLength (cam.fieldOfView, 10.0f);//盤の幅
cam.transform.position = new Vector3(transform.position.x, nFocalLength, transform.position.z);
}
float focalLength (float fov, float aperture) {
float nHalfTheFOV = fov / 2.0f * Mathf.Deg2Rad;
float nFocalLength = (0.5f / (Mathf.Tan (nHalfTheFOV) / aperture));
nFocalLength *= ((float)Screen.height / (float)Screen.width);
return nFocalLength;
}
}


2014年9月6日土曜日

通信制限のないスマホ

現在のところ、通信制限のないスマホはauの+WIMAXプランしかありません。
+WIMAXプランはWIMAX対応の携帯のみで使用できます。※スマホでWIMAXをオンにするだけ

WIMAX対応の携帯は2年以上昔の端末のみです。WIMAX2とは違います
スマホ以外にもモバイルデータサービスで通信制限が無いのは同じくWIMAXだけです。
なぜWIMAXだけ帯域制限が無いのかというと。3G,LTE,WIMAX2は同じ規格ましくはインフラを使用しているようで、WIMAXだけ別の回線を持っているからです。

・WIMAXのメリットデメリット

メリット
通信制限が無いことくらいです。

デメリット
2018年にサービスが終了します。
電波が入りにくい。
WIMAX対応のROMは古いバージョンしかありません。

・WIMAX対応スマホ

HTC EVO WIMAX、HTCJ、3Dなど2年以上前の機種のみ
中古品を購入するしかありません。
HTCの機種なら3000円から購入可能です。

2014年8月14日木曜日

簿記試験用の電卓

おすすめの電卓画像実務や簿記試験におすすめの電卓。
SHARP 12桁電卓 EL-N412K-X
千円以下で購入できて連打と静音性にも優れています。
日商簿記試験や会計経理系の資格試験に使用できます。

簿記の試験に使える電卓は、

  • MUボタンなどのプログラム機能が無い
  • 電子音が鳴らない(オフにできれば問題ない)
  • サイズが17cm×20cm以下であること

※試験を実施している機関によって異なります。

2014年7月30日水曜日

新型Mac mini Mid-2014発売

Mac mini 2014アップルの公式サポートページにMac mini Mid-2014の表記が発見されました。
ページはすぐに修正されたそうですが新型のMac miniはとりあえず2014年内に発売されそうです。
来年以降ならCPU Bloadwel+メモリ DDR4などの搭載が期待できますが、現状ではMac mini 2012との性能差は僅かだと思われます。ac無線LANもまだ普及していませんし。

Unityで動的にオブジェクトを作成表示する

メインカメラに以下のスクリプトを登録して、
インスペクタからprefabに作成するオブジェクトを登録してください。

using UnityEngine;
using System.Collections;

public class NewObject : MonoBehaviour {
public GameObject prefab;
// Use this for initialization
void Start () {
for (int i = 0; i < 10; i++)
{
prefab.gameObject.name="object"+i;
Instantiate(prefab, new Vector3(0,10+3* i,0), Quaternion.identity);
}
}
void Update () {
if (Input.GetMouseButtonDown(0)) {

Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit = new RaycastHit();

if (Physics.Raycast(ray, out hit)){
GameObject obj = hit.collider.gameObject;
Debug.Log(obj.name);
}
}

}
}

objectNが10個作成されて上から降って着ます。
タッチしたオブジェクトの名前がログに表示されます。

Unityでタッチしたオブジェクトをドラックで移動させるサンプルソース

UNITYアイコン地表のオブジェクトをタッチで移動させるサンプルソースです。

currentPosition.y = 1f;
の部分でオブジェクトのy位置(高さ)は固定しています。

using UnityEngine;
using System.Collections;

public class TouchMove: MonoBehaviour {

private Vector3 objectPosition;
private Vector3 mouseOffset;

void OnMouseDown() {
this.objectPosition = Camera.main.WorldToScreenPoint(transform.position);
this.mouseOffset= transform.position - Camera.main.ScreenToWorldPoint
(new Vector3(Input.mousePosition.x, Input.mousePosition.y, objectPosition.z));
}

void OnMouseDrag() {
Vector3 currentMousePosition = new Vector3(Input.mousePosition.x, Input.mousePosition.y, objectPosition.z);
Vector3 currentPosition = Camera.main.ScreenToWorldPoint(currentMousePosition) + this.mouseOffset;
currentPosition.y = 1f;
transform.position = currentPosition;
}
}

メインカメラのアングルはXを水平Zを垂直に見えるようにしてください。

2014年7月26日土曜日

Unityでできること

Unityでできることをまとめてみました。

・3Dモデル作成
球体や立方体を組み合わせることは可能。
※3Dモデル作成にはモデリング用アセットを追加するか専用ソフトを用意する必要がある。

・物理エンジン
3Dオブジェクトに当たり判定や重さなどを簡単に設定できます。

・アニメーション作成
動画編集やフラッシュ作成のオーサリングツール近いものが用意されています。

・地形作成
Terrain Engineが用意されています。お絵かき感覚で高低差をつけるなど、地面のテスクチャや植物のモデルを使用できます。

・広告
AdMobの広告はUnity用ライブラリが用意されています。インスペクタにパラメーターを入れるだけです。プログラミングの必要はありません。

・スコアランキング
Google Game ServiceのUnity用ライブラリが用意されています。
※マルチプレイヤーにはまだ対応していません。


2014年7月21日月曜日

Unityの必要PCスペック動作環境


動作環境イメージ

公式のUnityの動作環境説明がいまいちわかりにくいので低スペックPCで検証してみました。

/検証環境1
OS Windows Vista
CPU Core2 E4500 2.2G
メモリ DDR2 2G
オンボードグラフィック GM3100 286M

/検証環境2(ノートパソコン)
OS Windows Vista
CPU Core2 T7100 1.8G
メモリ DDR2 2G
グラフィックスカード GForce8400GT

上記二つの環境でも問題なく動作しました。
だだし、ゲームオブジェクトが増えると実行ボタン押下から動作するまでに時間がかかります。
プログラム実行中の操作も重くなります。

結論。低スペックPCだとグラフィカルなオブジェクトを多用できないが、プログラミングには問題ない。

Unity必須スペック(仮)
Core2 Duo世代以降のCPUとUMA
メモリ 2G

2014年7月18日金曜日

boot from cd no boot device available

PCを起動してみたところ
boot from cd no boot device available
hard disk bootable add-in cards
と表示されてOSが起動しませんでした。

Fキーを押してブートメニューを確認したところSATAが認識されていませんでした。
※稀に認識されてOSを起動しようとするがフリーズ
そろそろ壊れると思っていましたがハードディスクの故障です。
ハードディスクは劣化でOSやアプリの起動が年々遅くなっていきます。
去年から一部ファイルの転送が以上に遅かったり、CRCエラーで読み込みに失敗していました。
7年間使用していたので寿命です。

上記エラーはBIOSの設定が電池切れでリセットされても起こります。
SYSTEM_DATEが正しくない場合は電池切れかもしれません。
マザーボードの電池交換とBIOSの再設定で直ります。


2014年7月13日日曜日

液晶画面の白い線

液晶の不具合画像

液晶画面に線がはいってしまいました。特に衝撃を与えたわけではありません。
夏場になってから気温の変化が激しかったためにはんだ付けがはがれたのかもしれません。
幸いメーカーの一年保証が効くので無料で修理可能です。
ドット欠けやバックライトの不具合などの自然故障なら無償で修理をしてもらえます。
圧力による滲みなどの場合は有償修理になるかもしれません。

修理に送る際は余計な部品は外す必要があります。
液晶保護フィルムはセロテープではがしてアルミホイルに貼り付けて保管しました。

Unity アセットストアのダウンロード先を変更

Unityのアセットファイルのダウンロード先はC:\Users\「ユーザ名」\AppData\Roaming\Unity\Asset Storeがデフォルトになります。※OSによって異なる

問題なのがCドライブを圧迫すること。

システムパーチーションやSSDは容量が少ないので、何ギガも消費するアセットの保存先にはむいていません。しかし、Unityから保存先の指定ができないのでファイルシステムを利用するしかありません。

・解決策
C:..\AppData\Roaming\Unity\シンボリックリンクを作成する。

・手順
1.新しい保存先フォルダ「D:..Asset Store」を作成する
2.、古い保存先ホルダの中身を移動して、「c..Asset Store」フォルダは削除する
3.管理者権限でコマンドプロンプトを実行してシンボリックリンクを作成
以下、コマンドの例
mklink /d "C:\Users\ユーザ\AppData\Roaming\Unity\Asset Store" "D:\UnityData\Asset Store"

プロンプト表示
C:\Windows\system32>mklink /d "C:\Users\ユーザ\AppData\Roaming\Unity\Asset St
ore" "D:\UnityData\Asset Store"
symbolic link created for C:\Users\\AppData\Roaming\Unity\Asset Store <
<===>> D:\\Asset Store

以上でアセットの保存先が変更されます。


Unity failed to create 2D texture

7年前のvistaPCでUnityの環境構築をしてみました。

インストールはEXEを実行するだけなので簡単です。
Android用のAPKファイルをビルドするにも触ってればできてしまいます。
タッチイベントのテストは実機が必要です。unityリモートアプリを入れてつなげばOKです。

環境構築は楽勝かと思いきやアセットストアが表示されない

さっそくエラーが発生。
・以下コンソール
failed to create 2D texture
allocation 0x00000000 already registered @ C:/BuildAgent/work/d63dfc6385190b60/Runtime/GfxDevice/d3d11/TexturesD3D11.cpp:l466 size 6291456; now calling from C:/BuildAgent/work/d63dfc6385190b60/Runtime/GfxDevice/d3d11/TexturesD3D11.cpp:l466 size 3145728?

ダイレクトエックスの不具合だというのが見て取れますが、
ネットで検索をかけても解決方法が見つからない。
海外のQAを見る限りでは.Netフレームワークの更新だとか、DX11をインストールしなおすとかいろいろ出てきます。
自分は何となくUnityウインドウ上部DX11 on DX9をいう表示が気になって何を意味しているかを調べてみました。

解決策
グラボが対応しているDirect Xのバージョンで起動してみる。
以下起動パラメーター。
 -force-d3d9
 -force-d3d10
 -force-d3d11

とりあえずこれでアセットをダウンロードできます。
ブラウザからだと「Unityで開く」はなぜか使えません。
旧型GPUやVista環境だと苦労するかも?


2014年6月6日金曜日

HotMailのセキュリティ

Microsoftのセキュリティ情報の変更ができなくなりました。

まだ準備ができていません
30 日間の待機期間は 2014/X/X に終了します。それまでは、元のセキュリティ情報が見つからない限りアカウントにはサインインできません。
メールの確認
XXX@co.jp宛てにお送りしたメール内の指示に従って、セキュリティ情報の置き換えを続けてください。メールに記載されているリンクの有効期限はもうすぐ切れるため、この操作はすぐに行ってください。

電話番号を登録するしかないようです。

2014年5月14日水曜日

水没したスマホのその後

スマホが水没して一か月たちました。特に問題なく動いています。

わかりにくいですが画面右下の水没マークはまっ赤になっています。
このスマホ(HTC EVO WIMAX)は3年以上使用しています。
ポケットWIFIのようにしよしたし、デバッグや処理の重いプログラムのテストにもしようしていました。
電池パックが爆発しないか心配ですが、まだまだ十分実用に耐えます。さすがスマホメーカーのHTCです。

auの+WIMAXは通信量の制限(帯域制限)がない唯一のプランです。出先で制限なくネットが使えないと仕事ができなので機種編できません。WIMAX対応スマホだと二世代後のHtcJなどもありますが電池持ちは、この機種が一番です。

2014年5月12日月曜日

GooglePlayストアアプリの自動更新

非対応
GooglePlayストアアプリがいつの間にかメニューボタンに対応しなくなっていました。
ストアアプリは強制的に自動更新されてしまうので、気付かないうちにアップデートされています。
ついでにアプリの設定が変更されていることも。。

2014年4月23日水曜日

Amazon 3D phone

3Dジェスチャー去年からAmazonのスマホの噂がいろいろされています。
裸眼3Dディスプレイが使用されることは以前から噂になっていました。
最近の情報だとカメラが6個搭載されていて、前面の4つのカメラで3D表示された空間をタッチできる機能があるそうです。SFでよくある3Dジェスチャー機能です。
背面の2つのカメラは3D撮影用かもしれません。

詳しいスペックはまだわかりません。3Dディスプレイだと解像度はHDまでだと思います。SIMフリーも期待できますが、日本の周波数帯に合わせてくれるのだろうか。3Dカメラがまた流行ることがれればMPOファイルを利用したアプリの人気ができるかもしれません。

2014年4月15日火曜日

Error launching installer

海外のフリーソフトのインソーラーを起動すると「Error launching installer」とエラーメッセージが表示されることがあります。

日本語(unicode)環境向けに作られていないためのエラーのようです。

解決方法はフォルダパスに日本語が入らない場所で実行するだけです。
他にも不具合が発生するかもしれませんのでコントロールパネルから言語の設定で、unicodeに対応していないプログラムの言語を英語(米国)にしておくと良いかもしれません。

2014年4月9日水曜日

ウインドウズXPのサポート終了

ウインドウズXPとオフィス2003のサポートが終了しました。

サポート終了後にOSの換装や買い替えを行うお客さんは結構多いです。

サポートが終了
最新のパッケージ版のWindowsが1.2万円ほどで買えるのでパソコンのスペックに応じてOSの換装や買い替えを提案しています。

問題はオフィスです。パッケージ版のオフィスは2.5万円もします。外国版だと1万円くらいで変えるのに、MSは日本対してぼったくってます。※日本語バッチを作れば安上がりか

パッケージ版の利点を知らない方は、OS、Office入りの4~5万円くらいのパソコンを買うほうがお得感があるかもしれません。

サポートが終了しても気にしない方もたくさんいるようです。
何故サポートが切れると危険かと問われると「ハッカーが本気で攻撃をしてくるかもしれない」としか答えられません。

サポートが切れるとXPのセキュリティーホールが発見、公開されても修正されません。
XPとVISTA以降のOSは構造が違うので2Kの時のようにサポートOSのバッチを当てることも無理だと思います。オフィスのサポートはあまり気にしなくてもいい気がします。

デルジャンクパソコンリカバリーディスク


現在使用している3台のPCはすべてデル製のビスタです。発売当初は重くて不評のビスタでしたが、あの時代のPCスペックにWIN7を出しても同じ結果になったと思います。
デルの製品はウインドウズのプロダクトコードがマザボ(BIOS)に入っており、リカバリーディスクはデル制はすべて共通です。なのでジャンク品からの再生が捗ります。
ノート以外ジャンク品で組んだPCです。すべて2007年代のパソコンですが後3年は戦えそうです。




2014年4月6日日曜日

スマホが水没した場合の対処

スマホを水の中に落としてしまいました。。

水の中に

水没マークが真赤です。

カメラの内側にも水滴が溜まっていました。

仕方がないので、携帯が使えないまま花見の待ち合わせ場所へ行きました。
待ち合わせで連絡が取れないと不便ですね。
SIMカードを差し替えられる端末だったらよかった。

バッテリーをはずして一日放置後、スマホの電源が入りました。

たぶん、水の入ったまま電源を入れるとショートして死にます。
水の入り方によっては水没した瞬間にアウトになることも?