您好,我是使用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);
}
}
答案 0 :(得分:1)
我刚刚意识到了这个问题。回答我自己的问题,以防其他人遇到麻烦。在游戏上添加多人游戏功能会更改PlayerObject的名称。对我而言,每次在本地主机和客户端上运行时,我的UFO都会将其名称更改为UFO(Clone)。因此,我没有更改对象onTriggerEnter的名称,而是更改了代码,以便它寻找标签。我在我的playerObject中添加了一个标签,以便可以找到它。
void OnTriggerEnter2D(Collider2D co)
{
if (co.tag == "UFO")
Destroy(co.gameObject);
}