2016年11月24日木曜日

unity シーンのコピー

Unityでシーンを直接コピーすることはできません。
なのでシーン上のオブジェクトをプレファブとしてコピーして再配置することになります。オブジェクトを入れ子にしておくと簡単にコピーができます。

二つの方法


  1. プレファブ経由してオブジェクトをコピー
  2. エクスポートしてファイル名を変更してインポートし直す

ちょっと面倒ですね。

Unityでカウントダウンするサンプル

1秒ごとに数値を減らしていくサンプルです。
//5から0へカウントダウン
    float time = 0.0f;
    void Update () {
        time = time + Time.deltaTime;

        text.text = ((int)Mathf.Ceil (5f - time)).ToString();

        if(time >= 5.0f){
            time = 0;
            //Debug.Log("5秒後");

        }
    }

2016年10月25日火曜日

Unity Byte配列をspriteに変換する


Textureとspriteのbyte配列変換例。
16*16のPNGをリソースから読み取ります。
画像ファイルをバイト配列として読み取る。拡張子は.bytesにする
        //Resources/Sprites/masuku2.bytes
        TextAsset text_asset = Resources.Load("Sprites/"+"画像") as TextAsset;
        byte[] gazo = text_asset.bytes;

        SpriteRenderer srt= GameObject.Find("
Sprite").GetComponent<SpriteRenderer>();

        Texture2D texture = new Texture2D (0, 0);
        texture.LoadImage(gazo);
        texture.filterMode = FilterMode.Point;

        srt.sprite = Sprite.Create (texture, new Rect (0, 0, 16, 16), new Vector2 (0.5f, 0.5f));

Sprite.Createの第二引数は中心点の指定です。画像サイズが同じで位置を変えずにスプライトの切り替えをする場合は0.5fです。

2016年10月22日土曜日

GPGSでテストする際の注意点

GPGSでテストする際の注意点まとめ。

GPGS画面は表示されるがログインできない


  1. テストする際はキーストアを使う
  2. クライアントIDがまちがっている
  3. 登録されているゲームリンクとペッケージ名を同じにする

ParticipantIdとsenderIdの値


  • 値はp_CXXXXXXXXXX(大小英数)

ルーム作成にランダムでクライエント名が作成される。
ParticipantIdのリストには自分のIDも含まれる。
リストを名前順でソートして共通の番号を振り分けることができる。

2016年9月12日月曜日

Vista用 画面録画ソフト Open Broadcaster Software

画面録画のフリーソフト「Open Broadcaster Software」をVistaで使用してみました。
Vista用の無料でロゴや制限のない録画ソフトはOpen Broadcaster Softwareくらいのようです。公式にはVistaはサポートされていない。それに他の録画ソフトと違い、FLVやMP4で保存が効くのでファイルサイズが小さくて済みます。

エラーと解決

d3dx10 43 dll not found
Compilation of vertex shader'shaders/DrawTexture.vShader'failed, result = 80004005

解決方法

以下のDirectXランタイムをインストールする。
https://www.microsoft.com/en-us/download/confirmation.aspx?id=8109

2016年9月6日火曜日

リアルタイムマルチプレイ アクションゲーム


無料androidアプリ「リーマンズ」をリリースしました。

罠回避系のアクションげーむです。
全8ステージ。
ランダムマッチまたは招待でマルチプレイが可能です。
最大8人同時プレイ可能です。

通信量は二人プレイで15分遊んでも500Kほどしかかかりません。
8人で長時間遊んでも問題ないレベルに通信を抑えています。

ランキングも表示されるのでタイムアタック等にチャレンジすると面白いかも?
マルチプレイだとスコアボーナスが入ります。

2016年9月5日月曜日

Google Play なりすましに関するポリシー違反

販売されているタイトルに似た名前のアプリを公開したところポリシーに引っかかりました。以前もフリーの素材を使用して審査が通らなくなったことがあります。

原因

フリー素材をアイコンに使用した。
類似する名前のアプリが存在する。

解決方法

フリー素材の使用を極力控える。特にアイコンは一から独自に作成したほうが良い。
ストアでアプリ名を検索して似た名前が無いか確認する。

以下メッセージ

デベロッパー各位

(パッケージ ID )は、審査の結果、なりすましに関するポリシーに違反しているため、Google Play での公開が停止されました。

次の手順

違反の詳細と例について、なりすましに関する記事を確認します。
知的財産権に関するポリシーなど、デベロッパー プログラム ポリシーに含まれるすべてのポリシーにアプリが準拠しているかどうかを確認します。お客様のアプリが再度ポリシーに違反した場合、追加の措置を取らせていただくことがありますので、ご注意ください。
デベロッパー コンソールにログインし、新しいパッケージ名と新しいアプリ名を指定して、ポリシーに準拠したアプリを送信します。
コンテンツの使用許可を受けている場合

Google サポートチームに、使用が正当だとする根拠をお知らせください。正当だとする根拠とは、たとえばアプリでこのコンテンツを使用する許可を受けていることの証明などの法的な根拠を指します。

今後さらにアプリが停止された場合、その停止がいかなる性質であっても、デベロッパー アカウントの停止や、関連する Google アカウントの調査および停止につながるおそれがあります。アカウントが停止された場合は、支払いが中止され、Google が過去の売上代金や関連する料金(チャージバックや取引手数料など)を回収することがあります。

ポリシーをご確認のうえ、今回の停止措置が誤りだと思われる場合は、Google の ポリシー サポートチームまでお問い合わせください。担当者が 2 営業日以内にご連絡いたします。

今後ともよろしくお願いいたします。

Google Play 審査チーム

Hi Developers at Recitative,

After review, Multiplayer Trap Action, jp.recitative.action01, has been suspended and removed from Google Play as a policy strike because it violates the impersonation policy.

Next Steps

Read through the Impersonation article for more details and examples of policy violations.
Make sure your app is compliant with the Impersonation and Intellectual Property policy and all other policies listed in the Developer Program Policies. Remember additional enforcement could occur if there are further policy issues with your apps.
Sign in to your Developer Console and submit the policy compliant app using a new package name and a new app name.
What if I have permission to use the content?

Contact our support team to provide a justification for its use. Justification may include providing proof that you are authorized to use the content in your app or some other legal justification.

Additional suspensions of any nature may result in the termination of your developer account, and investigation and possible termination of related Google accounts. If your account is terminated, payments will cease and Google may recover the proceeds of any past sales and/or the cost of any associated fees (such as chargebacks and transaction fees) from you.

If you’ve reviewed the policy and feel this suspension may have been in error, please reach out to our policy support team. One of my colleagues will get back to you within 2 business days.
Regards,

>異議申し立てをすると
The Google Play Review Team

Dear Google Play Developer,

Thanks for getting in contact with Google Play. Your appeal has been submitted successfully and will be reviewed by a specialist. The ticket number for your appeal is referenced in the subject of this message, and you should receive a response from us within 72 hours.
Please refrain from sending duplicate appeals as this will not reduce response time.
Thanks,
The Google Play Team

よほど悪質でない限りアカウントが凍結されることはありません
異議申し立ての証明書は素材の利用規約などのリンクやアプリ名称の一般性を説明できれば承諾されます。

以下審議結果
ご担当者 様

Google Play チームにお問い合わせいただき、ありがとうございます。
Google Play ではお客様からの異議申し立てを審査いたしました。

結果としてこの異議申し立てを承認し、お客様のアプリ、XXを元に戻させていただきました。

Google Play ストアにアプリが表示されるようにするには、デベロッパー コンソールにログインし、[更新を送信] をクリックしてアプリを再送信していただく必要があります。

他にご不明な点がありましたらお知らせください。

今後とも Google Play を宜しくお願い申し上げます。

Google Playチーム

2016年9月1日木曜日

GPGSでマルチプレイゲーム作成の注意点


GPGSでマルチプレイヤーを使う際の注意点

  1. keyストアはデバッグ用を使わない(SH1の変更ができないので
  2. ゲームサービスは予め公開済みにしておく (テスト公開の必要性を感じない
  3. リーダーボードはテスト用を作る (リーダーボードをリセットできない

GPGSリアルタイムマルチプレイヤーを使用したアプリ

Unityでプロジェクトをコピーするには

unityのエクスポートでプロジェクトをコピーすると、
タグとレイヤーの情報がない。
プロジェクトセッチングの情報は良いとしてもタグとレイヤーがないとゲームが動きません。

プロジェクトのコピー方法


  1. プロジェクトフォルダのProjectSettingsのTagManager.assetを手動でコピーする。
  2. コピー元のプロジェクトをインポートする

リアルタイムマルチプレイのアクションゲームをリリース



グーグルプレイゲームサービスをしようしたマルチプレイアクションゲームをリリースしました。
リアルタイムマルチプレイのアクションゲームです。
最大8人の同時プレイができます。
//ボタン説明
・Exit 終了します。
・C カメラを仲間視点にします。
・restrat 残機を消費して復活します。
8人でプレイをしてみたいですが、参加者が多くないと難しいようです。
招待以外にランダムマッチングもできるので気軽に協力プレイができます。
近くのプレイヤーを招待することもできます。

UnityプラグインでGooglePlayGameServiceにサインインできない

新しいプロジェクトでGooglePlayGameServiceにサインインできずにはまっていました。
どうやらフィンガープリントを使いまわしていたせいです。
フィンガープリント(mac)取得方法。
keytool -v -list -keystore ~/.android/debug.keystore
毎回取得しましょう・・・

注意点


ゲームサービス画面からSH1とアプリの関連付けを解除できません。
debug.keystoreを使うよりもアプリをビルドするための自分のキーストアを使用したほうが手間が省けます。
unityで作成したキーストアをそのまま使えます。

keystoreのディレクトリ$ keytool -v -list -keystore Recitative.keystore
自分で設定したパスワード

2016年8月31日水曜日

unityエラー TypeLoadException: Could not load type ResolverVer1_1

Unityを5.4に更新したところ以下のエラーが発生しました。
TypeLoadException: Could not load type 'ResolverVer1_1'.System.Type.GetType (System.String typeName, Boolean throwOnError) (at /Users/builduser/buildslave/mono-runtime-and-classlibs/build/mcs/class/corlib/System/Type.cs:471)

原因

GooglePlayGameServiceのエラーです。

解決方法

Assets/PlayServicesResolver/Editor/PlayServicesResolver.csの以下を書き換える
    static IResolver Resolver
     {
         get
         {
             if (_resolver == null)
             {
//なぜかクラスが見つからない
                 //Type type = Type.GetType(CurrentResolverName, true);
                 //_resolver = Activator.CreateInstance(type) as IResolver;
                 _resolver = new ResolverVer1_1();//直接インスタンスを作る
             }
             return _resolver;
         }
     }

2016年8月30日火曜日

unityエラー GfxFramebufferGLES: An active RenderTargetSetup has dangling pointers.

unityリモート4とunity5.4.0 3fでリモートテスト中に以下のエラーが発生しました。
GfxFramebufferGLES: An active RenderTargetSetup has dangling pointers.
とりあえず動作に支障はないので放置です。

原因

unity5.4.0とunityリモート4の不具合です。
公式フォーラムの回答待ちです。

2016年8月12日金曜日

Unity スクリプトから色をつける

スクリプトから色をつける
unityでスクリプトから色をつけるサンプル。
//レンダラーマテリアル
Renderer rr =jiki.GetComponent<Renderer>();
rr.material.color = new Color (1f, 1f, 0f, 1f);
//スプライトレンダラー
SpriteRenderer sr  =jiki.GetComponent<SpriteRenderer>();
sr.color =new Color (1f, 1f, 0f, 1f);
色付けにはレンダラーマテリアルかスプライトレンダラーの二パターンあります。
2Dのスプライトを使う分にはスプライトレンダラーでいいと思います。

2016年8月5日金曜日

GooglePlayGameServiceマルチプレイヤーでプレイヤー毎に番号を振る

 GooglePlayGameServiceのリアルタイムマルチプレイヤーで番号を振り分けるサンプルです。振り分けた番号を添え字にしてゲームオブジェクトを関連付けています。自分にはダミーのゲームオブジェクトを関連付けています。

 public void OnRoomConnected(bool success) {
        if (success) {
            //my id
            mMyParticipantId = GetSelf().ParticipantId;
            // id 参加者のIDを取得 自分も 部屋が接続された後、あなたが呼び出すことによって、室内の参加者を一覧表示することができます
            List<Participant> pl = PlayGamesPlatform.Instance.RealTime.GetConnectedParticipants();

            string[] tmp = new string[pl.Count];
            for (int i = 0; i < pl.Count; i++) {
                tmp [i] = pl [i].ParticipantId;
            }
            //ソート
            Array.Sort(tmp, StringComparer.CurrentCulture);

//管理番号

                int j = 1;
            プレイヤー = new Transform[tmp.Length];//add 0705
            for (int i = 0; i < tmp.Length; i++) {
                if (mMyParticipantId == tmp [i]) {
                    myNo = i;
                    自分[i] = GameObject.Find ("Dami").transform;
                } else {
                    
 他プレイヤー[i] = GameObject.Find ("Taki"+j.ToString()).transform;
                    j++;
                }
            }

        } 
    }

2016年8月4日木曜日

AudioSourceをスクリプトからインスタンスにする。New AudioSource

AudioSourceはNew AudioSourceで実体化できません。
gameObject.AddComponent<AudioSource>()で実体化できます。
以下サンプル
using UnityEngine;
using System.Collections;
//
Resources/Oto/filename.mp3
public class SousaOto {
    //Oto
    public AudioClip bgm,jump,koin,hou,goal,sasaru;

    public AudioSource asj,asb,ask;

    private MonoBehaviour mb;

    public SousaOto(MonoBehaviour inmb){
        mb = inmb;
        asj = inmb.gameObject.AddComponent<AudioSource>();//new AudioSource ();
        asb = inmb.gameObject.AddComponent<AudioSource>();
        ask = inmb.gameObject.AddComponent<AudioSource>();
        jump = readMp3 ("Oto/jump");
        sasaru = readMp3 ("Oto/sasatu");
        koin = readMp3 ("Oto/coin05");
        hou = readMp3 ("Oto/taihou");
        goal = readMp3 ("Oto/kuria");
    }


    public AudioClip readMp3(string fileName){
        AudioClip ac = (AudioClip)Resources.Load (fileName);
        return ac;

    }
}

音を鳴らすクラスのサンプルです。

unity バイト配列の連結と変換サンプル

unityでバイト配列操作のメモ。
//バイト配列から値型へ変換
public static float GetMyNo(this byte[] ba)
{
float x;
x = BitConverter.ToSingle (ba, 2);
return x;
}
//バイトデータの比較
switch (test[0]) {
case (byte)'P':
Debug.Log ("P");
test = BitConverter.GetBytes ('N');
break;
case (byte)'I':
Debug.Log ("I");
test = BitConverter.GetBytes ('S');
break;
case (byte)'T':
Debug.Log ("T");
test = BitConverter.GetBytes ('P');
break;
case (byte)'S':
Debug.Log ("S");
test = BitConverter.GetBytes ('T');
break;
case (byte)'N'://ニックネーム
Debug.Log ("N");
test = BitConverter.GetBytes ('I');
break;
//各種値を一つのバイト配列へ変換
public static byte[] GetJikiByte(this Transform tr,int myNo, int jyo,bool muki)
{
byte[] ba;
ba = RenkatuByte (
BitConverter.GetBytes ('P'),
BitConverter.GetBytes (myNo),
BitConverter.GetBytes (tr.position.x),
BitConverter.GetBytes (tr.position.y),
BitConverter.GetBytes (jyo),
BitConverter.GetBytes (muki)
);
return ba;

}

//複数のバイト配列を一つのバイト配列へ連結
public static byte[] RenkatuByte(byte[] iti, byte[] nii, byte[] sann,byte[] yon,byte[] gou)
{
byte[] ret = new byte[iti.Length + nii.Length + sann.Length+yon.Length+gou.Length];
Buffer.BlockCopy(iti, 0, ret, 0, iti.Length);
Buffer.BlockCopy(nii, 0, ret, iti.Length, nii.Length);
Buffer.BlockCopy(sann, 0, ret, iti.Length + nii.Length,sann.Length);
Buffer.BlockCopy(yon, 0, ret, iti.Length + nii.Length+sann.Length,yon.Length);
Buffer.BlockCopy(gou, 0, ret, iti.Length + nii.Length+sann.Length+yon.Length,gou.Length);
return ret;
}
//6つの場合
public static byte[] RenkatuByte(byte[] iti, byte[] nii, byte[] sann,byte[] yon,byte[] gou,byte[] roku)
{
byte[] ret = new byte[iti.Length + nii.Length + sann.Length+yon.Length+gou.Length+roku.Length];
Buffer.BlockCopy(iti, 0, ret, 0, iti.Length);
Buffer.BlockCopy(nii, 0, ret, iti.Length, nii.Length);
Buffer.BlockCopy(sann, 0, ret, iti.Length + nii.Length,sann.Length);
Buffer.BlockCopy(yon, 0, ret, iti.Length + nii.Length+sann.Length,yon.Length);
Buffer.BlockCopy(gou, 0, ret, iti.Length + nii.Length+sann.Length+yon.Length,gou.Length);
Buffer.BlockCopy(roku, 0, ret, iti.Length + nii.Length+sann.Length+yon.Length+gou.Length,roku.Length);
return ret;
}

unityエラー Operation is not valid due to the current state of the object

インスペクタからAudioClipを設定しようとしたところ以下のエラーが発生。
InvalidOperationException: Operation is not valid due to the current state of the object
System.Collections.Generic.Stack`1[System.Boolean].Pop ()
UnityEditor.EditorGUI.EndDisabledGroup () (at /Users/builduser/buildslave/unity/build/Editor/Mono/EditorGUI.cs:211)
UnityEditor.EditorGUI+DisabledGroupScope.CloseScope () (at /Users/builduser/buildslave/unity/build/Editor/Mono/EditorGUI.cs:197)
UnityEngine.GUI+Scope.Dispose ()
UnityEditor.Editor.OptimizedInspectorGUIImplementation (Rect contentRect) (at /Users/builduser/buildslave/unity/build/artifacts/generated/common/editor/EditorBindings.gen.cs:234)
UnityEditor.GenericInspector.OnOptimizedInspectorGUI (Rect contentRect) (at /Users/builduser/buildslave/unity/build/Editor/Mono/Inspector/GenericInspector.cs:33)
UnityEditor.InspectorWindow.DrawEditor (UnityEditor.Editor editor, Int32 editorIndex, Boolean rebuildOptimizedGUIBlock, System.Boolean& showImportedObjectBarNext, UnityEngine.Rect& importedObjectBarRect) (at /Users/builduser/buildslave/unity/build/Editor/Mono/Inspector/InspectorWindow.cs:1211)
UnityEditor.InspectorWindow.DrawEditors (UnityEditor.Editor[] editors) (at /Users/builduser/buildslave/unity/build/Editor/Mono/Inspector/InspectorWindow.cs:1028)
UnityEditor.InspectorWindow.OnGUI () (at /Users/builduser/buildslave/unity/build/Editor/Mono/Inspector/InspectorWindow.cs:352)
System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) (at /Users/builduser/buildslave/mono/build/mcs/class/corlib/System.Reflection/MonoMethod.cs:222)

TypeLoadException: Could not load type 'ResolverVer1_1'.
System.Type.GetType (System.String typeName, Boolean throwOnError) (at /Users/builduser/buildslave/mono/build/mcs/class/corlib/System/Type.cs:471)
GooglePlayServices.PlayServicesResolver.get_Resolver () (at Assets/PlayServicesResolver/Editor/PlayServicesResolver.cs:96)
GooglePlayServices.PlayServicesResolver.OnPostprocessAllAssets (System.String[] importedAssets, System.String[] deletedAssets, System.String[] movedAssets, System.String[] movedFromAssetPaths) (at Assets/PlayServicesResolver/Editor/PlayServicesResolver.cs:117)
System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) (at /Users/builduser/buildslave/mono/build/mcs/class/corlib/System.Reflection/MonoMethod.cs:222)
Rethrow as TargetInvocationException: Exception has been thrown by the target of an invocation.
System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) (at /Users/builduser/buildslave/mono/build/mcs/class/corlib/System.Reflection/MonoMethod.cs:232)
System.Reflection.MethodBase.Invoke (System.Object obj, System.Object[] parameters) (at /Users/builduser/buildslave/mono/build/mcs/class/corlib/System.Reflection/MethodBase.cs:115)
UnityEditor.AssetPostprocessingInternal.PostprocessAllAssets (System.String[] importedAssets, System.String[] addedAssets, System.String[] deletedAssets, System.String[] movedAssets, System.String[] movedFromPathAssets) (at /Users/builduser/buildslave/unity/build/Editor/Mono/AssetPostprocessor.cs:27)
UnityEditor.AssetDatabase:Refresh()
GooglePlayGames.Editor.GPGSUpgrader:.cctor() (at Assets/GooglePlayGames/Editor/GPGSUpgrader.cs:102)
UnityEditor.EditorAssemblies:SetLoadedEditorAssemblies(Assembly[])

原因

インスペクタのGUIに不具合が起きている。

解決方法

該当スクリプトをインスペクタで使用しない。
audioclipをスクリプトから読み込ませることにしました。

2016年7月29日金曜日

Unity5でUnity Remote4は使用できる?

Unity Remote4はUnity version4系専用なのか調べてみました。
設定
設定
結果はUnity5でも問題なく動作します。設定も同じです。
そもそもUnity Remote5というアプリは存在しない。

設定方法

メニューのeditのproject settgin>エディタのdeviceをandroidにする。
あとはUnity Remote4を起動した状態で、unity5のプレイボタンを押すだけ。

注意点

偶に起動しないことがあります。Unity Remote4かUnity5の再起動をしてみてください。
それと起動に若干時間がかかることがあります。

2016年7月26日火曜日

Unity シーンの切り替わりイベント

Unityでシーンが切り替わるタイミングでスクリプトを実行したい場合。
void OnLevelWasLoaded(int level) {}でシーンの切り替わる度にイベントが実行されます。

注意点

OnStartとOnLevelWasLoadedはどちらかのみ実行されます。
OnLevelWasLoadedを実装しているオブジェクトが始めて読み込まれた際は実行されません。
永続化したオブジェクトに使用することでOnStartの代わりにイベントが起こせます。
1,オブジェクトの読み込み
OnStartのみ実行される。
2〜シーンの切り替わり
OnLevelWasLoadedのみ実行される。

Uniy2d 画面の拡大。ズームインとズームアウト。

Unityの2Dゲームでの画面の拡大。カメラのズームとアウトのサンプルソース。
    private GameObject came=null;
    private Camera cs;

void Start() {
        came = GameObject.Find ("Main Camera");
        cs = came.GetComponent<Camera>();
        cs.orthographicSize = 3f;
    }

orthographicSizeが小さいほど拡大されます。
3Dの場合はカメラの距離でズームインとズームアウトしてきましたが。
2Dno場合はZ軸が使えないので表示するサイズを変更します。

2016年7月22日金曜日

ポケモン GO必要スペック

海外でブームのポケモン goが本日配信されました。
早速ダウンロードを・・・通信が重い。。

ポケモンgoの最低動作環境

  • android4.4
  • メモリ1g
  • GPS搭載

推奨動作環境

  • メモリ2g
  • ジャイロセンサー搭載
二万円程度のスマホでも動作しますがジャイロセンサーがないとARは使用できません。

ジャイロセンサーが無い場合

AR表示、カメラを使用した表示ができません。普通のゲーム画面でのプレイになります。見た目が変わるだけでゲームをプレイする上でのデメリットはありません。
 GPSが無い場合は致命的です。ほぼ移動できないからです。wifiエリアをワープしながらポケモンを捕まえることになり、根気がいります。

おすすめのスマホ

  • ZenFone2
  • ZenFone3(日本での発売は8月上旬〜9月中頃
4万円以下でジャイロスコープ搭載です。その他性能も高いです。
goやlaserはジャイロセンサーが付いていません。

2016年7月20日水曜日

Unityエラー Google Play Games not configured!

Googleゲームサービスを実機でテストしようとして以下のエラーが発生
Google Play Games not configured!
Warning!!  Google Play Games was not configured, Game Services will not work correctly.

原因

Googleゲームサービスの設定不足

解決方法

window>setup>Android setUpにクラス名とリソースdifinisionを設定する。
クラス名は適当で良い。
以下のXMLを得るには開発者コンソールからゲームサービスの実績を一つ作成する必要が有る。
<?xml version="1.0" encoding="utf-8"?>
<!--
Google Play game services IDs.
Save this file as res/values/games-ids.xml in your project.
-->
<resources>
  <string name="app_id">XXXXXXX</string>
  <string name="package_name">jp.sample</string>
  <string name="achievement_">XXXXXX</string>
</resources>

Unityエラー Failed to compile resources with the following parameters:

SDKのアップデート後にunityでコンパイルをしたところ以下のエラーが発生。
Failed to compile resources with the following parameters:
-bootclasspath "/Users/xxx/Desktop/DEV/adt-bundle-mac-x86_64-20140702/sdk/platforms/android-24/android.jar" -d "/Users/xxx/Downloads/play-games-plugin-for-unity-master/samples/New Unity Project/Temp/StagingArea/bin/classes" -source 1.6 -target 1.6 -encoding UTF-8 "android/support/v4/R.java" "com/google/android/gms/R.java" "com/google/android/gms/base/R.java" "com/google/android/gms/drive/R.java" "com/google/android/gms/games/R.java" "com/google/android/gms/nearby/R.java" "com/google/android/gms/plus/R.java" "com/google/example/games/mainlibproj/R.java" "jp/samplem/R.java"
警告: /Users/xx/Desktop/DEV/adt-bundle-mac-x86_64-20140702/sdk/platforms/android-24/android.jar(java/lang/Object.class): メジャー・バージョン52は、このコンパイラでサポートされている最新のメジャー・バージョン51より新しいです。
  コンパイラのアップグレードをお薦めします。
警告: /Users/yuuki/Desktop/DEV/adt-bundle-mac-x86_64-20140702/sdk/platforms/android-24/android.jar(java/lang/AutoCloseable.class): メジャー・バージョン52は、このコンパイラでサポートされている最新のメジャー・バージョン51より新しいです。
  コンパイラのアップグレードをお薦めします。
警告2個
エクリプスでも以下のエラー
Parsing Data for android-24 failed
Unsupported major.minor version 52.0

原因

android N SDKに開発環境が対応していない。

解決方法

SDKマネージャーからandroid N SDKをする。

2016年7月18日月曜日

unityエラー Google.JarResolver.ResolutionException: Cannot find candidate artifact

unityのgoogle Game serviceマルチプレイヤーを最新にしたところ以下のエラーが発生
Google.JarResolver.ResolutionException: Cannot find candidate artifact for com.google.android.gms:play-services-games:8.4+
  at Google.JarResolver.PlayServicesSupport.DependOn (System.String group, System.String artifact, System.String version) [0x00000] in <filename unknown>:0 
  at GooglePlayGames.Editor.GPGSDependencies..cctor () [0x00024] in /Users/yuuki/Downloads/play-games-plugin-for-unity-master/samples/YSGameService/Assets/GooglePlayGames/Editor/GPGSDependencies.cs:46 
UnityEditor.EditorAssemblies:SetLoadedEditorAssemblies(Assembly[])

解決方法

以下を更新する。
AndroidSDKマネージャー>Extras

  • Android Support Repository
  • Android Support Library
  • Google Play Services
  • Google Repository
要は最新版の組み合わせが必要らしい。

2016年7月16日土曜日

unityでReal-Time Multiplayerを使ってみた。

Google Play Games plugin for Unity:Real-Time Multiplayerを使ってみました。
play-games-plugin-for-unityのダウンロードは以下
https://github.com/playgameservices/play-games-plugin-for-unity/blob/master/RTMP.md

ソースの変更箇所

追記 最新版のプラグインでは書き換えの必要なし
  • ロガーの競合

unity5のLoggerと競合するのでOurUtilsのLoggerを別名に変更します。
Loggerの一部メソッド名の先頭を小文字から大文字する必要あり

  • レンダラーの書き換え

unity5からレンダラーをゲットコンポーネントしないと使えません。

準備が終わるとメッセージ

The Google Play Games Plugin for Unity version 0.9.02 is now ready to use. If this is a new installation or of you have just upgraded from a previous version, please click the 'Google Play Games' menu and select 'Android Setup' and/or 'iOS Setup' to set up your project to build for the corresponding platforms.

デベロッパーセンターでゲームサービスの追加

アプリを登録する必要はありません。画像等も必要なし。
フィンガープリントを用意します(mac)
$ keytool -v -list -keystore ~/.android/debug.keystore
クライアントIDをゲットしてunityのメニューのゲームサービスのsettingに追加します。

サンプルのquizlaceを動かしてみた。

とりあえずサンプルのquizlaceで機能を確認。
実機orエミュでしか動きません。
とりあえずランダムマッチでつながりました。
サンプルは旧バージョンのunity向けのためか100%動作しているかは不明。
リアルタイムで情報が送受信されているのは確認。
招待関係はメッセージが届きませんでした。
受信か送信のどちらかにエラーがあるのかもしれません。
追記 招待にラグがあっただけでした。問題なく機能します。

2016年7月13日水曜日

Googleログインできない to access your account you must sign in on the web touch next to start browser sign in

スマホからgoogleアカウントにログインしようとしたところ以下のエラーが発生。
to access your account you must sign in on the web touch next to start browser sign in
どうやら不審なアクセスと思われたようです。
一度二段階認証をする必要がありました。

解決方法


  • 今までそのgoogleアカウントを使用していた端末でログインする
  • ログイン可能な端末から再設定用メールアドレスを設定する
  • 電話番号を入力して認証番号を受け取る

Googleは位置情報やIPアドレスを見て判断しているのかもです。

2016年6月16日木曜日

andy エラーコード:940 インストールできない場合

andyでパズドラ、モンスト等のゲームがインストールできない対処。

  • ご使用の端末には対応していません 
  • googleplay エラーコード:940

解決方法

ホストOSの再起動

動作テスト中のゲームアプリ


  • モンスターストライク
  • モンストスタジアム
  • パズルアンドドラゴン
  • 白猫プロジェクト
  • グラブル
  • fate GO

2016年6月13日月曜日

安全のため、あなたのTwitterアカウントはロックされました。

そういえばツイッターのアカウント情報が数千万個流出したそうですね。
観覧用のアカウントからメールが届いていました。
ツイッター連携しているアプリなどに影響しそうですね。

以下メッセージ

安全のため、あなたのTwitterアカウントはロックされました。
Twitterと関係ないサービスやウェブサイトによって、このアカウントは乗っ取られています。
アカウントの安全のために、@ のアカウントをロックしました。再ログインするためにはパスワードを変更してください。

具体的な影響

なにやら勝手にツイートされていました。
100件ほど悪意のあるサイトへのスパムがされていました。
自分は今までツイートしたことがありません。

ツイッターとフェイスブックはそろそろ終わりかも。

2016年6月3日金曜日

サイトミックスでサイトが削除できない

 無料レンタルサーバーのサイトミックスを使用していましが、あまりにも不具合が多いのでサイトを移転することにしました。
しかし、サイトを削除できない。。
管理画面からは削除されていますが削除済みのサイトにアクセスできてしまいます。

  1. サイトを削除
  2. 2ヶ月後 サイトが存在していることに気づく
  3. サポートへ連絡
  4. 1ヶ月後 返信がくる
  5. 二週間後 サイトが一つ削除された
  6. メイン以外のサイトが削除されていない・・・

厄介なのが同じドメインのアカウントを再取得できてしまうことです。
同じドメインを使用しても同じサーバーを使用するとは限らない
なので、FTPから削除することもできません。まさにサイトミックス!
しっかりとした有料プランのある無料サーバーが一番ですね・・・

2016年5月27日金曜日

警告、あなたのコンピューターでウイルスが検出されました。

警告、あなたのコンピューターでウイルスが検出されました。
直ちに提供された番号へ連絡してください。
このメッセージが表示されたということはあなたの個人情報、クレジットカード番号が危険晒されているということです。
詐欺サイトの画像


詐欺サイトを発見したので載せてみました。

http://c4o63wqz0f.top/a/jm/index.html
上記サイトを開くとダイアログボックスのループと音声の再生が始まります。
勿論、ウイルスには感染していません。

メッセージ

c4o63wqz0f.top の内容:
注意:あなたのコンピュータでウイルスが見つかりました!
 03-4588-8350  に電話し、危険なウイルスを削除し大事な情報を保護しましょう。サポート関係者に繋がるまで、コンピュータやインターネットを使用しないでください。
 03-4588-8350  に今すぐお電話ください。

7 つのコメント

TimVito99 - トピック:サポート
おかげで、これは完全に働きました!
TheDarth - トピック:サポート
私は削除する方法につい、どこにでも探していると最終的にこの会社を見つけた後にできました
SallyB - トピック:サポート
あー!今、私のコンピュータがスムーズに再び実行されています。
Doug - トピック:サポート
この素晴らしいソフトウェアをありがとう!
SallyB - トピック:サポート
これは私の問題を修正しました。私はコンピュータを購入する必要があると思いました。
FindingMary - トピック:サポート
私は思ったよりも、このソフトウェアは、より多くのアドウェアを見つけました。
JerryQB - トピック:サポート
友達にこのソフトウェアをお勧めするつもりです。
(日本語おかしいアル)

2016年5月15日日曜日

無料レンタルサーバー比較感想

いくつかの無料レンタルサーバーを半年以上使用しての感想。

お勧めランキング


  1. Xサーバー
  2. FC2
  3. ウェブクロウ
有料プランがしっかりしている無料サーバーなら月額99円などの下手な有料サーバーよりも安定しています。

サーバー比較

以下のサーバーはアフィリエイト可能です。全てFTP接続可能。

FC2

メリット

  • SEO優秀
  • アダルト可(専用プラン)

デメリット

  • サブドメイン不可
  • アップロード制限1MByte
  • 3ヶ月放置すると大きな広告が表示される(GoogleADsアカウント削除対象)
無料サーバーの定番です。

Xサーバー

メリット

  • SEO優秀
  • サブドメインを複数つくれる

デメリット

  • 特になし

一番お勧めの無料サーバーです。サブドメインはメインのドメイン+ドットサブドメイン名になります。

ウェブクロウ

メリット

  • SEOはそこそこ

デメリット

  • 特になし

特に悪い点はありません。

忍者ホームページ

メリット

  • サブドメインを10個作れる
  • 欲しいドメイン名を取得しやすい
デメリット

  • 3ヶ月放置すると大きな広告が表示される(GoogleADsアカウント削除対象)
  • SEO弱い
可もなく不可もなく。商用利用可能なので商品の宣伝等に使えます。

サイトミックス

メリット

  • サブドメインと複数つくれる

デメリット

  • SEO弱い
  • サーバー管理が甘いサポート皆無

G県の管理会社が運営している。サイトの更新ができない。サーバーが見つからないなど不具合が多いのでお勧めできません。



2016年3月23日水曜日

Unity inputfieldにコピペでき無い

unity5.3でinputfieldに日本語入力がしやすくなりました。
monoエディタも日本語対応しました。

inputfieldにコピペができ無い原因


  • コピー元(テキストエディタやブラウザ)に問題があるかも

miのテキストをinputfieldにコピペできませんでした。
メモやブラウザからはコピペできるのでアプリとの相性かもしれません。
UTF8を使用していますが改行コードがOSによって異なるためその影響か?
ちなみにシステムのクリップボードにはGUIUtility.systemCopyBufferで読み書き可能です。
 unityのバージョンアップには今後も期待です。

2016年3月22日火曜日

unity uGUIの位置をスクリプトで変更する

uGUIの位置をスクリプトで変更しようとしたところ
位置がおかしい・・・
どうやらGUIとゲームオブジェクトのpositionは異なるようです。

この書き方だと絶対座標になる

        Vector3 newtra = 
            new Vector3(x,ygo.transform.position.z);
        go.transform.position = newtra;


以下の書き方だと相対座標になる

        Vector2 pos = new Vector2 xy );
        go.GetComponent<RectTransform>().anchoredPosition = pos;

GUIはアンカーを使用しているのでanchoredPositionを使用します。

2016年3月10日木曜日

unity 外部ファイルからスプライトを変更するサンプル

 実行ファイル直下のdatasフォルダ内のpngファイルを読み込んでスプライトを作成します。byte配列をTexture2D.LoadImageから読み込むとスプライトのサイズが狂ってしまいます。そのため一度テスクチャクラスに入れています。

使用例

string stCurrentDir = System.IO.Directory.GetCurrentDirectory();
        Image img = ゲームオブジェクト.GetComponent<Image>();
        Texture2D tex = readImage (stCurrentDir + @"/datas/tatie.png");
        img.sprite = Sprite.Create(texnew Rect(00tex.widthtex.height), Vector2.zero);

外部ファイルの読み取り

    public byte[] LoadBytes(string path) {
        FileStream fs = new FileStream(pathFileMode.Open);
        BinaryReader br = new BinaryReader(fs);
        byte[] result = br.ReadBytes((int)br.BaseStream.Length);
        br.Close();
        return result;
    }

    public Texture2D readImage (string name) {
        Texture2D tex = new Texture2D(00);
        tex.LoadImage(LoadBytes(name));
        return tex;
    }

2016年3月7日月曜日

AmazonWebService AWSと料金

 AmazonWebService AWSはAmazonのハウジングサービスです。
AmazonのDBにアクセスして商品データを取得することもできます。
SQLを使用してデータを得ることで強力なアフィリエイトツールを作ることができます。

 料金体系の例


  • サーバ 2円〜 / 1時間 (Amazon EC2)
  • ストレージ 約10円 / 1GB / 1ヶ⽉
  • データ転送(上りは無料)約20円 / 1GB 

OS1時間の利⽤単価


  • Linux 40円
  • Windows 55円
  • RHEL 43円
動画の配信やアプリケーションサーバーなどを使うことができます。
従量課金制なので月あたりのコストがわかりにくいですが、従量課金のメリットもあります。開発規模や利用者数に見合ったコストで運用できる点です。
月額料金の目安は2万〜20万といったところでしょうか。

2016年1月3日日曜日

ブロガー 現在、あなたのブログには AdSense に承認されていません。

 ブロガーのブログをいくつか管理していますが、一つだけ広告が使用できないブログがあります。
「現在、あなたのブログには AdSense に承認されていません。」となっている

承認されない原因

HTMLのタグが不適切

承認条件

一定期間ブログを利用すること

投稿数や観覧者数は特に関係ありません。
定期的にブロガーにログインさえしていればいつの間にか承認されます。
AdSenseもBloggerもGoogle管理下なのでHTMLのタグなどSEOの評価があるかもしれません。

2016年1月1日金曜日

ノベルスクリプトエンジン仕様書

最低限のスクリプト命令で動作するノベルエンジンを作成中です。
3-4まで実装済み。
サンプルテキスト
%%ふが=tati01 //二つの立ち絵に 位置調整とサイズ調整を設定
%%ほげ=tati02
%y=70 //表示する高さ調整
%scale=1.3 //サイズを3割り増しに
%%end
$ほげ笑=tati01w//変数(ほげ笑を宣言
%%背景=haikei2 //背景の設定
%type=2
%%end
ほげ「こんにちわ」//ほげの立ち絵が表示
%背景 //背景が表示
ふが「こんにちわ」//ほげの隣にふがの立ち絵が表示。ほげは半透明になる
ほげ「いい天気だね」 //ほげが再表示される。ふがが半透明になる。
%ほげ=ほげ笑
ほげ「あはは」//ほげの立ち絵が変更される。

命令の種類


  1. @クリック待ち //使わ無いかも
  2. #命令 IF BGM GOTO
  3. %立ち絵 キャラ名「発言」の形式で立ち絵の自動表示をする。on off可能
  4. $変数=値  // 各命令の=の右側には変数を使うことができる
  5. &ラベル gotoー>ラベル ラベルのある行までスキップ

・@ メッセージ処理

@クリック待ち
@@改行+クリック待ち
@@@改ページ+クリック待ち
@wait=kai 改行ごとにクリック待ち
@wait=kuto 句読点(。)ごとにクリック待ち
@wait=off @指示のみでクリック待ち
@page=spa 先頭スペースで改ページ
@page=kai 改行ごとに改ページ
@page=kai 句読点(。)ごとに改ページ
@page=off @指示のみでクリック待ち
デフォルトはkai
@window=テキスト 小窓テキスト
@box_full=on メッセージをフルサイズに
@box_size=500 メッセージの高さ変更
@box_image=aa.jpg メッセージの背景変更
@box_color=#AAAAAA メッセージボックスの色
@font_color=#F2A122 RBGメッセージの色
@font_size=5 フォントサイズ

:$ 変数の宣言

$変数名=文字 文字や数値、ファイルパスを入れる
$...+... 数字計算
$$変数名 配列の作成 変数名1〜連番
値1
値2
値3
$$end 変数名1〜3が作成される

・# 処理命令

##if=変数=値  変数と値が等しければブロック実行
処理1
処理2
##endif 偽ならブロックを抜ける goto end
#if 下の一行のみ実行
#goto=ラベル名 ラベル名までスキップ
#back=ラベル名 ラベル名まで戻る
##for==変数=値  変数と値が等しければ繰り返す
処理1
処理2
##endfor
#bgm=mp3 音楽を流す offで停止
#effect=mp3
##btn=ボタンテキスト
命令1
命令2
##btn=ボタン2テキスト2
命令3
##endbtn

・%CG操作 たち絵 背景 イベント小窓

%%misato=gazo/misato01.png 変数でも可能
%%moto=gazo/moto02.png 複数の立ち絵の同時セッティング
%x=1 +で右へ
%y=20 +で上へ
%size=1.2 2割り増し
%mode=1,立ち絵 2,背景 3.イベントCG 
%%end
//misatoとnahsimotoの二つにパラメーターがセットせっとされる
%misato //立ち絵を表示
misato「こんにちわ」//立ち絵の表示とテキスト表示
%misato=misato02//立ち絵を変更して表示
%png .pngを省略
%jpg
%std=立ち絵.pngz=2 2の位置に立ち絵表示
%win=event.jpg 小窓イベントCG
%scr=event.jpg フルスクリーンイベントCG
%bgi=event.jpg 背景
%clear 立ち絵のクリア
%event=イベントCG イベントモードへ以降 背景の全面表示
%end イベントモード終了
%number=2 立ち絵を左右の2キャラのみの表示する。
%postion=2 次の立ち絵のポジション指定 2左 1中央 3右
%shadow=off 立ち絵を暗くしない
%effect=効果1.png=0.1=16 CGエフェクト  効果1.png〜効果16を0.1秒の速度でアニメーション
%back すべての立ち絵を半透明に

命令使用例

#btnボタン表示
#bgm
#kouka
#goto=ラベル ラベルまで行を進む
#back=ラベル ラベルまで行を戻る
#wait=0.1 0.1秒待つ

ボタン表示  テキスト、end、btnまでifブロックになる

#btn=選択1表示テキスト
@fl=1
@kubun=AA
#btn=選択2
@fl=2
#btn=AAAA
@fl=3
#end

IF分岐 テキスト、end、gotoまでifブロックになる
#if=fl1=1
@kubun=A
#goto=lable1
#if=fl=2
@kubun=B
#end
..
..
#label1