별로 남지 않는 강의를 빨리 수강하고 개인 프로젝트를 진행해야겠다.
if(!Mathf.Approximately(a, b))
{
// 구현
}
설명: float는 부동 소수점으로 같은 float값이라도 0.00001정도의 차이가 생길 수가 있는데 그럴 때 해당 Mathf.Approximately(a, b)를 사용하여 둘 사이가 근사한지 판단을 하게 해주는 함수이다.
public class PlayerCondition : MonoBehaviour, IDamagable
{
public UICondition uiCondition;
// 1. get을 이용할 때
Condition health { get { return uiCondition.health; } }
// 2. 선언하여 값을 받아올 때
Condition health
void Start()
{
health = uiCondition.health
}
설명: 둘이 같은 값의 필드를 가져온다는 것은 같지만 둘의 차이는 그 후에 차이가 난다.
1번 get을 사용할 경우에는 해당 필드의 값을 변경하면 같이 변경이 되지만 2번 선언 후 값을 받았을 때는 변수에 필드만 받아져 값을 변경하면 같이 변경이 되지 않는다.
public void OnLook(InputAction.CallbackContext context)
{
mouseDelta = context.ReadValue<Vector2>();
}
public void OnJump(InputAction.CallbackContext context)
{
if (context.phase == InputActionPhase.Started)
{
rigidbody.AddForce(Vector2.up * jumpPower, ForceMode.Impulse);
}
}
public void OnMove(InputAction.CallbackContext context)
{
// 버튼을 누르는 중이라면
if (context.phase == InputActionPhase.Performed)
{
moveInput = context.ReadValue<Vector2>();
}
// 버튼을 안눌렀을 때
else if (context.phase == InputActionPhase.Canceled)
{
moveInput = Vector2.zero;
}
}
설명: 각 메서드를 이벤트에 추가 하여 이동 제어
public interface IItemInfo
{
string ItemText();
}
public interface IConsumable
{
void Use();
}
public enum ItemType
{
Consumable,
Resource,
Equipment
}
[CreateAssetMenu(fileName = "Item", menuName = "New Item")]
public class ItemData : ScriptableObject
{
[Header("Info")]
public string itemName;
public string description;
public ItemType type;
//public Sprite icon;
//public GameObject dropPrefab;
}
설명: 아이템의 정보를 ScriptableObject를 이용하여 객체를 생성하여 저장할 수 있게 함
public class PlayerInteraction : MonoBehaviour
{
public float rayDistance;
public LayerMask interactionLayer;
public TextMeshProUGUI interactionText;
private float rateTime = 0;
private float checkTime = 0.1f;
private Camera camera;
private IItemInfo itemInfo;
private GameObject interactionObject;
private void Awake()
{
camera = Camera.main;
}
private void Update()
{
if (Time.time - rateTime > checkTime)
{
rateTime = Time.time;
Interaction();
}
}
private void Interaction()
{
Ray ray = camera.ScreenPointToRay(new Vector3(Screen.width / 2, Screen.height / 2));
RaycastHit hit;
if(Physics.Raycast(ray, out hit, rayDistance, interactionLayer))
{
// 해당 오브젝트 UI에 나오게
if (interactionObject == null)
{
interactionObject = hit.collider.gameObject;
itemInfo = hit.collider.GetComponent<IItemInfo>();
VoidText();
}
}
else
{
interactionObject = null;
itemInfo = null;
interactionText.gameObject.SetActive(false);
}
}
private void VoidText()
{
interactionText.gameObject.SetActive(true);
interactionText.text = itemInfo.ItemText();
}
}
설명: 카메라의 ScreenPointToRay를 이용하여 한 가운데로 Ray를 사용하여 거리인 rayDistance안에 있으며 레이어가 interactionLayer인 hit의 오브젝트의 정보를 받아서 해당 정보를 Text인 interactionText에 출력하게 함
1. Mathf.Approximately: 두개의 값이 근사한지 알아내는 함수
2. public과 프로퍼티로의 변수 차이: 짧고 굵게 깊은,얕은 복사 느낌
1. 없음
1. 없음
몇 번을 사용했지만 정확한 의미를 알지 못하고 넘어가는 경우가 많았는데 오늘 하룻동안 많은 기능을 다시 알게되고 이해를 하고 넘어가서 엄청 알찬 하루였던거 같다.