1

そのため、スクリプトが実行されているプレーヤーのヘルス ポイントを撤回するために呼び出される関数を持つプレーヤー ヘルス スクリプトがあります。

したがって、PlayerOnes のヘルス スクリプトは彼のヘルスを追跡し、PlayerTwo は彼のヘルスを追跡します。

弾丸の衝突が検出されると、衝突したオブジェクトのヘルス スクリプトから takedamage が呼び出されます。したがって、ダメージを受けます。NPC では機能しますが、ネットワーク プレイヤーでは機能しません。

P1 が ---> P2 を 2 回撃った場合、50 のダメージを受け、次に再び 50 のダメージを受けますが、死者を出さず、プレイヤーにヒットを記録しません。つまり、プレイヤーがダメージを受けないためです。ヒットポイントは 0 であるため、衝突を検出するだけで何もしません。ただし、残りのコードは実行せず、プレーヤーの位置などを変換しません。スクリプトは両方のコンピューターで実行され、両方で衝突が検出されるため、ネットワークに接続されているかどうかに関係なく、それを検出して更新を実行し、登録する必要があります。

何か案は?

using UnityEngine;
using System.Collections;

public class Health : MonoBehaviour {
    public float hitPoints = 100;
    public Transform explosionPrefab;
    private Transform explosion;
    public  float currentHitPoints;
    SpawnSpot[] spawnSpots; 
    private bool dead = false;
    GameObject deadZone;
    // Use this for initialization
    void Start () {
        currentHitPoints = hitPoints;
        spawnSpots = GameObject.FindObjectsOfType<SpawnSpot> ();
    }

    // Update is called once per frame
    void Update () {
        if (currentHitPoints <= 0) {
            deadZone = GameObject.FindWithTag("DeadZone");
            gameObject.transform.position = deadZone.transform.position;
            dead = true;
            Instantiate(explosionPrefab, gameObject.transform.position, gameObject.transform.rotation);
        }

        if (dead) {
                        if (currentHitPoints <= 0){
                        //if (gameObject.transform.name == "Player"{
                        SpawnSpot mySpawnSpot = spawnSpots [Random.Range (0, spawnSpots.Length)];
                        Debug.Log (gameObject.transform.name + "Your DEAD");
                        if (Input.GetButtonDown ("Fire1")) {
                                gameObject.transform.position = mySpawnSpot.transform.position;
                                currentHitPoints = 100;
                        }
                }
        }
    }

    [RPC]
    public void TakeDamage(float amt){
        currentHitPoints -= amt;
        Debug.Log ("taking damage");
        if (currentHitPoints <= 0) {
            Die();
        }
    }
4

0 に答える 0