- 2022.03.28 Monday
- スポンサーサイト
-
一定期間更新がないため広告を表示しています
- | スポンサードリンク | - | | - | - | pookmark |
- 2014.11.28 Friday
- Unity C# でPHPから受け取ったDateTimeオブジェクトの9999-12-31 23:59:59をC# DateTimeオブジェクトに変換したよん。
-
Unity C# でPHPから受け取ったDateオブジェクトの9999-12-31 23:59:59をC# DateTimeオブジェクトに変換する
using System;
using UnityEngine;
public class Script : MonoBehaviour
{
private GameObject endDayTextObj;
void Start ()
{
endDayTextObj = gameObject.transform.FindChild ("EndDayText").gameObject as GameObject;
/////////////////////////////////////////////////////////////////////
DateTime dateTime = phpDayToCsDateObject (phpitem.end_date);
////
/// ちなみにC#は
////DateTime.Now.DayOfWeek.ToString("d")
//// で曜日を0,1,2,3・・・という数字で返してくれ、
///// (ちなみに日曜日から0・・土曜日7です)
string youbi = ("日月火水木金土").Substring(int.Parse(dateTime.DayOfWeek.ToString("d")),1);
endDayTextObj.GetComponent<Text> ().text =
dateTime.ToString("%M")+"/"+dateTime.ToString("%d")+"("+youbi+")まで";
}
}
DateTime phpDayToCsDateObject (string date_str="9999-12-31 23:59:59")
{
string output_str = "";
Debug.Log ("--------phpDayToCsDateObject-------date_str=" + date_str);
//string[] stArrayData = stCsvData.Split(',');
string[] strArrBace = date_str.Split (' ');
Debug.Log ("--------phpDayToCsDateObject-------strArr00[0]=" + strArrBace [0] + " strArr00[1]=" + strArrBace [1]);
string[] strArrYYYYMMDD = strArrBace [0].Split ('-');
Debug.Log ("--------phpDayToCsDateObject-------strArrYYYYMMDD[0]=" + strArrYYYYMMDD [0] + " strArrYYYYMMDD[1]=" + strArrYYYYMMDD [1] + " strArrYYYYMMDD[2]=" + strArrYYYYMMDD [2]);
int YEAR = int.Parse (strArrYYYYMMDD [0]);
int MONTH = int.Parse (strArrYYYYMMDD [1]);
int DAY = int.Parse (strArrYYYYMMDD [2]);
string[] strArrTimeHHMMSS = strArrBace [1].Split (':');
Debug.Log ("--------phpDayToCsDateObject-------strArrTimeHHMMSS[0]=" + strArrTimeHHMMSS [0] + " strArrTimeHHMMSS[1]=" + strArrTimeHHMMSS [1] + " strArrTimeHHMMSS[2]=" + strArrTimeHHMMSS [2]);
int HOUR = int.Parse (strArrTimeHHMMSS [0]);
int MINIT = int.Parse (strArrTimeHHMMSS [1]);
int SECONDS = int.Parse (strArrTimeHHMMSS [2]);
output_str = date_str;
//2002/05/12 20:30:15
//DateTime dateTime = new DateTime(2002, 5, 12, 20, 30, 15, 123);
DateTime dateTime = new DateTime (YEAR, MONTH, DAY, HOUR, MINIT, SECONDS);
return dateTime;
}
}
出力:12/31(金)まで
参考サイト
DateTimeのつくりかた
http://dobon.net/vb/dotnet/string/datetimeformat.html
DateTimeからの文字列の出力方法
http://note.phyllo.net/?eid=1106260#2013021900
DateTimeから曜日の出力方法
http://toraratora.blog8.fc2.com/blog-entry-22.html#more
- | whaison | Unity3d | 18:47 | comments(0) | - | pookmark |
- 2014.11.27 Thursday
- Unity4.6正式版 UI(uGUI) GridLayoutGroup と Pager と RectTransform
-
Unity4.6正式版 UI(uGUI) GridLayoutGroup と Pager と RectTransform
今回使った限りで
UI を prefab から instanciate して使う場合
アンカーポイントを左上に設定しないと困る。
RectTransform インスペクタにある PosX PosY という値は scriptからはアクセスできなかった。
関連:So @Ankit Priyarup Left=position.x Right=sizeDelta.x PosY=position.y PosZ=position.z Height=sizeDelta.y
RectTransformには position というプロパティと(設定したアンカーに関係ないのでつかえない)
RectTransform には anchoredPosition .y みたいな(設定したアンカーに関係もとづくので使いやすい)
この値を取る必要があった
さらに
RectTransform RootRectTransform =
gameObject.transform.FindChild ("Root").transform as RectTransform;
でもキャストできてしまうが値は取れない。0になる
RectTransform RootRectTransform =
gameObject.transform.FindChild ("Root").transform.GetComponent<RectTransform> () as RectTransform;
のようにするとやっとanchoredPosition.yに値がはいってくる。
GridLayoutGroupはすごく便利な機能だが、今回のスクロールバーにページャーをつける作りだと
無駄な機能になってしまう。
あたりまえだが自分でページ区分を管理する必要があるし
build_6_SetCount = build_6_SetCount + 1;
if (build_6_SetCount > 6) {
pageNum = pageNum + 1;
}
ページのボタンを押したらページの先頭の座標に移動する必要がある
その座標計算は自分でして置かなければならない
UI (uGUI)でpager
ページャーボタン自体を適当においていってくれるので
GridLayoutGroupで管理するのはとっても楽なことだった。
今回のソース
http://www.mediafire.com/download/c2sua3fy64cldru/uGUIGridRayoutPager001_2.zip - | whaison | Unity3d | 17:51 | comments(0) | - | pookmark |
- 2014.11.21 Friday
- Unity 4.6RC2 で UI (uGUI) Image にC# で WWW クラスで webから画像を貼付ける方法。
-
Unity 4.6RC2 で UI (uGUI) Image にWWW から画像を貼付ける方法。
注意ちなみにjpg,png,はロードできるがgifはだめ ふるいのきらいみたい
UI(uGUI)だと
Imageコンポーネントのspriteプロパティにぶち込むよ。
ロードを待つ必要があるからIEnumerator 型の関数でStartCoroutine 使って呼ぶよ
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
public class Script : MonoBehaviour
{
private GameObject imageObj;
void Start(){
imageObj = gameObject.transform.FindChild ("Image").gameObject as GameObject;
StartCoroutine(ImageWWWStart());
}
IEnumerator ImageWWWStart ()
{
string url = "";
url = "http://images.earthcam.com/ec_metros/ourcams/fridays.jpg";
www = new WWW (url);
yield return www;
//cubeObj.renderer.material.mainTexture=www.texture;
imageObj.GetComponent<Image> ().sprite = Sprite.Create (www.texture, new Rect (0, 0, 320, 240), Vector2.zero);//OK
}
}
参考
Texture2DからSpriteを作成する
http://noshipu.hateblo.jp/entry/2014/10/22/015832
Unity ScriptReference Sprite.Create(Texture2D,Rect,Vector2,float)
docs-jp.unity3d.com/Documentation/ScriptReference/Sprite.Create.html
WWWクラスを利用して動的にファイルを読み込む neareal.net/index.php?ComputerGraphics%2FUnity%2FTips%2FScript%2FLoadFileByUsingWWW
Unity Document WWW
http://docs.unity3d.com/ScriptReference/WWW.html
UnityでPNGファイルを動的に読み込む方法
macomu.sakura.ne.jp/blog/?p=55
---------------------------------------------------------------------------------------------------------------
ちなみにローカルファイルは こうだった。
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
using System.IO;//System.IO.FileInfo, System.IO.StreamReader, System.IO.StreamWriter
public class Script : MonoBehaviour
{
private GameObject imageObj;
void Start(){
imageObj = gameObject.transform.FindChild ("Image").gameObject as GameObject;
Texture2D byteTexture=(Texture2D) ReadTexture("/Users/otsuka-noboru/Downloads/fridays.jpg", 320, 240);
imageObj.GetComponent<Image> ().sprite = Sprite.Create(byteTexture, new Rect(0,0,320,240), Vector2.zero);
}
//---------------------------UnityでPNGファイルを動的に読み込む方macomu.sakura.ne.jp/blog/?p=55
byte[] ReadPngFile (string path)
{
FileStream fileStream = new FileStream (path, FileMode.Open, FileAccess.Read);
BinaryReader bin = new BinaryReader (fileStream);
byte[] values = bin.ReadBytes ((int)bin.BaseStream.Length);
bin.Close ();
return values;
}
Texture ReadTexture (string path, int width, int height)
{
byte[] readBinary = ReadPngFile (path);
Texture2D texture = new Texture2D (width, height);
texture.LoadImage (readBinary);
return texture;
}
//---------------------------UnityでPNGファイルを動的に読み込む方macomu.sakura.ne.jp/blog/?p=55
}
- | whaison | Unity3d | 17:45 | comments(0) | - | pookmark |
- 2014.11.20 Thursday
- unity official C#DELEGATES のほうが簡単だった。delegate は関数をマルチ(複数)に呼び出せる。関数内容の置き換えもできる。
-
やっとこさ理解した。
unity official C#DELEGATES のほうが簡単だった。delegate は関数をマルチ(複数)に呼び出せる。関数内容の置き換えもできる。
unity officialDELEGATES
http://unity3d.com/learn/tutorials/modules/intermediate/scripting/delegates
How to create
and use
delegates to provide complex (delegate は提供するは複数に。)
and
dynamic functionality in your scripts.(ダイナミックなスクリプトで)
DelegateScript 関数の置き換えの例
using UnityEngine;
using System.Collections;
public class DelegateScript : MonoBehaviour {
delegate void MyDelegate(int num);//戻り値なし 引数int型のnum
MyDelegate myDelegate;
void Start () {
myDelegate = PrintNum;
myDelegate(50);
myDelegate = DoubleNum;
myDelegate(50);
}
void PrintNum(int num)
{
print ("Print Num: " + num);
}void DoubleNum(int num)
{
print ("Double Num: " + num * 2);
}
}
----------------
output:
Print Num: 50
Double Num: 100
----------------MulticastScript 関数をマルチ(複数)に呼び出せる例
delegate int mygate(string str);
using UnityEngine;
using System.Collections;
public class MulticastScript : MonoBehaviour
{
delegate void MultiDelegate();//戻り値もなし、引数もなしのデリゲート
MultiDelegate myMultiDelegate;
void Start () {
myMultiDelegate += PowerUp;
myMultiDelegate += TurnRed;
if(myMultiDelegate != null) {
myMultiDelegate();
}
}
void PowerUp()
{
print ("Orb is powering up!");
}
void TurnRed()
{
renderer.material.color = Color.red;
}
}
----------------
output:
Orb is powering up!
renderer.material.color = Color.red; になる。
----------------
デリゲートの図
入力引数型
↓
中身なし関数いれるハコ
↓
出力返り値型
int func(string str1);
{
Debag.Log(str1);
return 1;
}
中身なし関数いれるハコにfuncいれる
mygate+=func("デリゲート");
mygate+=func("デリゲート");
mygate();
----------------
output:
デリゲート
デリゲート
----------------
- | whaison | Unity3d | 11:47 | comments(0) | - | pookmark |
- 2014.11.20 Thursday
- delegateは戻り値と引数の型 指定 つまり入力と出力の型だけを定義したものデリゲート
-
delegateとは戻り値と引数の型 指定
入力と出力の型だけを定義したデリゲート
C#では、次の宣言文によって「string型の引数と、int型の戻り値を持つデリゲート」を宣言する。
まずこれ
delegate int SomeDelegate(string p);
そして、次のようにデリゲート型オブジェクトを生成することができる。
なんとデリゲートの引数として指定したstringでなく関数を渡して
インスタンス化する。
そう入力と出力を定義したデリゲートには
必要なのは入力をどのように処理して出力するかという関数内容だからだ
SomeDelegate del = new SomeDelegate(SomeMethod);
int SomeMethod(string p) {
return 1;
});
SomeDelegate del = new SomeDelegate(delegate(string p) {
return 1;
});
前者の宣言では既存のSomeMethodメソッドをデリゲートの中身として指定しており、後者の宣言ではデリゲートの中身も同時に定義している(この書き方では、return文によって返される値がSomeDelegateデリゲートの戻り値に暗黙的に変換できない場合、エラーとなる)。
こうして生成したデリゲート型オブジェクトは、通常のメソッドのように直接実行することができる。
int ret = del("some string");
しかし、デリゲートの真価が発揮されるのはイベントと併用した時である。イベントは、次のように宣言する。
まずこれ
delegate int SomeDelegate(string p);
event SomeDelegate SomeEvent;
こうして宣言したイベントには、+= 演算子と -= 演算子によって、デリゲート(イベントハンドラ)を追加したり削除したりすることができる。
SomeEvent += new SomeDelegate(SomeEventHandler1);
SomeEvent -= new SomeDelegate(SomeEventHandler1);
イベントハンドラの追加が += 演算子によって行われることから推測できるように、1つのイベントには複数のイベントハンドラを登録することができる。
次のようにしてイベントを起こすと、登録したイベントハンドラがまとめて実行される。
if (SomeEvent != null)
SomeEvent("some string");
てゆーか
実際はイベントハンドラ自体が
デリゲートを必要としていて
サンプルはこうなる
まず、初めてのイベントとして、できるだけ小さく書いたサンプル・プログラムを見てみよう
using System;
namespace ConsoleApplication53
{
戻り値のなしの引数object型のsender, EventArgs型の eデリゲート
public delegate void SampleEventHandler(object sender, EventArgs e);
class Class1
{
public event SampleEventHandler sampleEvent;
public void handler( object o, EventArgs e )
{
Console.WriteLine("handler called");
}
static void Main(string[] args)
{
Class1 target = new Class1();
target.sampleEvent += new SampleEventHandler(target.handler);
target.sampleEvent( target, EventArgs.Empty );
}
}
}
イベントを使用した小さなサンプル・プログラム1
このプログラムには注目すべき点が5つある。
これを実行すると以下のようになる。
出力:handler called
サンプル・プログラム1の実行結果
最終的には、イベントのハンドラであるhandlerメソッドが呼び出され、メッセージが表示される。
参考
http://ja.m.wikipedia.org/wiki/デリゲート_(プログラミング)
http://www.atmarkit.co.jp/fdotnet/csharp_abc/csharp_abc_013/csharp_abc01.html
delegate int mygate(string str)
デリゲートの図
入力引数型
↓
中身なし関数いれるハコ
↓
出力返り値型
int func(string str1)
{
Debag.Log(str1)
}
中身なし関数いれるハコにfuncいれる
mygate+=func("デリゲート") - | whaison | Unity3d | 00:20 | comments(0) | - | pookmark |
- 2014.11.19 Wednesday
- phpMyAdminを使用していると、データベース名がアンダースコア起点で勝手にグループ化されて少々鬱陶しいので何とかしてみる。
-
phpMyAdminを使用していると、データベース名がアンダースコア起点で
勝手にグループ化されて少々鬱陶しいので何とかしてみる。
http://qiita.com/attakei/items/3b1eee8fdd06f7452a6c
attakeiさんの
www/tools/phpMyAdmin/libraries/List_Database.class.php(256-)foreach ($separators as $separator) { // use strpos instead of strrpos; it seems more common to // have the db name, the separator, then the rest which // might contain a separator // like dbname_the_rest $pos = strpos($db, $separator, 1); if ($pos !== false) { break; } }
ここで、グルーピングのためのセパレータをチェックしているので、この部分をまるごと消すなりコメントアウトすればOKっぽい。そのままやったけどそんなソースなかった
だめだった
バージョンが違ったためだと思う
www/tools/phpMyAdmin/libraries/navigation/NavigationTree.class.php 541行目/* foreach ($separators as $separator) { $sep_pos = strpos($child->name, $separator); if ($sep_pos != false && $sep_pos != strlen($child->name) && $sep_pos != 0 && ($prefix_pos == false || $sep_pos < $prefix_pos) ) { $prefix_pos = $sep_pos; } } */
とりゃ
できた! - | whaison | PHP | 10:20 | comments(0) | - | pookmark |
- 2014.11.18 Tuesday
- php Laravelフレームワークごにょごにょやるうえで勉強したことをつらつらと001
-
php Laravelフレームワークごにょごにょやるうえでしらべたことをつらつらと
ーーーーーーーーhttp://www.ospn.jp/press/20140605no40-useit-oss.htmlーーーーーーーーーーーーーー
6.モデルについて
モデルには
1、エロクアント(Eloquent)、
2、クエリービルダーと
3、ベーシックなクエリーの
3種類あって
ベーシックなクエリーは下記の様な発行方法です。
■SELECT
DB::select('select * from users where id = ?', array(1));
■INSERT
DB::insert('insert into users (id, name) values (?, ?)', array(1, 'Dayle'));
■UPDATE
DB::update('update users set votes = 100 where name = ?', array('John'));
■DELETE
DB::delete('delete from users');
いずれもプリペアドステートメントを使用して
各クエリーを発行する形式になっています。
プリペアドステートメントとは? 実行したい SQL をコンパイルした 一種のテンプレートのようなものです。
解析/コンパイル/最適化 の繰り返しを避けるので高速に動作するということです。
(http://php.net/manual/ja/pdo.prepared-statements.php)
クエリービルダーでは以下の様になります。
■SELECT
DB::table('users')->where('id', 1)->first();
■INSERT
DB::table('users')->insertGetId(['id' => 1, 'name' => 'Dayle']);
■UPDATE
DB::table('users')->where('name' => 'John')->update(['votes' => 100]);
■DELETE
DB::table('users')->where('name' => 'John')->delete();
複数の検索条件が必要な場合はwhereを複数記述することで、
内部でANDへと変換されます。
エロクアントは、より洗練されたORMを提供します。
■SELECT
User::all();
User::find(1);
■INSERT
$user = User::create(array('name' => 'John'));
■UPDATE
$user = User::find(1);
$user->email = 'john@foo.com';
$user->save();
■DELETE
$user = User::find(1);
$user->delete();
エロクアントの場合は、デフォルトでは
クラス名を小文字の複数形にしたものが、テーブル名として使用されます。
初期状態の場合はapp/modelsにUserクラスが設置されています。
複数形ではない別のテーブルを使用する場合は、
protected $table = 'table_name';
と定義し
同様にfindで使われるものはprimaryKeyとなりますので、
protected $primaryKey = "table_id";
と定義します。
検索条件の追加等はクエリービルダーを組み合わせて実装していきます。
エロクアント、クエリービルダー、ベーシックの3種とも、
データベースのマスター、スレーブ、複数のデータベースを使用する場合等は、
// ベーシック
DB::connection('master')->select($sql, $params);
// クエリービルダー
DB::connection('master')->table('table')->get();
// エロクアント
User::on('slave)->find(1);
等の様に接続先を変更します。
これらの接続先は、app/config/database.php内のconnections配列のキーを
指定することで変更可能です。
デフォルトはsqlite, mysql, pgsql(PostgreSQL), sqlsrv(SQL Server)になっていますので、
masterやslaveなどへ変更して、接続先を指定してください。
ーーーーーーーーhttp://www.ospn.jp/press/20140605no40-useit-oss.htmlーーーーーーーーーーーーーー
DB::connection(切り替えるテーブルの変数名)->beginTransaction();
トランザクションという処理の詰め合わせのようなものをはじめて
DB::connection(切り替えるテーブルの変数名)->commit();
でデータベースに反映する
$a = App::make('MyManager')->getConnection();
Laravel はApp::makeでクラス名を指定すれば、それをnewと同様にインスタンス化してくれます。
(http://kore1server.com/186)
<?php // key comes from app/config/app.php. // this will output a big long random string echo Config::get('app.key'); // timezone comes from app/config/local/app.php // this will output "America/Los_Angeles" echo Config::get('app.timezone'); ?>
http://laravel-recipes.com/recipes/27/environment-specific-configurations
——————————http://laravel4.kore1server.com/docs/database-----------
ちなみにPlayerCardManager.phpの
$con = App::make('PlayerManager')->getPlayerConnection($playerId);
PlayerManager.phpのPlayerManagerクラスのインスタンスの
関数getPlayerConnectionに引数(playerId=19800422など)を渡して
DB::connection($con)->beginTransaction();は
場合により、自分でトランザクションを始める必要があることもあるでしょう。
DB::beginTransaction();
トランザクションをロールバックするには、rollbackメソッドを使用します。
DB::rollback();
最後に、トランザクションのコミットは、commitメソッドです。
DB::commit();
トランザクションとは http://gihyo.jp/dev/serial/01/db-academy/000201 より
データベースは,トランザクションという単位で「ユーザが実行した一連のながながとした処理」を管理します。
コネクションとの接続
複数のコネクションを使用するときはDB::connectionメソッドが使用できます。
$users = DB::connection('foo')->select(...);
———————http://laravel4.kore1server.com/docs/database--------------------
- | whaison | php Laravel | 19:00 | comments(0) | - | pookmark |
- 2014.11.12 Wednesday
- Unity 4.6 RC1 Latest fully tested release で UI(uGUI) でのWeb player Buildについての件
-
Unity 4.6 RC1 Latest fully tested release で UI(uGUI) でのWeb player Buildについての件
Unity4.6.20のWeb player Build ではUI(uGUI) が表示されなかったが
Unity 4.6 RC1では表示できるようになった。
これをしようとして気づいた。
WebページからUnity Web Player内の関数を呼び出す
http://docs-jp.unity3d.com/Documentation/Manual/Unity%20Web%20Player%20and%20browser%20communication.html<script type="text/javascript" language="javascript"> <!-- //Web Playerの初期化 var u = new UnityObject2(); u.initPlugin(jQuery("#unityPlayer")[0], "Example.unity3d"); function SaySomethingToUnity() { u.getUnity().SendMessage("Canvas", "MyFunction", "Hello from a web page!"); } --> </script>
Canvas
に
MyFunctionScript.csを貼付けた。
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
public class MyFunctionScript : MonoBehaviour {
// Use this for initialization
void Start () {
MyFunction("MyFunctionScript-Start");
}
// Update is called once per frame
void Update () {
}
public void MyFunction(string param)
{
Debug.Log("MyFunction(param="+param+")");
Debug.Log ("gameObject=" + gameObject);
Debug.Log ("gameObject.transform=" + gameObject.transform);
Debug.Log ("gameObject.transform.Find ('Text')="+gameObject.transform.Find ("Text"));
Debug.Log("transform="+transform);
Debug.Log ("transform.Find ('Text')="+transform.Find ("Text"));
//GameObject cube = transform.Find ("Cube").gameObject as GameObject;
//GameObject canvas = transform.parent.gameObject.transform.Find ("Canvas").gameObject as GameObject;
//GameObject text = transform.Find ("Text").gameObject as GameObject;
GameObject text = transform.Find("Text").gameObject as GameObject;
text.GetComponent<Text> ().text = "MyFunction(param=" + param + ")";
//GameObject text= canvas.transform.FindChild ("Text").gameObject as GameObject;
//text.GetComponent<Text>().text = "MyFunction(param=" + param + ")";
}
/// <summary>
/// デバック用画面名の表示.
/// </summary>
void OnGUI()
{
if (GUI.Button (new Rect (20, 80, 380, 50), "OnGUIButton")) {
MyFunction("OnGUI to MyFunction");
//this.SendMessage ("PushPointPurchase", true, SendMessageOptions.DontRequireReceiver);
}
}
}
テスト
http://www.mediafire.com/download/7nmwiq4jaqc9bwd/ExternalCallAndSendMessage001.zip - | whaison | Unity3d | 19:56 | comments(0) | - | pookmark |
- 2014.11.12 Wednesday
- unity C# iDictionary とDictionary の違い とICollectionインターフェース
-
mscorlib.dll
FileVersion ("2.0.50727.1433")]
unity C#というか C#
iDictionary とDictionary の違い
IDictionaryはプロパティ+メソッド全部で8こしかない。
IsFixedSize
IsReadOnly
ICollection Keys
TValue this [TKey key]
Add (TKey key, TValue value)
ContainsKey (TKey key)
Remove (TKey key)
TryGetValue (TKey key, out TValue value)
http://msdn.microsoft.com/ja-jp/library/s4ys34ea(v=vs.110).aspx
ーーーーーーーーーーーーーーーーーーーーIDictionary Classーーーーーーーーーーーーーーーーーーーーーー
using System;
using System.Runtime.InteropServices;
namespace System.Collections
{
[ComVisible (true)]
public interface IDictionary : ICollection, IEnumerable
{
//
// Properties
//
bool IsFixedSize
{
get;
}
bool IsReadOnly
{
get;
}
ICollection Keys
{
get;
}
ICollection Values
{
get;
}
//
// Indexer
//
object this [object key]
{
get;
set;
}
//
// Methods
//
void Add (object key, object value);
void Clear ();
bool Contains (object key);
IDictionaryEnumerator GetEnumerator ();
void Remove (object key);
}
}
ーーーーーーーーーーーーーーーーーーーーIDictionaryーーーーーーーーーーーーーーーーーーーーーーー
IDictionary
と短いがDictionaryは長ーーーーーい
http://msdn.microsoft.com/ja-jp/library/xfhwa508(v=vs.110).aspx
ーーーーーーーーーーーーーーーーーーーーDictionaryーーーーーーーーーーーーーーーーーーーーーーー
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Runtime.Serialization;
using System.Security.Permissions;
namespace System.Collections.Generic
{
[DebuggerDisplay ("Count={Count}"), DebuggerTypeProxy (typeof(CollectionDebuggerView<, >)), ComVisible (false)]
[Serializable]
public class Dictionary<TKey, TValue> : IDictionary<TKey, TValue>, ICollection<KeyValuePair<TKey, TValue>>, IEnumerable<KeyValuePair<TKey, TValue>>, ICollection, IDictionary, IEnumerable, IDeserializationCallback, ISerializable
{
private delegate TRet Transform<TRet> (TKey key, TValue value);
//
// Properties
//
public IEqualityComparer<TKey> Comparer
{
get
{
return this.hcp;
}
}
public int Count
{
get
{
return this.count;
}
}
bool IDictionary.IsFixedSize
{
get
{
return false;
}
}
bool IDictionary.IsReadOnly
{
get
{
return false;
}
}
bool ICollection<KeyValuePair<TKey, TValue>>.IsReadOnly
{
get
{
return false;
}
}
bool ICollection.IsSynchronized
{
get
{
return false;
}
}
public Dictionary<TKey, TValue>.KeyCollection Keys
{
get
{
return new Dictionary<TKey, TValue>.KeyCollection (this);
}
}
ICollection<TKey> IDictionary<TKey, TValue>.Keys
{
get
{
return this.Keys;
}
}
ICollection IDictionary.Keys
{
get
{
return this.Keys;
}
}
object ICollection.SyncRoot
{
get
{
return this;
}
}
ICollection<TValue> IDictionary<TKey, TValue>.Values
{
get
{
return this.Values;
}
}
public Dictionary<TKey, TValue>.ValueCollection Values
{
get
{
return new Dictionary<TKey, TValue>.ValueCollection (this);
}
}
ICollection IDictionary.Values
{
get
{
return this.Values;
}
}
//
// Indexer
//
object IDictionary.this [object key]
{
get
{
if (key is TKey && this.ContainsKey ((TKey)((object)key)))
{
return this [this.ToTKey (key)];
}
return null;
}
set
{
this [this.ToTKey (key)] = this.ToTValue (value);
}
}
public TValue this [TKey key]
{
get
{
if (key == null)
{
throw new ArgumentNullException ("key");
}
int num = this.hcp.GetHashCode (key) | -2147483648;
for (int num2 = this.table [(num & 2147483647) % this.table.Length] - 1; num2 != -1; num2 = this.linkSlots [num2].Next)
{
if (this.linkSlots [num2].HashCode == num && this.hcp.Equals (this.keySlots [num2], key))
{
return this.valueSlots [num2];
}
}
throw new KeyNotFoundException ();
}
set
{
if (key == null)
{
throw new ArgumentNullException ("key");
}
int num = this.hcp.GetHashCode (key) | -2147483648;
int num2 = (num & 2147483647) % this.table.Length;
int num3 = this.table [num2] - 1;
int num4 = -1;
if (num3 != -1)
{
while (this.linkSlots [num3].HashCode != num || !this.hcp.Equals (this.keySlots [num3], key))
{
num4 = num3;
num3 = this.linkSlots [num3].Next;
if (num3 == -1)
{
break;
}
}
}
if (num3 == -1)
{
if (++this.count > this.threshold)
{
this.Resize ();
num2 = (num & 2147483647) % this.table.Length;
}
num3 = this.emptySlot;
if (num3 == -1)
{
num3 = this.touchedSlots++;
}
else
{
this.emptySlot = this.linkSlots [num3].Next;
}
this.linkSlots [num3].Next = this.table [num2] - 1;
this.table [num2] = num3 + 1;
this.linkSlots [num3].HashCode = num;
this.keySlots [num3] = key;
}
  - | whaison | Unity3d | 14:47 | comments(0) | - | pookmark |
- 2014.11.05 Wednesday
- Unity 4.6.20 MonoDevelopでのデバッグがフリーズするので困っている件
-
1、Unity Editer(menu: Assets > Sync MonoDevelop Project)で MonoDevelop が起動、もしくはSyncされます。
2、MonoDevelopの行番号の左のグレーのバーをクリックしてブレークポイントを設定します
3、MonoDevelop の▶︎矢印をクリックするとプロセスにアタッチのウィンドウが出ます。
4、プロセスにアタッチの中からUnity Editor(Unity)を選び、「アタッチ」を押します。
フリーズします。笑 たまにパネルが消えて気分で動きマッス
5、おい。。。。。
5.ブレークポイントの位置で止まるので、ステップ実行等をする。
これでステップ実行しながら、値の確認等ができます。
http://bribser.co.jp/blog/monodevelopdebug/ さんから引用ですが
>ただ、デバッカを使うとよくフリーズしてしまいます。
>私の場合は、Unityを実行してから、MonoDevelopをアタッチし、
>終了する時は、MonoDevelopのアタッチを停止してから、Unityを停止する
>というようにするとフリーズしなくなりました。
とありますが。あまり関係あるように思えません。涙
別環境のMac Unity4.5.4f1では起きない様子。機種名: MacBook Pro
機種 ID: MacBookPro11,3
プロセッサ名: Intel Core i7
プロセッサ速度: 2.6 GHz
プロセッサの個数: 1
コアの総数: 4
二次キャッシュ(コア単位): 256 KB
三次キャッシュ: 6 MB
メモリ: 16 GB
後日
再起動したらなぜかすんなりうごくようになりました。 - | whaison | Unity3d | 18:36 | comments(0) | - | pookmark |