您最多选择25个主题 主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 
 

87 行
2.1 KiB

using Unity.Entities;
using UnityEngine;
[ExecuteAlways]
public class Mover : MonoBehaviour
{
public GameObject target;
public Vector3 relativeEndPoint = Vector3.up*10;
public float waitDuration = 4;
public float moveSpeed = 3;
#if UNITY_EDITOR
private void OnDrawGizmos()
{
Gizmos.color = Color.green;
Gizmos.DrawIcon(transform.position,"Elevator.tif");
}
private void OnDrawGizmosSelected()
{
Gizmos.color = Color.red;
Gizmos.DrawLine(transform.position, transform.position+ relativeEndPoint);
if (target != null)
target.transform.position = transform.position;
if (target != null)
{
target.transform.position = transform.position;
}
}
#endif
}
[DisableAutoCreation]
public class MoverUpdate : BaseComponentSystem<Mover>
{
public MoverUpdate(GameWorld world) : base(world) {}
protected override void Update(Entity entity, Mover mover)
{
// TODO (mogensh) Platforms disabled until we get stable interplation delay that can be used when predicting on platform
return;
var time = m_world.worldTime;
if (mover.target == null)
return;
var moveDistance = mover.relativeEndPoint.magnitude;
var moveDir = mover.relativeEndPoint.normalized;
var baseMoveDuration = moveDistance / mover.moveSpeed;
var totalDuration = mover.waitDuration*2 + baseMoveDuration*2;
var totalTickDuration = Mathf.FloorToInt(totalDuration / time.tickInterval);
var tickTime = time.tick % totalTickDuration;
var totalTime = tickTime * time.tickInterval + time.tickDuration;
var moveForwardStart = mover.waitDuration;
var moveForwardEnd = moveForwardStart + baseMoveDuration;
var moveBackwardsStart = moveForwardStart + baseMoveDuration + mover.waitDuration;
var moveDuration = 0.0f;
if (totalTime > moveForwardStart)
{
if (totalTime < moveForwardEnd)
{
moveDuration = totalTime - moveForwardStart;
}
else if (totalTime <= moveBackwardsStart)
{
moveDuration = baseMoveDuration;
}
else
{
moveDuration = baseMoveDuration - (totalTime - moveBackwardsStart);
}
}
mover.target.transform.position = mover.transform.position + moveDuration*mover.moveSpeed*moveDir;
}
}