ComputeJobOptimization 属性不起作用。缺少 using 指令或程序集引用?
ComputeJobOptimization Attribute isnt working. Missing a using directive or an assembly reference?
正在尝试统一使用职业系统。 [ComputeJobOptimization] 无法放入我的代码中。
Assets/GameManager.cs(26,6):错误 CS0246:找不到类型或命名空间名称 'ComputeJobOptimization'(是否缺少 using 指令或程序集引用?)
我添加了 Burst 包、Jobs 包。将所有可能的 using.xxx 放在代码中。 None 他们成功了。我哭了。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Jobs;
using Unity.Jobs;
using Unity.Collections;
using Unity.Burst;
public class GameManager : MonoBehaviour
{
[SerializeField]
int shipAmount;
[SerializeField]
GameObject enemyShipPrefab;
TransformAccessArray transforms;
MovementJob movementJob;
JobHandle movementJobHandle;
public float fallSpeed = 10.0f;
public static GameManager GM = null;
//ComputeJobOptimization
[ComputeJobOptimization]
public struct MovementJob : IJobParallelForTransform
{
public float fallSpeed;
public float topBound;
public float bottomBound;
public float deltaTime;
public void Execute(int index, TransformAccess transform)
{
Vector3 down = new Vector3(0, -1f, 0);
Vector3 pos = transform.position;
pos += down * deltaTime * fallSpeed;
if (pos.y < bottomBound)
{
pos.y = topBound;
}
transform.position = pos;
}
}
private void Start()
{
if (GM == null)
{
GM = this;
}
transforms = new TransformAccessArray(0);
}
private void OnDisable()
{
this.transforms.Dispose();
}
// Start is called before the first frame update
void Update()
{
if (Input.GetKeyDown("space"))
AddShips(shipAmount);
movementJob = new MovementJob()
{
fallSpeed = fallSpeed,
bottomBound = -3.5f,
topBound = 5.5f,
deltaTime = Time.deltaTime
};
movementJob.Schedule(transforms);
JobHandle.ScheduleBatchedJobs();
}
private void LateUpdate()
{
movementJobHandle.Complete();
}
void AddShips(int amount)
{
movementJobHandle.Complete();
transforms.capacity = transforms.length + amount;
for (int i = 0; i < amount; i++)
{
float xVal = Random.Range(-8.4f, 8.4f);
float yVal = Random.Range(-3.5f, 5.5f);
float zVal = Random.Range(-2.0f, 10f);
Vector3 pos = new Vector3(xVal, yVal, zVal);
Quaternion rot = Quaternion.Euler(0f, 180f, 0f);
var obj = Instantiate(enemyShipPrefab, pos, rot) as GameObject;
transforms.Add(obj.transform);
}
}
}
据我了解,这现在是 [BurstCompile] 属性。我在尝试使用新属性时也遇到了类似的问题,我不得不从统一包管理器 window.
导入 burst 包库
正在尝试统一使用职业系统。 [ComputeJobOptimization] 无法放入我的代码中。
Assets/GameManager.cs(26,6):错误 CS0246:找不到类型或命名空间名称 'ComputeJobOptimization'(是否缺少 using 指令或程序集引用?)
我添加了 Burst 包、Jobs 包。将所有可能的 using.xxx 放在代码中。 None 他们成功了。我哭了。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Jobs;
using Unity.Jobs;
using Unity.Collections;
using Unity.Burst;
public class GameManager : MonoBehaviour
{
[SerializeField]
int shipAmount;
[SerializeField]
GameObject enemyShipPrefab;
TransformAccessArray transforms;
MovementJob movementJob;
JobHandle movementJobHandle;
public float fallSpeed = 10.0f;
public static GameManager GM = null;
//ComputeJobOptimization
[ComputeJobOptimization]
public struct MovementJob : IJobParallelForTransform
{
public float fallSpeed;
public float topBound;
public float bottomBound;
public float deltaTime;
public void Execute(int index, TransformAccess transform)
{
Vector3 down = new Vector3(0, -1f, 0);
Vector3 pos = transform.position;
pos += down * deltaTime * fallSpeed;
if (pos.y < bottomBound)
{
pos.y = topBound;
}
transform.position = pos;
}
}
private void Start()
{
if (GM == null)
{
GM = this;
}
transforms = new TransformAccessArray(0);
}
private void OnDisable()
{
this.transforms.Dispose();
}
// Start is called before the first frame update
void Update()
{
if (Input.GetKeyDown("space"))
AddShips(shipAmount);
movementJob = new MovementJob()
{
fallSpeed = fallSpeed,
bottomBound = -3.5f,
topBound = 5.5f,
deltaTime = Time.deltaTime
};
movementJob.Schedule(transforms);
JobHandle.ScheduleBatchedJobs();
}
private void LateUpdate()
{
movementJobHandle.Complete();
}
void AddShips(int amount)
{
movementJobHandle.Complete();
transforms.capacity = transforms.length + amount;
for (int i = 0; i < amount; i++)
{
float xVal = Random.Range(-8.4f, 8.4f);
float yVal = Random.Range(-3.5f, 5.5f);
float zVal = Random.Range(-2.0f, 10f);
Vector3 pos = new Vector3(xVal, yVal, zVal);
Quaternion rot = Quaternion.Euler(0f, 180f, 0f);
var obj = Instantiate(enemyShipPrefab, pos, rot) as GameObject;
transforms.Add(obj.transform);
}
}
}
据我了解,这现在是 [BurstCompile] 属性。我在尝试使用新属性时也遇到了类似的问题,我不得不从统一包管理器 window.
导入 burst 包库