유니티에서 Input 브랜치를 만드는 이야기.
개요
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.cspublic interface IInputSupplier{
bool anyKey{ get; }
//中略
}
Entity
WrapUnityStandardInputEntity.cspublic class WrapUnityStandardInputEntity:IInputSupplier{
public bool anyKey => Input.anyKey;
//中略
}
Empty
WrapUnityStandardInputEmpty.cspublic class WrapUnityStandardInputEmpty:IInputSupplier{
public bool anyKey => false;
//中略
}
Tips
거치다
나는 개인적으로 맞춤형 전제하에서 반드시 최소한의 기능만 준비했다고 생각한다.게임은 유저 캐릭터와 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.cspublic interface IInputSupplier{
bool anyKey{ get; }
//中略
}
Entity
WrapUnityStandardInputEntity.cspublic class WrapUnityStandardInputEntity:IInputSupplier{
public bool anyKey => Input.anyKey;
//中略
}
Empty
WrapUnityStandardInputEmpty.cspublic class WrapUnityStandardInputEmpty:IInputSupplier{
public bool anyKey => false;
//中略
}
Tips
입력의 출력원은 공급업체이고 입력을 사용하는 측은 수신기다.
공급업체는 두 개의 실체를 포함하는데, 하나는 실제 출력이고, 다른 하나는 항상 비입력 값을 되돌려준다.수신기는 브로커를 통해 공급업체에 접근하지만 하나의 수신기에서만 실체를 되돌려줍니다. 이외에도 항상 Empty를 되돌려줌으로써 수신기는 자신이 현재 조작 대상인지 아닌지를 의식하지 않고 실시할 수 있습니다.
사용 방법
GitHub Release의 UnityPackage를 가져오십시오.샘플도 포함되어 있으니 참고하시기 바랍니다.
수신기
private void Start(){
InputTt.ChangeReceiver(this);//本来はレシーバーが直接ChangeReceiverするのではなく別途Managerなどの制御クラスで行うべき
}
private void Update(){
if (InputTt.Input(this).XXXX()){
//移動処理とか
}
}
공급업체
Interface
표준은 UnityEngine입니다.입력의 주요 방법으로 정의된 포장기
IInputSupplier.cspublic interface IInputSupplier{
bool anyKey{ get; }
//中略
}
Entity
WrapUnityStandardInputEntity.cspublic class WrapUnityStandardInputEntity:IInputSupplier{
public bool anyKey => Input.anyKey;
//中略
}
Empty
WrapUnityStandardInputEmpty.cspublic class WrapUnityStandardInputEmpty:IInputSupplier{
public bool anyKey => false;
//中略
}
Tips
private void Start(){
InputTt.ChangeReceiver(this);//本来はレシーバーが直接ChangeReceiverするのではなく別途Managerなどの制御クラスで行うべき
}
private void Update(){
if (InputTt.Input(this).XXXX()){
//移動処理とか
}
}
public interface IInputSupplier{
bool anyKey{ get; }
//中略
}
public class WrapUnityStandardInputEntity:IInputSupplier{
public bool anyKey => Input.anyKey;
//中略
}
public class WrapUnityStandardInputEmpty:IInputSupplier{
public bool anyKey => false;
//中略
}
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;
}
잡담
일원화 관리가 안 되는 처리가 싫어서 지금까지 입력 제어 방법 3개를 만들었는데 이게 가장 편리하고 맞춤 제작도 쉬워서 공개를 해봤어요.
Reference
이 문제에 관하여(유니티에서 Input 브랜치를 만드는 이야기.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/domasyake/items/eb0b9b9c1355966cb53a
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(유니티에서 Input 브랜치를 만드는 이야기.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/domasyake/items/eb0b9b9c1355966cb53a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)