現在Unityでマルチディスプレイを想定した対戦カードゲームを製作しています。
カードはSpriteを用いてPrefab化することで実装しています。
1枚目がPlayer1の視点、2枚目がPlayer2の視点で、Player2の画面では自機を手前に表示させたいためカメラの上下を反転させています。
ただこのカメラを反転しているせいか、カードをマウスのドラッグで移動させる際にDisPlay1では正常に動くのですが、Display2ではクリック位置が反転して、反転した位置にあるカードをクリックしてしまいます。これはどのようにしたら改善できますでしょうか?
OnWillRenderObjectを利用して特定のカメラに写っている時はPointerEventDataのpositionを反転させたり、カードがどちらの手札にあるか判定して移動処理を分けたりと試みましたが上手くいきませんでした…。
以下にコードを記載させていただきます。何かアドバイスいただけますと幸いです。
↓ドラッグ移動部分のみのコード
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.EventSystems; 5 6public class CardMovement : MonoBehaviour, IDragHandler 7{ 8 public void OnDrag(PointerEventData data) 9 { 10 Vector3 TargetPos = Camera.main.ScreenToWorldPoint(data.position); 11 TargetPos.z = 0; 12 transform.position = TargetPos; 13 } 14} 15
↓OnWillRenderObjectなどを使用してみたコード
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.EventSystems; 5 6public class CardMovement : MonoBehaviour, IDragHandler 7{ 8 private GameObject cameraObj; 9 private GameObject cameraObj2; 10 private Camera camera; 11 private Camera camera2; 12 13 private bool _isPlayerCard; 14 15 //メインカメラに付いているタグ名 16 private const string MAIN_CAMERA_TAG_NAME = "MainCamera"; 17 18 //カメラに表示されているか 19 private bool _isRendered = false; 20 21 22 23 void Start() 24 { 25 cameraObj = GameObject.Find("MainCamera"); 26 cameraObj2 = GameObject.Find("MainCamera2"); 27 gameManager = GameManagerObj.GetComponent<GameManager>(); 28 camera = cameraObj.GetComponent<Camera>(); 29 camera2 = cameraObj2.GetComponent<Camera>(); 30 } 31 32 void Update() 33 { 34 35 _isRendered = false; 36 } 37 38 public void OnDrag(PointerEventData data) 39 { 40 Vector3 TargetPos; 41 42 43 if (_isRendered) 44 { 45 TargetPos = camera.ScreenToWorldPoint(data.position); 46 } 47 else 48 { 49 TargetPos = camera.ScreenToWorldPoint(data.position); 50 } 51 Debug.Log(data.position); 52 Debug.Log(TargetPos); 53 TargetPos.z = 0; 54 transform.position = TargetPos; 55 } 56 57 private void OnWillRenderObject() 58 { 59 //メインカメラに映った時だけ_isRenderedを有効に 60 if (Camera.current.tag == MAIN_CAMERA_TAG_NAME) 61 { 62 _isRendered = true; 63 } 64 } 65} 66
回答1件
あなたの回答
tips
プレビュー