将网络开始位置添加到游戏对象后,如何修复触发器

时间:2018-09-10 15:41:02

标签: c# unity3d game-physics

您好,我是使用unity和C#的新手。我目前正在为使用pacman教程并使之成为多人游戏的项目制作游戏。但是,我设法使多人游戏部分正常工作,一旦添加了两个具有“网络开始位置”的游戏对象并在派生信息下添加到网络管理器中,我的触发器一下子就停止了工作。我的播放器对象与“吃豆人”点碰撞时应使其消失,而我的播放器对象与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 :(得分:1)

我刚刚意识到了这个问题。回答我自己的问题,以防其他人遇到麻烦。在游戏上添加多人游戏功能会更改PlayerObject的名称。对我而言,每次在本地主机和客户端上运行时,我的UFO都会将其名称更改为UFO(Clone)。因此,我没有更改对象onTriggerEnter的名称,而是更改了代码,以便它寻找标签。我在我的playerObject中添加了一个标签,以便可以找到它。

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