c# - 有没有更好的方法来确定两个实体之间的平移距离小于 x 量,然后分配一个 int 值?
问题描述
嗨,谁花时间阅读这篇文章,如果您有答案,请提前感谢您:)我很感激。
当其中一个玩家(10 人游戏)距离在对象实体的范围内时,我需要将玩家自定义 int(我设置为 1-10)分配给对象(我已将所有设置为 0),因此,当玩家与对象发生碰撞时,它会分配给玩家自定义 int。
游戏开始时执行时出现以下错误:
InvalidOperationException:RecruitJob.playerData.Positions 不是值类型。作业结构可能不包含任何引用类型。Unity.Jobs.LowLevel.Unsafe.JobsUtility.CreateJobReflectionData(System.Type 类型,Unity.Jobs.LowLevel.Unsafe.JobType jobType,System.Object managedJobFunction0,System.Object managedJobFunction1,System.Object managedJobFunction2
using Unity.Collections;
using Unity.Entities;
using Unity.Jobs;
using Unity.Mathematics;
using Unity.Burst;
using Unity.Transforms;
using UnityEngine;
using System;
[UpdateAfter(typeof(PlayerTransformUpdateSystem))]
class HumanRecruitionSystem : JobComponentSystem
{
private PlayerPositionData playerData;
private HumanPositionData humanData;
protected override JobHandle OnUpdate(JobHandle inputDeps)
{
var job = new RecruitJob
{
playerData = playerData,
humanData = humanData,
recruitionDistance = Settings.PlayerCollisionRadius * Settings.HumanCollisionRadius
};
return job.Schedule(playerData.Length, humanData.Length, inputDeps);
}
}
[BurstCompile]
struct RecruitJob : IJobParallelFor
{
public PlayerPositionData playerData;
[NativeDisableParallelForRestriction]
public HumanPositionData humanData;
public float recruitionDistance;
public void Execute(int index)
{
var player = playerData.Recruits.Value;
var human = humanData.Recruits.Value;
float3 humanPosition = humanData.Positions.transform.position;
float3 recruitPosition = playerData.Positions.transform.position;
float distSquared = math.distance(recruitPosition, humanPosition);
if (distSquared < recruitionDistance)
{
human.Value = player.Value;
}
}
}
public struct HumanPositionData
{
public int Length;
[ReadOnly] public ComponentDataFromEntity<Human> Humans;
[ReadOnly] public ComponentDataProxy<Translation> Positions;
public ComponentDataProxy<RecruitedBy> Recruits;
}
public struct PlayerPositionData
{
public int Length;
[ReadOnly] public ComponentDataFromEntity<Player> Players;
[ReadOnly] public ComponentDataProxy<Translation> Positions;
[ReadOnly] public ComponentDataProxy<RecruitedBy> Recruits;
}
我需要尝试不同的方法还是有办法通过值类型获取翻译数据?
谢谢:)
解决方案
推荐阅读
- java - 我无法理解paintComponent只有在repaint遇到Thread.sleep时才会执行
- python - 两个日期之间的 SQLite 查询问题
- node.js - 在不安装的情况下检索有关已安装 npm 包的名称和信息
- azure-functions - Azure Functions:使用 Log4j2 配置 Slf4j 绑定并将日志发送到 appinsights
- pycharm - Pycharm - 在默认浏览器中显示结果/log.html 的快捷方式
- python - 如何使用kivy对齐矩形?
- python - 如何在列表中的另一个值之前删除一个元组
- razor - 如何在 2sxc 剃须刀模板中输出项目的创建、发布和修改日期/时间?
- r - 使用包“cmprsk”在 R 中自定义竞争风险图
- angular - RxJS 操作员在后台使用 .subscribe() 吗?