Я студент -программист, и мы учимся использовать Unity. У меня есть эта проблема в C#.
, поэтому у меня есть класс оружия и чил с именем оружия.
On Weamon: < /p>
public override void PrimaryInteraction() {
if (transform.parent == null || transform.parent.name != "Hand")
{
Debug.LogWarning("Weapon is not being held by a player!");
return;
}
}
< /code>
on Gun: < /p>
public override void PrimaryInteraction()
{
base.PrimaryInteraction();
if (!_gunModel.Automatic && Time.time >= _nextTimeToFire) {
_nextTimeToFire = Time.time + 1f / _gunModel.FireRate;
Shoot();
return;
}
_isShooting=true;
}
< /code>
Первичная инвентация вызывает в другом файле, который обрабатывает ввод игрока с использованием полиморфизма. < /p>
public void HandlePrimaryAction()
{
GameObject objectInHand = _handController.GetObjectInHand();
if (HandleObjectInHand(objectInHand)) return;
if (Physics.Raycast(_playerCamera.transform.position, _playerCamera.transform.forward, out RaycastHit hit, 5f, _interactableLayer))
{
HandleRaycastHit(hit);
}
}
private bool HandleObjectInHand(GameObject obj)
{
if (obj == null) return false;
if (obj.TryGetComponent(out IConsumableObject consumable))
{
_inventoryManager.ConsumeCurrentItem();
return true;
}
if (obj.TryGetComponent(out Weapon weapon))
{
weapon.PrimaryInteraction();
return true;
}
return false;
}
private void HandleRaycastHit(RaycastHit hit)
{
GameObject objectInHand = _handController.GetObjectInHand();
if (hit.collider.TryGetComponent(out IRequiredObjectInteraction requiredInteraction) && objectInHand != null)
{
requiredInteraction.RequiredObjectInteraction(objectInHand);
}
if (hit.collider.TryGetComponent(out IInteractableObject interactable))
{
interactable.PrimaryInteraction();
_currentInteractableObject = interactable;
}
if (hit.collider.TryGetComponent(out DraggableObject draggable) && !objectInHand)
{
DragObject(draggable);
}
}
< /code>
Моя проблема заключается в том, что даже если я возвращаюсь на оружие, функция по -прежнему выполнена на пистолете, потому что возврат предназначен только для базы. /> Я не знаю, какое решение я могу использовать. Я думал об исключениях для катеров, но если это возможно, я хочу более элегантное решение, если это не хорошая практика.
Подробнее здесь: https://stackoverflow.com/questions/795 ... ass-in-oop