유니티에서 Input 브랜치를 만드는 이야기.

5055 단어 UnityC#

개요


Unity는'여러 개의 조작 가능한 대상을 동시에 조작할 수 있다'고 지우기 위해 항상 한 곳에서만 입력을 재생하는 구조를 만들었다.

생성됨


거치다


나는 개인적으로 맞춤형 전제하에서 반드시 최소한의 기능만 준비했다고 생각한다.게임은 유저 캐릭터와 UI 등 많은'입력을 통해 조작할 수 있는 것'이 필요하지만, 각자 난잡한 입력 정보를 얻게 되면 조작 대상의 전환도 Bool 판정이나 Game Object 자체의 Active를 통해서만 정지되어 잘못된 온상이 될 수 있다.
따라서 입력 정보를 항상 한 곳으로만 흐르는 회로기(회로를 전환하는 진열) 같은 것을 통해 제어 대상 = 입력과 출력 목적지를 각자 판정하지 않아도 된다는 점을 고려해 제작했다. 
참고로 입력의 의존 대상은 인터페이스를 강제할 수 있기 때문에 입력 출력 원본의 가변 (자원 사용이나 모델 사용) 에도 대응할 수 있다.

구조


입력의 출력원은 공급업체이고 입력을 사용하는 측은 수신기다.
공급업체는 두 개의 실체를 포함하는데, 하나는 실제 출력이고, 다른 하나는 항상 비입력 값을 되돌려준다.수신기는 브로커를 통해 공급업체에 접근하지만 하나의 수신기에서만 실체를 되돌려줍니다. 이외에도 항상 Empty를 되돌려줌으로써 수신기는 자신이 현재 조작 대상인지 아닌지를 의식하지 않고 실시할 수 있습니다.

사용 방법


GitHub Release의 UnityPackage를 가져오십시오.샘플도 포함되어 있으니 참고하시기 바랍니다.

수신기


private void Start(){
   InputTt.ChangeReceiver(this);//本来はレシーバーが直接ChangeReceiverするのではなく別途Managerなどの制御クラスで行うべき
}

private void Update(){  
   if (InputTt.Input(this).XXXX()){
   //移動処理とか
   }
}

공급업체


Interface


표준은 UnityEngine입니다.입력의 주요 방법으로 정의된 포장기
IInputSupplier.cs
public interface IInputSupplier{
   bool anyKey{ get; }
   //中略
}

Entity


WrapUnityStandardInputEntity.cs
public class WrapUnityStandardInputEntity:IInputSupplier{
   public bool anyKey => Input.anyKey;
   //中略
}

Empty


WrapUnityStandardInputEmpty.cs
public class WrapUnityStandardInputEmpty:IInputSupplier{
   public bool anyKey => false; 
   //中略
}

Tips

  • 본 라이브러리는 입력에 대한 중계와 지점일 뿐이기 때문에 공급업체는 맞춤형 전제 조건이다. 
  • Entity에서 Monobehaviour 상속 클래스를 사용하려면 다음과 같이 주석 출력 등을 통해 InputTt 클래스의 초기화를 잘못한 후에 설정하십시오
  • InputTt.cs
    private static void SupplierInitialize(){
       //SetSupplier(new WrapUnityStandardInputEntity(),new WrapUnityStandardInputEmpty());
    }
    
    public static void SetSupplier(IInputSupplier entity,IInputSupplier empty){
       LogWrite("------see Input Supplier------");
       inputSupplier = entity;
       emptySupplier = empty;
    }
    
  • 도대체 InputTt야.Input (object key) 에 넘겨진 실례에서만 판정하기 때문에 여러 수신기에서 공통된 실례를 가지고 키로 접근하면 여러 클래스에서 입력을 받을 수 있습니다
  • InputTt.IsActive 속성에서 입력을 중지할 수 있습니다
  • 모든 변경 사항을 인스턴스로 중지하는 Freeze() 및 UnFreeze() 메서드를 제공합니다.어둡게 회전할 때 등, 어쨌든 조작하기 싫을 때 IsActive와 함께 사용합니다
  • 잡담


    일원화 관리가 안 되는 처리가 싫어서 지금까지 입력 제어 방법 3개를 만들었는데 이게 가장 편리하고 맞춤 제작도 쉬워서 공개를 해봤어요.

    좋은 웹페이지 즐겨찾기