あなたのコメントを読んだ後。必要なのはEventSystem.current.IsPointerOverGameObject()で、ポインタがUI上にあるかどうかを確認します。 true
ポインタがUIの上にある場合、それ以外の場合はfalse
です。 '!
'と一緒に使用し、マウスがUIを超えていない場合にのみ回転コードを実行できます。デスクトップ
モバイル
if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Ended && !EventSystem.current.IsPointerOverGameObject(Input.GetTouch(0).fingerId))
{
//Your code here
}
については
if(Input.GetMouseButtonUp(0) && !EventSystem.current.IsPointerOverGameObject())
{
//Your code here
}
//上記の解決策については
は動作するはずですが、バグがあります。 UI Button
の上でマウスボタンを押してUI Button
の外にリリースすると、クリックとして登録されます。したがって、基本的には、UI Button
をクリックしてUI Button
をリリースした場合にのみ、このソリューションが機能します。 U Button
の外にリリースすると、元の問題は再び元に戻ります。
一時的なboolean
の値を使用して、最初にボタンがInput.GetMouseButtonDown
のUIで押されたかどうかを確認することをお勧めします。 boolean
を保存した後、Button
がInput.GetMouseButtonUp(0)
でリリースされたときに使用できます。以下のソリューションは、モバイルとデスクトップの両方で動作するように提供されています。モバイルがテストされ、動作します。あなたは正確にそれを停止しているどのように
bool validInput = true;
private void Update()
{
validateInput();
#if UNITY_STANDALONE || UNITY_EDITOR
//DESKTOP COMPUTERS
if (Input.GetMouseButtonUp(0) && validInput)
{
//Put your code here
Debug.Log("Valid Input");
}
#else
//MOBILE DEVICES
if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Ended && validInput)
{
//Put your code here
Debug.Log("Valid Input");
}
#endif
}
void validateInput()
{
#if UNITY_STANDALONE || UNITY_EDITOR
//DESKTOP COMPUTERS
if (Input.GetMouseButtonDown(0))
{
if (EventSystem.current.IsPointerOverGameObject())
validInput = false;
else
validInput = true;
}
#else
//MOBILE DEVICES
if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Began)
{
if (EventSystem.current.IsPointerOverGameObject(Input.GetTouch(0).fingerId))
validInput = false;
else
validInput = true;
}
#endif
}
? –
あなたのコードはすべて動きの責任を負います。 –
@ḞḹáḿíṅḡⱫỏḿƀíéあなたはその質問を理解しませんでした。私は、マウスボタンを離すとキューブを動かすスクリプトを持っています。問題:キャンバス内のボタンを押すと、キューブは何に関係なく動きます。私はキャンバスボタンを押すとキューブを動かしたくありません。 – Dake