csharp JobSystemテスト迁移

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了csharp JobSystemテスト迁移相关的知识,希望对你有一定的参考价值。

using Unity.Collections;
using Unity.Jobs;
using UnityEngine;

// RaycastCommand使用ver.
public class JobTest : MonoBehaviour
{
    [SerializeField]
    private int _num = 100;

    /// <summary>
    /// 動かす対象たち
    /// </summary>
    private Transform[] _targets;

    /// <summary>
    /// 動かす対象のprefab
    /// </summary>
    public Transform prefab;

    /// <summary>
    /// NativeArrayは構造体です
    /// </summary>
    private NativeArray<float> _velocity;

    void OnEnable()
    {
        _targets = new Transform[_num];

        _velocity = new NativeArray<float>(_targets.Length, Allocator.Persistent);
        // バッファの初期化
        for (int i = 0; i < _targets.Length; i++)
        {
            var tr = Instantiate(prefab) as Transform;
            tr.localPosition =
                new Vector3(Random.Range(-400f, 400f), Random.Range(10, 20f), Random.Range(-400f, 400f));
            _targets[i] = tr;
            _velocity[i] = -1;
        }
    }

    void OnDisable()
    {
        _velocity.Dispose();
    }

    void Update()
    {
        // 入力バッファの用意
        int len = _targets.Length;
        var cmds = new NativeArray<RaycastCommand>(len, Allocator.TempJob);
        var results = new NativeArray<RaycastHit>(len, Allocator.Temp);

        // 入力バッファを埋める
        for (int i = 0; i < len; i++)
        {
            // 地面のColliderだけをヒット対象とするためLayerMaskセット
            cmds[i] = new RaycastCommand(_targets[i].localPosition, Vector3.down, 1000, 1 << 9, 1);
        }

        // ジョブで実行するレイキャストのバッチをスケジュールする => ジョブを実行
        JobHandle jobHandle = RaycastCommand.ScheduleBatch(cmds, results, 20);
        // ジョブの完了を確認する
        jobHandle.Complete();
        // 不要になったので、コマンドを削除
        cmds.Dispose();


        for (int i = 0; i < len; i++)
        {
            RaycastHit hit;

            Physics.Raycast(_targets[i].localPosition, Vector3.down, out hit, 1000, 1 << 9);
            results[i] = hit;
        }

        for (int i = 0; i < len; i++)
        {
            if (_velocity[i] < 0 && results[i].distance < 1f)
            {
                _velocity[i] = 2;
            }

            // 減速処理
            _velocity[i] -= 0.1f;
            // NativeArray型は構造体なので、この書き方はアウト
            //v -=0.1f
        }

        // RayCastHitが不要になるので解放
        results.Dispose();
        for (int i = 0; i < len; i++)
        {
            // 動かす対象の位置を更新
            _targets[i].localPosition += Vector3.up * _velocity[i];
        }
    }
}

以上是关于csharp JobSystemテスト迁移的主要内容,如果未能解决你的问题,请参考以下文章

csharp ScreenPointToRayテスト

csharp カスタム属性テスト

csharp AnimationEventで对象参照とAnimationEvent型を送るテスト

php Gist Publicテスト

php ログイン认证テスト

php テスト