using UnityEngine.InputSystem.Controls;
using UnityEngine.InputSystem.Layouts;
using UnityEngine.InputSystem.LowLevel;
using UnityEngine.Scripting;
namespace UnityEngine.InputSystem
{
[InputControlLayout(stateType = typeof(PointerState), isGenericTypeOfDevice = true)]
[Preserve]
public class Pointer : InputDevice, IInputStateCallbackReceiver
{
public Pointer();
public static Pointer current { get; }
public Vector2Control position { get; }
public Vector2Control delta { get; }
public Vector2Control radius { get; }
public AxisControl pressure { get; }
public ButtonControl press { get; }
public override void MakeCurrent();
protected override void FinishSetup();
protected void OnNextUpdate();
protected override void OnRemoved();
protected void OnStateEvent(InputEventPtr eventPtr);
}
}
public class CubeController : InteractiveObjectController
{
public Transform mainCube;
public Transform lidCube;
#region instance
static CubeController instance = null;
public static CubeController Instance
{
get
{
if (instance == null)
{
instance = FindObjectOfType<CubeController>();
}
return instance;
}
}
#endregion
public override void InteractiveAction()
{
lidCube.DORotate(new Vector3(-90, 0, 0), 1).OnComplete(() => CanvasManager.Instance.ShowItemInBox());
}
}
public class TestClass{
public void OpenCube() {
CubeController.Instance.mainCube.position = Pointer.current.position.ReadValue();
CubeController.Instance.InteractiveAction();
}
}
TestClass에서 Pointer.currnt는 정적변수고 Cubecontroller에서 instance불러오는건 인스턴스화 맞나요??
인스턴스화라는건 클래스(설계도)가 메모리에 올라가 실체화 되었을때 인스턴스라고 불리는거고, Pointer에 current는 변수가 아니라 get;만 하니까 단순히 내부의 변수를 바깥으로 쏴주는 역할을 하는 프로퍼티임
그럼 cubecontroller의 instance는 인스턴스화가 맞는건가요??
싱글톤이라는거는 클래스가 메모리에 단 하나만의 인스턴스만 올리도록 허용하는 구조고 static 변수로 자기자신의 메모리주소를 기억한다음에 만약에 자기자신이 메모리에 올라가있으면 인스턴스를 재생성하지않고 있던 것을 재사용하는 거임
첫번째 호출에서는 인스턴스화가 일어나지만 그다음부턴 그냥 자기 자신의 메모리를 return만 하는거임
그럼 싱글톤이 아닌란건가요?? 갑자기 헷갈리네요 ㄷㄷ
싱글톤 구조 맞고 인스턴화라는게 한번만 된다는말임 Cubecontroller에서 instance불러오는게 인스턴스화 라는건 반은맞고 반은 틀린말이라는거임
Pointer도 인스턴스화가되서 Pointer.current로 불러와서 안에있는 좌표 position에 접근할수있는거 아닌가요 왜 Pointer는 싱글톤이 아닌거죠??
반대로 물어볼게 너는 싱글톤이 뭐라고 생각하는거임
클래스를 정적으로 메모리에 인스턴스화한후 어느곳(네임스페이스가 같을경우)에서 인스턴스를 통해 해당 클래스내의 변수참조가능? 이런식으로 알고있었어요..
해당 프로그램 내에서 동시에 여러개의 인스턴스화가 존재하지않고 하나의 객체가 정적메모리에존재하지만 싱글톤객체가 너무커지면 다른 메모리할당할수있는 공간이 적어져서 프로그램성능이 하락하기때문에 되도록이면 간단하게만 사용??
싱글톤에서 중요한건 어느곳에서 인스턴스를 통해 변수를 참조하는게 중요한게 아니라, 자기 자신의 인스턴스가 하나만 생성되도록 하는 구조를 짜는게 중요한거임. 다른 맴버변수나 매서드를 staic으로 만들면 꼭 자기자신의 인스턴스를 참조하지 않아도 어디에서든 참조가능함
그리고 보통 싱글톤은 생성자를 private로 막는것이 통상적인 구조임
설명 감사합니다. ㅎㅎ
메모리 용량도 상관없이 싱글톤의 주된 목적은 단 하나, 어느 객체를 하나의 인스턴스만 놓고 나머지가 이 인스턴스를 공유해서 쓰고싶다. 이게 다임
저는 씬과 씬사이를 연결하는 용도로 싱글톤은 사용하고 있어요 메인씬에 플레이어 카메라 UI등 게임내에 하나만존재하고 다른씬과 동시돌릴시 다른씬의 함수가 UI의 텍스쳐에 글을쓰는경우 UI를 싱글톤 인스턴스화후 UIManager.instance.PrintText(string 글자출력) 이런식으로 사용중입니다.