Как исправить триггеры после добавления начальной позиции сети к игровым объектам - PullRequest
0 голосов
/ 10 сентября 2018

Здравствуйте, я новичок в использовании Unity и C #. В настоящее время я делаю игру для проекта, в которой я использовал учебник по pacman, и делаю его многопользовательским. Мне удалось заставить многопользовательскую часть работать, однако, как только я добавил два игровых объекта, которые имеют позицию начала сети и добавили в сетевой менеджер в разделе информации о появлении, мои триггеры внезапно перестали работать. Мой объект игрока должен заставить точки Pacman исчезать, когда он сталкивается с ним, и объект My player должен исчезать, когда он сталкивается с призраком pacman. Может кто-нибудь сказать мне, что происходит?

Мой PlayerObject:

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

public class UFOMove : NetworkBehaviour 
{
    public float speed;             

    private Rigidbody2D rb2d;      

    void Start()
    {
        rb2d = GetComponent<Rigidbody2D>();
    }

    void Update()
    {
        if (!isLocalPlayer)
        {
            return;
        }
    }

    void FixedUpdate()
    {
        float moveHorizontal = Input.GetAxis("Horizontal");       
        float moveVertical = Input.GetAxis("Vertical");      
        Vector2 movement = new Vector2(moveHorizontal, moveVertical);       
        rb2d.AddForce(movement * speed);
    }
}

Движение моего призрака:

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

public class GhostMove : MonoBehaviour 
{
    public Transform[] waypoints;
    int cur = 0;

    public float speed = 0.3f;

    void FixedUpdate()
    {
        if (transform.position != waypoints[cur].position)
        {
            Vector2 p = Vector2.MoveTowards(transform.position,
                                            waypoints[cur].position,
                                            speed);
            GetComponent<Rigidbody2D>().MovePosition(p);
        }
        else 
            cur = (cur + 1) % waypoints.Length;

        Vector2 dir = waypoints[cur].position - transform.position;
        GetComponent<Animator>().SetFloat("DirX", dir.x);
        GetComponent<Animator>().SetFloat("DirY", dir.y);

    }

    void OnTriggerEnter2D(Collider2D co)
    {
        if (co.name == "UFO")
            Destroy(co.gameObject);
    }
}

Точка Пакмана:

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

public class PacDot : MonoBehaviour 
{
    void OnTriggerEnter2D(Collider2D co)
    {
        if (co.name == "UFO")
            Destroy(gameObject);
    }
}

1 Ответ

0 голосов
/ 11 сентября 2018

Я только что понял проблему.Отвечая на мой собственный вопрос на случай, если у некоторых людей возникнут проблемы.Добавление функции многопользовательской игры меняет название PlayerObject.Для меня мой НЛО будет менять свое имя на НЛО (клон) каждый раз, когда он запускается на локальном хосте и клиенте.Поэтому вместо того, чтобы искать имя объекта onTriggerEnter, я изменил код, чтобы он искал тег.Я добавил тег в playerObject, чтобы его можно было найти.

void OnTriggerEnter2D(Collider2D co)
{
    if (co.tag == "UFO")
        Destroy(co.gameObject);
}
...