protected void UpdateTargetEntityPosition(RpgNetworkEntity entity) { if (entity == null) { return; } var targetPosition = entity.CacheTransform.position; CharacterEntity.PointClickMovement(targetPosition); }
public static ItemDropEntity DropItem(RpgNetworkEntity dropper, int itemDataId, short level, short amount) { var gameInstance = GameInstance.Singleton; var dropPosition = dropper.CacheTransform.position + new Vector3(Random.Range(-1f, 1f) * gameInstance.dropDistance, 0, Random.Range(-1f, 1f) * gameInstance.dropDistance); // Raycast to find hit floor Vector3? aboveHitPoint = null; Vector3? underHitPoint = null; var raycastLayerMask = ~(gameInstance.characterLayer.Mask | gameInstance.itemDropLayer.Mask); RaycastHit tempHit; if (Physics.Raycast(dropPosition, Vector3.up, out tempHit, 100f, raycastLayerMask)) { aboveHitPoint = tempHit.point; } if (Physics.Raycast(dropPosition, Vector3.down, out tempHit, 100f, raycastLayerMask)) { underHitPoint = tempHit.point; } // Set drop position to nearest hit point if (aboveHitPoint.HasValue && underHitPoint.HasValue) { if (Vector3.Distance(dropPosition, aboveHitPoint.Value) < Vector3.Distance(dropPosition, underHitPoint.Value)) { dropPosition = aboveHitPoint.Value; } else { dropPosition = underHitPoint.Value; } } else if (aboveHitPoint.HasValue) { dropPosition = aboveHitPoint.Value; } else if (underHitPoint.HasValue) { dropPosition = underHitPoint.Value; } // Random rotation var dropRotation = Vector3.up * Random.Range(0, 360); var identity = dropper.Manager.Assets.NetworkSpawn(gameInstance.itemDropEntityPrefab.gameObject, dropPosition, Quaternion.Euler(dropRotation)); var itemDropEntity = identity.GetComponent <ItemDropEntity>(); var dropData = CharacterItem.Create(itemDataId, level, amount); itemDropEntity.dropData = dropData; return(itemDropEntity); }