Beauty Salon α-BET (alphabet)

space001
Blender3d Collada dae modeling Use Papervision3d on Progression3 and 4 http://a-bet.secret.jp/#/access
more whaison works.
whaison space
space002
http://whaison.jugem.jp/ https://jp.pinterest.com/whaison/ https://www.instagram.com/whaison/ https://whaison.amebaownd.com/
https://suzuri.jp/whaison
http://whaison.blogspot.com/
http://whaison.tumblr.com/ http://qiita.com/users/whaison http://www.behance.net/whaison https://github.com/whaison/ https://bitbucket.org/whaison http://serato.com/user/whaison http://whaison.hatenablog.jp/

typo memo
http://d.hatena.ne.jp/whaison/


dayNote
http://www.myspace.com/whaison http://ameblo.jp/whaison/ http://blog.crooz.jp/whaison/ http://blog.crooz.jp/whaisoncafe/ http://nenpyo.org/whaison

fulldisk
http://full.shin-gen.jp/
http://whaison.client.jp/
http://www.dclog.jp/whaison/
featured forums.
space004
forum.unity3d.com/

forums.unrealengine.com.

Progression Forum.

FlashDevelop Forum.

Papervision3D Forum.

FlexUserGroup Forum.

SparkProjectForum.





Twitter







Mobile
qrcode
Calendar
SunMonTueWedThuFriSat
1234567
891011121314
15161718192021
22232425262728
293031    
<< July 2018 >>
New Entries
Archives
Categories
Recent comment
  • FlashDevelopでフォント埋め込み
    感謝!! (12/24)
  • cocos2d-x-3.0rc0 ,c++ ,cpp でTexturePacker で 吐き出した、plist と png でパラパラアニメーションのコード例
    whaison (04/17)
  • Blender2.67にbvh(web上に2500個以上ころがってる)入れてそのBoneオブジェクトをUnity4.0のmecanimで使う
    whaison (08/19)
  • Apple Dev Center 「Certificates, Identifiers & Profiles」で Adhoc をつくってXCode4.6.1でArchiveしてipaを書き出し
    whaison (04/30)
  • Flash CS6でプロパティーパネルで物理演算のジャンプの高さを設定できるCitrus Engine
    whaison (03/01)
  • 「Flash以外、例えばKinectとか」ON TOKYO (会場:高田馬場4-11-8 Floor 6階 ) 短縮URL http://bit.ly/dI0Bfx
    uka (03/02)
  • App Store Review Guidelines アップル社のアプリ審査基準ガイドライン和訳 Apple が 開発者を悩ませ ユーザーをハッピーにしたいガイドライン。w
    whaison (01/25)
  • Unity3d では ADOBE JAPAN OSAKIで行われたFITC 2010 TOKYOでは、 「iOS用にパブリッシュするためには、フリー版ではなくて、有料版を買ってください。さらに追加のパッケージである、"iOS Package (for Development)"を買ってください」とのことだった。
    whaison (01/25)
  • enjoy Adidas-Futsal-Park
    whaison (01/16)
  • MacBookAir にFlashPlayer入れたらなった。Mac Flash Player 10.1/10.2でUstream などでカメラが認識されないバグそんなときはUstreamProducer!でもなくiPhoneだと直ぐにライブ配信できた
    whaison (01/14)
simple sintax high lighter2.0
space003
SyntaxHighlighter2.0用 の貼り付けコード作成する!
Profile
Links
Recommend
Admin
無料ブログ作成サービス JUGEM
Seach this site
            
2017.02.04 Saturday
Unityのマルチスレッドとマルチスレッドの理解 の 翻訳

中国のシーナさんのブログ (2014年11月16日午前0時07分23秒)

http://blog.sina.com.cn/s/blog_930ffa0b0102v4f0.html

Unityのマルチスレッドとマルチスレッドの理解 の 翻訳 中国語の文章の 翻訳結果が日本語になってない。またこんど

 

==================再現アドレス=============================
再版Xiaokeの翻訳で中国語の翻訳アドレス、vr.cn:http://blog.1vr.cn/?p=624
英語元のアドレス、外国人のブログには、壁の上に開けないでください。: http://unitygems.com/threads/

 

 

https://unitygem.wordpress.com/​​
==================再現アドレス=============================

================================================= ========= 
ABMEXパンチを再現
「Unity3D「チュートリアル・カレッジ「ユニティ」マルチスレッドの制限

http://blog.sina.com.cn/s/blog_930ffa0b0102v9ll.html 
=========== =============================================== 

=== ================================================== =====

マルチスレッドの非同期のC#のhttp unity3d機能の使用ダウンロードリソース

http://www.cnblogs.com/U-tansuo/p/unity3d_Threading_AsyDown_HTTP.html#undefined 
============================= ============================= 

===================== ===================================== 
マルチスレッドプラグインで共有U3Dの使用:
LOOMマルチスレッド:http://www.u3dchina.com/t-6357-1-1.html

UniExten 2.14:http://www.u3dchina.com/t-6300-1-1.html

================================================== ========
 

あなたがゲーム内で複数のスレッドを使用する場合は、

 

この記事をお読みください、

スレッドは非常に複雑なトピックですが、

 

あなたはそれを習得場合は、

簡単に複数のハードウェアプロセッサを使用することができたり、

処理、管理を分割することは困難ですデータ・ブロック。

 

大量のデータを計算するために、A *アルゴリズムとのシーンのように。


変形グリッド多数の頂点を操作してください。


サーバーにデータをアップロードするために実行し続けた。
次元コード認識や他の画像処理。

この場合は、同時にあなたは多くのことやユニティに対処する必要が小さなオブジェクトは、

そうでなければコルーチン、スレッドと対話することができます

 

スレッドは、

プログラム内の他のスレッド並行して実行されている。

マルチプロセッサコンピュータでは、

同時に複数のスレッドを

複数のスレッドを実行することができ、

 

より多くの処理コアをに依存しています。

 

Unityのプログラムは、

あなたのコードを実行するために、メインスレッドが常にあるときは、

追加のスレッドを作成することができ、 メインスレッドは同時に実行されています。

メインスレッドのUnityコンポーネント、オブジェクト、およびUnityシステムからのアクセスのみを呼び出すとUnityは、

あなたが第二のスレッドでこれらの項目にアクセスしようとすると失敗し、

エラーがスローされますすることができます

これは真剣に制限です。

あなたがコードを書くときに、

あなたが関数を開始した後にreturnして、それはあなたが同じことを実行し、

別の関数を実行することをポイントに到達したと思いますが、あなたがコードを実装することを決定し、

対応するオペレーティングシステムを変更しませんでしたいつでもあなたのコードだけ一時的に「スリープ」出て、その後、他のコードが実行されてみましょう、

この例では、値がCPUにロードされる最初のスレッドが1000を引いAの値とを読み取るために第2のスレッド後に中断1を準備するために登録し、その後、-950である必要があります。今最初のスレッドが再開され、それは50 + 1がAに格納されているレジスタになり、51になった、と-950は失われています。

基本的に、あなたが起こらないことを確実にするために、多くの予防策を取るために、変数やメモリにアクセスする複数のスレッドを同時に使用する場合。

だから、Unityは、ちょうどすべてのシステムを回避するために、有効ではありません別のスレッドやメモリからこれらの変数にアクセスすることを決定し、フレームワークは、問題オブジェクト。

だからために1つのスレッドのみ変数を変更することを確認してください、これはあなたが動作するように複数のスレッドを使用することはできませんという意味ではありません、あなたがこの問題を解決するために、「並び替え」を使用することができます。

彼らは、オブジェクトがロック型値(値型)またはプロトタイプ(原始的)であると言うことができないため、1つのスレッドだけここで一定時間内に特定のオブジェクトにアクセスできることを確実にするためにC#のlockキーワードがあります。

-----------------------------------------

int a = 50;

)object guard = new object();

void ThreadOneCode()
{
//この中でいくつかのコード

lock(guard)
{
a = a + 1;
}

//このの残りの部分でいくつかのコード

}

void ThreadTwoCode()
{
//この中でいくつかのコード

lock(guard)
{
a = a - 1000;
}

//この残りの部分でいくつかのコード

}

-----------------------------------------
すべてはそれがガードを介してアクセスされると同時に1つだけのスレッドを保証するために、ガードにロックされている。あなたは、任意の適切なオブジェクトを使用することができます。

今、あなたは、さまざまな問題を有していてもよく、例えば、あなたが相互に入れ子にすることができる複数の事をロックする。その後、我々はどのように行うのですか?

あなたは簡単に別のスレッドでコードを実行することができるように、我々は、このクラスの織機を呼び出します

注意すべき2つの特徴があります。

RunAsync(アクション) -別のスレッド上で実行されるコードのセット。
QueueOnMainThread(アクション、[オプション]フロート時間) -ステートメント(オプション遅延)のメインスレッドで実行されます。

Loom.Currentアクセスでインタラクティブなゲームのメインスレッドに対処するための目に見えないゲームオブジェクトを作成しLoom-。

次の例では、乗算結果の頂点のすべてを更新するために、グリッド織機を使用しています。

 

-------------------------------------------------2

//第二のスレッドでScaleグリッド
void ScaleMesh(Mesh mesh, float scale)
{
//メッシュの頂点を取得します。
var vertices = mesh.vertices;
//アクションで新しいスレッドを実行します。
Loom.RunAsync(()=>{
//すべての頂点を通る//ループ
for(var i = 0; i < vertices.Length; i++)
{
//頂点をスケール
vertices[i] = vertices[i] * scale;
}
//メインスレッド上のいくつかのコードの実行
//グリッドを更新します
Loom.QueueOnMainThread(()=>{
//頂点を設定します。
mesh.vertices = vertices;
//境界を再計算
mesh.RecalculateBounds();
});

---------------------------------------------------------2 end

上記の関数は、パラメータなし、動作する任意のコンテンツへノーリターン。クロージャは、アクセスパラメータと独自のクラスや関数のローカル変数である第二のスレッドで行うラムダの使用の良い例です。

あなたは)=> {...}新しいスレッドで関数内のすべてのコードを実行するためにラムダ関数を定義します(使用することができます。

私たちは、メインスレッド上のメッシュの頂点の更新を変更する必要があるので、我々は、(フレームまたは次のフレームが次の更新サイクルと呼ばれている)次の更新サイクルの実行時処理にQueueOnMainThreadを使用しています。QueueOnMainThreadもアクションへの必要性をアップデート元の頂点メッシュを更新します。

ここでは織機のコードは次のとおりです。

=====================Loom.cs=====================3========中>>日

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using UnityEngine;

public class Loom : MonoBehaviour {

    #region 公共字段

    ///1
    ///スレッドの最大数、静的なパブリックフィールド
    ///
    public static int maxThreads = 8;

    #endregion

    #region プライベートフィールド

    ///2
    /// 現在のスレッド数、プライベート静的フィールド
    ///
    private static int numThreads;

    ///
    ///シングルトン
    ///
    private static Loom _current;

    private int _count;

    ///
    /// 初期化された
    ///
    private static bool initialized;

    private List _actions;
    private List _delayed;
    private List _currentDelayed;

    ///
    /// 行動の///現在のリスト
    ///
    private List _currentActions;

    #endregion

    #region パブリックプロパティ
   
    ///
    /// 現在の織機シングルトンオブジェクト属性取得
    ///
    public static Loom Current {
        get {
            Initialize();
            return _current;
        }
    }

    #endregion

    #region Unity3d API
   
    void Awake() {
        _current = this;
        initialized = true;
        _actions = new List();
        _delayed = new List();
        _currentDelayed = new List();
        _currentActions = new List();
    }

    void Update ( ) {
        lock ( _actions ) {
            _currentActions.Clear( );
            _currentActions.AddRange(_actions);
            _actions.Clear( );
        }
        foreach ( Action a in _currentActions ) {
            a( );
        }
        lock ( _delayed ) {
            _currentDelayed.Clear( );
            _currentDelayed.AddRange(_delayed.Where(d => d.time <= Time.time));
            foreach ( var item in _currentDelayed )
                _delayed.Remove(item);
        }
        foreach ( var delayed in _currentDelayed ) {
            delayed.action( );
        }
    }

    void OnDisable ( ) {
        if ( _current == this ) {
            _current = null;
        }
    }

    #endregion Unity3d API

    ///
    /// 初期化し、新しいゲームオブジェクトを作成織機、織機やスクリプトを追加
    ///
    private static void Initialize() {
        if (!initialized) {
            if (!Application.isPlaying)
                return;
            initialized = true;
            GameObject g = new GameObject("Loom");
            _current = g.AddComponent();
        }
    }
   
    ///
    /// 遅延キューエントリ
    ///
    public struct DelayedQueueItem {
        public float time;
        public Action action;
    }   

    ///
    /// メインスレッド上///コード実行
    ///    
    public static void QueueOnMainThread(Action action) {
        QueueOnMainThread(action, 0f);
    }
    ///
    /// コードは、メインスレッド上で実行するには、2番目のパラメータはTime.timeが実行応じて、数秒の実装の遅れである
    ///   
    public static void QueueOnMainThread(Action action, float time) {
        if (time != 0) {
            lock (Current._delayed) {
                // 値が時間遅延の効果を達成するためにtime.timeを追加
                Current._delayed.Add(new DelayedQueueItem { time = Time.time + time, action = action });
            }
        } else {
            lock (Current._actions) {
                Current._actions.Add(action);
            }
        }
    }

    ///
    /// 新しいスレッドで実行するコード
    ///   
    public static Thread RunAsync(Action a) {
        Initialize();
        while (numThreads >= maxThreads) {
            Thread.Sleep(1);
        }
        Interlocked.Increment(ref numThreads);
        ThreadPool.QueueUserWorkItem(RunAction, a);
        return null;
    }

    private static void RunAction(object action) {
        try {
            ((Action)action)();
        } catch(Exception e) {
            Debug.Log(e.Message);
            Debug.Log(e.Source);
        } finally  {
            Interlocked.Decrement(ref numThreads);
        }
    }
   
}

=====================Loom.cs====================================3

UnityScriptの場合は、フォルダに織機、プラスLoom.csを使用できるように:

//第二のスレッドで// Scaleグリッド
function ScaleMesh(mesh : Mesh, scale : float)
{
//Get the vertices of a mesh
var vertices = mesh.vertices;
//アクションで新しいスレッドを実行します。
Loom.RunAsync(function() {
//すべての頂点を通る//ループ
for(var i = 0; i < vertices.Length; i++)
{
//頂点をスケール
vertices[i] = vertices[i] * scale;
}
//メインスレッド上のいくつかのコードの実行
//グリッドを更新します
Loom.QueueOnMainThread(function() {
//頂点を設定します。
mesh.vertices = vertices;
//境界を再計算
mesh.RecalculateBounds();
});

 

 

| whaison | Unity3d | 23:38 | comments(0) | - | pookmark |
Comment




whaisonStudyNoteBook をFaceBookで いいね!





Share |