Итак, я работаю над проектом, в котором есть несколько динамических объектов тумана, и я хотел попробовать использовать для него DOTS, по сути, это тонна маленьких спрайтов, которые сжимаются при приближении игрока. У меня все это работает нормально, и теперь мне нужно обновить объекты с учетом позиции игрока.
Я попробовал напрямую передать преобразование игрока, но это не сработало, поэтому я решил при передаче вектора2. Однако мне не удалось обновить этот вектор2 в авторском сценарии или даже в файле debug.log. Думаю, это связано с тем, что объект находится в подсцене, или с тем, что он является объектом, и теперь я ищу исправление.< /p>
FogAuthoring.cs
using System.Collections;
using System.Collections.Generic;
using Unity.Entities;
using Unity.Mathematics;
using UnityEngine;
public class FogAuthoring : MonoBehaviour
{
public float LerpSpeed;
public float TargetScale;
public float2 PlayerPosition;
private Transform _player;
private void Start()
{
_player = GameObject.FindWithTag("Player").transform;
Debug.Log("A");
}
private void Update()
{
PlayerPosition = new float2(_player.position.x, _player.position.y);
Debug.Log("B");
}
private class Baker : Baker
{
public override void Bake(FogAuthoring authoring)
{
Entity entity = GetEntity(TransformUsageFlags.Dynamic);
AddComponent(entity, new FogData
{
LerpSpeed = authoring.LerpSpeed,
TargetScale = authoring.TargetScale,
PlayerPosition = authoring.PlayerPosition
});
}
}
}
public struct FogData : IComponentData
{
public float LerpSpeed;
public float TargetScale;
public float2 PlayerPosition;
}
FogControllerDOTS.cs
using System.Collections
using System.Collections.Generic;
using UnityEngine;
using Unity.Burst;
using Unity.Entities;
using Unity.Transforms;
using Unity.Jobs;
public partial struct FogControllerDOTS : ISystem
{
public const float distThreshold = 5;
public void OnCreate(ref SystemState state)
{
state.RequireForUpdate();
}
[BurstCompile]
public void OnUpdate(ref SystemState state)
{
/*
foreach ((RefRW localTransform, RefRO fogData) in SystemAPI.Query())
{
float currentScale = localTransform.ValueRO.Scale;
float targetScale;
if (Vector2.Distance(new Vector2(localTransform.ValueRO.Position.x, localTransform.ValueRO.Position.y), fogData.ValueRO.PlayerPosition)
Подробнее здесь: https://stackoverflow.com/questions/788 ... ne-unity-c