首页 > 解决方案 > 有没有更好的方法来确定两个实体之间的平移距离小于 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;
}

我需要尝试不同的方法还是有办法通过值类型获取翻译数据?

谢谢:)

标签: c#unity3d

解决方案


推荐阅读