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をスクリプトから読み込ませることにしました。