2021년 4학년 1학기 기업연계프로젝트2
컴퓨터소프트웨어공학과 <원광투어팀>
팀장 : 송유진
팀원 : 김나영, 이경희, 한유진
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
using Unity.FPS.Game;using UnityEngine;
namespace Unity.FPS.Gameplay{ [RequireComponent(typeof(Rigidbody), typeof(Collider))] public class Pickup : MonoBehaviour { [Tooltip("Frequency at which the item will move up and down")] public float VerticalBobFrequency = 1f;
[Tooltip("Distance the item will move up and down")] public float BobbingAmount = 1f;
[Tooltip("Rotation angle per second")] public float RotatingSpeed = 360f;
[Tooltip("Sound played on pickup")] public AudioClip PickupSfx; [Tooltip("VFX spawned on pickup")] public GameObject PickupVfxPrefab;
public Rigidbody PickupRigidbody { get; private set; }
Collider m_Collider; Vector3 m_StartPosition; bool m_HasPlayedFeedback;
protected virtual void Start() { PickupRigidbody = GetComponent<Rigidbody>(); DebugUtility.HandleErrorIfNullGetComponent<Rigidbody, Pickup>(PickupRigidbody, this, gameObject); m_Collider = GetComponent<Collider>(); DebugUtility.HandleErrorIfNullGetComponent<Collider, Pickup>(m_Collider, this, gameObject);
// ensure the physics setup is a kinematic rigidbody trigger
PickupRigidbody.isKinematic = true; m_Collider.isTrigger = true;
// Remember start position for animation
m_StartPosition = transform.position; }
void Update() { // Handle bobbing
float bobbingAnimationPhase = ((Mathf.Sin(Time.time * VerticalBobFrequency) * 0.5f) + 0.5f) * BobbingAmount; transform.position = m_StartPosition + Vector3.up * bobbingAnimationPhase;
// Handle rotating
transform.Rotate(Vector3.up, RotatingSpeed * Time.deltaTime, Space.Self); }
void OnTriggerEnter(Collider other) { PlayerCharacterController pickingPlayer = other.GetComponent<PlayerCharacterController>();
if (pickingPlayer != null) { OnPicked(pickingPlayer);
PickupEvent evt = Events.PickupEvent; evt.Pickup = gameObject; EventManager.Broadcast(evt); } }
protected virtual void OnPicked(PlayerCharacterController playerController) { PlayPickupFeedback(); }
public void PlayPickupFeedback() { if (m_HasPlayedFeedback) return;
if (PickupSfx) { AudioUtility.CreateSFX(PickupSfx, transform.position, AudioUtility.AudioGroups.Pickup, 0f); }
if (PickupVfxPrefab) { var pickupVfxInstance = Instantiate(PickupVfxPrefab, transform.position, Quaternion.identity); }
m_HasPlayedFeedback = true; } }}
|