unity如何制作局域网游戏

一、游戏介绍

实现局域网连接的联机游戏,类似于台桌游戏,桌面上有若干方块,当消灭的方块达到一定数量时获胜。

二、游戏实现

1、创建一个空物体,命名为NetworkManager,负责局域网的管理

 2、给NetworkManeger添加两个组件(如下图)

 

 3、点击运行后可以看到界面中多了几个按钮,第一个按钮是创建客户端,第二个按钮是连接连接服务端。 

 4、用一个plane和四个cube创建一个桌面,并给他们一定的颜色,效果如下:

5、创建若干正方体,把tag改为ball把放在合适的位置

6、创建一个小球,命名为player,tag也修改为player ,并添加组件NetworkIdentity

7、创建脚本move,赋予小球,使小球移动

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class move : MonoBehaviour
{
    public float speed = 6.0f;
    public float gravity = -9.8f;
    private CharacterController _charController;
    // Start is called before the first frame update
    void Start()
    {
        _charController = GetComponent<CharacterController>();//使用附加到相同对象上的其他组件
    }
 
    // Update is called once per frame
    void Update()
    {
        float x = Input.GetAxis("Horizontal") * speed;
        float z = Input.GetAxis("Vertical") * speed;
        Vector3 movement = new Vector3(x, 0, z);
        movement = Vector3.ClampMagnitude(movement, speed);//使对角移动的速度和沿轴移动的速度一样
        movement.y = gravity;
        movement *= Time.deltaTime;
        movement = transform.TransformDirection(movement);//本地坐标变为全局坐标
        _charController.Move(movement);//character通过movement向量移动
    }
}

8、新建文件夹prefabs,把player拖到里面作为预制体,然后把场景中的player删除。把player拖到NetworkManager中如下啊位置

9、修改player代码move,使小球碰到方块后方块消失(ball是方块的标签,如果方块的标签没有修改为ball是销毁不了的),给player添加刚体组件(选中prefabs里的小球,选择最右侧的打开预制体,然后添加组件)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;

public class move : MonoBehaviour
{
    public float speed = 100;

    // Start is called before the first frame update
    void Start()
    {
      
    
    }

    // Update is called once per frame
    void FixedUpdate()
    {
        float moveh = Input.GetAxis("Horizontal");
        float movev = Input.GetAxis("Vertical");
        Vector3 movement = new Vector3(moveh, 0.0f, movev);
        GetComponent<Rigidbody>().AddForce(movement * speed * Time.deltaTime);//给小球施加力,使小球运动
    }
    void OnCollisionEnter(Collision other)
    {
        if (other.gameObject.tag == "ball")
        {
            Destroy(other.gameObject);//小球碰到标签为pickup的物体则摧毁物体
         
        }
   
    }
 

}

 10、点击运行,然后点击界面的第一个按钮,即创建客户端,就可以看到小球生成了。

11、导出场景(File——>building settings——>build,选择合适的文件夹),导出后运行,点击场景中的第二个按钮,即连接客户端(如果是在同一台电脑上运行的话,可以直接连接),然后就会出现如下界面,会发现场景中有两个玩家(但是会有bug,画面不同步,两端一起动等等,后面会修改)。

 

 12、解决画面不同步,区分客户端和服务端

1)给player添加两个组件,相关参数设置如下

2)设置player的identify组件

 

 3)改写move代码

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

public class move : NetworkBehaviour
{
    public float speed = 100;

    // Start is called before the first frame update
    void Start()
    {
      
    
    }

    // Update is called once per frame
    void FixedUpdate()
    {
        if (isLocalPlayer) {//判断当前客户端是不是自己
            playermove();
        }
    }

    public override void OnStartLocalPlayer()//客户端已连接就会调用
    {
        transform.GetComponent<Renderer>().material.color = Color.green;
     //   base.OnStartLocalPlayer();
    }

    void OnCollisionEnter(Collision other)
    {
        if (other.gameObject.tag == "ball")
        {
            Destroy(other.gameObject);//小球碰到标签为pickup的物体则摧毁物体
         
        }
   
    }
    private void playermove() {
        float moveh = Input.GetAxis("Horizontal");
        float movev = Input.GetAxis("Vertical");
        Vector3 movement = new Vector3(moveh, 0.0f, movev);
        GetComponent<Rigidbody>().AddForce(movement * speed * Time.deltaTime);//给小球施加力,使小球运动
    }
 

}

如此便实现局域网连接啦!!!

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Unity是一种强大的游戏开发引擎,可以用于制作游戏、交互式应用程序和多媒体等。在Unity中,我们可以使用局域网传输文件,以便在多台设备之间共享数据。以下是一些可以用于实现局域网文件传输的方法: 1. 使用Unity的网络功能:Unity提供了一些网络功能,如网络套接字(Socket)和网络传输协议(TCP/IP、UDP),可以让我们在游戏中实现客户端和服务器端的交互。通过编写适当的代码,我们可以在局域网上建立连接并传输文件。 2. 使用Unity的多人游戏功能:如果你的游戏需要支持多人游戏功能,那么可以使用Unity的多人游戏功能来实现局域网文件传输。通过建立网络连接,比如使用Unity自带的UNET或第三方插件Photon Unity Networking(PUN),可以让多个玩家在同一局域网上进行游戏,并传输文件。 3. 使用第三方插件或库:除了Unity自带的网络功能外,还可以使用第三方插件或库来实现局域网文件传输。有一些已经开发出来的插件或库可以帮助我们快速实现文件传输,并提供一些额外的功能,比如下载进度、断点续传等。 4. 自定义文件传输协议:如果以上的方法不满足需求,我们可以开发自己的文件传输协议。通过编写自己的代码,可以在局域网上实现文件传输,并根据需要添加加密、验证等功能。 无论选择哪种方法,都需要确保网络的稳定性和安全性。此外,局域网文件传输还需要考虑文件大小、传输速度和接收方的处理能力等因素。通过合理的设计和实现,我们可以在Unity中实现局域网文件传输,为用户提供更好的使用体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

朱颜辞镜花辞树>

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值