対戦カードゲームをunityとc#とphotonで作りたい:対戦相手のチップを触れないようにする(16)

Githubソースコード公開&まとめ

現時点では、対戦相手のチップを触れてしまいますし、チップスタックから平面チップ化もできます。

 

現状では、チップの奪い合いの別のゲームになってしまいそうなので、自分のチップしか触れなくします。

 

それからチップの動きもカクカクなのでもっとスムーズに動くようにしたいと思います。

この機能はカードでも同じものをつけているので、スクリプトをCardPrefabから流用します。

 

考え方としては、デフォルトの状態で、BoxColliderのチェックボックスをオフにしておいて、PhotonのIsMineがtrueである場合だけオンにするスクリプトを書き加えます。

 

それから、以前作った動きを滑らかにするスクリプトはそのまま流用します。

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ChipNetworkMover : Photon.MonoBehaviour {

    Vector3 position;
    float smoothing = 1f;


    void Start()
    {
        if (photonView.isMine)
        {
            GetComponent<BoxCollider2D>().enabled = true;
        }
        else
        {
            StartCoroutine("UpdateData");
        }
    }
    IEnumerator UpdateData()
    {
        while (true)
        {
            transform.position = Vector3.Lerp(transform.position, position, Time.deltaTime * smoothing);
            yield return null;
        }
    }
    void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info)
    {

        if (stream.isWriting)
        {
            stream.SendNext(transform.position); //現在のポジションを送る
           
        }
        else
        {
            position = (Vector3)stream.ReceiveNext(); //現在のポジションを受信
        }
    }
}

 

上のスクリプトを忘れずにPhotonViewにドラッグ&ドロップして監視対象にしましょう。

 

それから、チップの立面をダブルクリックで新しくチップが作成されないように、IsMine=falseの時はChipCreate.csを無効化します。

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ChipNetworkMover3 : Photon.MonoBehaviour
{
    void Start()
    {
        if (photonView.isMine != true)
        {
            GetComponent<ChipCreate>().enabled = false;
        }
    }
}

これで、お互いのチップを触ることはできなくなりました。

 

余談ですが、途中でlerpを含む一番上のスクリプトを間違って立面のチップにアタッチしたところ、突然チップが横から飛んできて跳ねだしました。その様子が面白くて思わず笑ってしまったので、GIFにして張っておきます。

 

良かったらクリックしてみて下さい。

もしよろしければ、Photonについて私が知りえる限りの情報を徹底的にまとめてみたので、下記の記事も読んで下さいね!

おすすめの記事