TNet Tasharen Networking是什么插件

2015年03月10日 14:07 0 点赞 0 评论 更新于 2025-11-21 16:50

TNet Tasharen Networking插件可用于轻量级多人网络游戏的网络功能开发。本文将详细介绍该插件,并给出一个简单示例的实现过程。

功能说明

每启动一次程序,会自动创建一个角色。玩家通过鼠标点击可控制角色移动,多个客户端能够同时控制各自的角色移动,并且可以看到其他角色的移动情况。

实现过程

1. 项目准备

  • 创建项目TNetDemo。
  • 导入TNet Tasharen Networking 2.0.3.unitypackage。
  • 解压TNetDemo\Assets\TNet\TNetServer.zip中的TNServer.exe,并运行。

2. 场景设置

场景创建

  • 创建场景start,在该场景中创建一个空物体GameManager,并为其添加脚本TNManager、TNAutoJoin。
  • 创建场景game,在该场景中添加一个cube作为Ground,添加一个capsule作为Player,以此作为游戏场景。
  • 创建场景disconnet,在该场景中添加text,作为无法连接网络时的显示场景。

场景添加

将start、game、disconnet这三个场景添加到File - Build Settings - Scenes In Build中。

场景属性设置

打开start场景,在GameManager的TNAutoJoin脚本中,将First Level和DisconnetLevel属性分别设置为game和disconnet。当有网络连接时,运行start场景将进入game场景;若无网络连接,则进入Disconnect场景。

3. 游戏功能实现

(1)获取鼠标点击坐标

打开game场景,在MainCamera上添加TouchHandler脚本,该脚本用于获取鼠标点击在屏幕上的世界坐标,从而控制Player的移动。

(2)添加TNObject脚本

在Player上添加TNObject脚本。

(3)创建PlayerMove脚本

为Player创建PlayerMove脚本,用于控制Player的移动,代码如下:

using UnityEngine;
using System.Collections;
using TNet;

public class PlayerMove : TNBehaviour {
public static PlayerMove Instance;
/// <summary>
/// 目标位置
/// </summary>
private Vector3 _target;
public Vector3 Target
{
set
{
tno.Send("OnSetTarget", TNet.Target.AllSaved, value);
}
}
/// <summary>
/// 移动速度
/// </summary>
public float Speed = 5f;

void Awake()
{
// 只能操作自己实例化的Player
if (TNManager.isThisMyObject)
{
PlayerMove.Instance = this;
}
}

void Update()
{
this.transform.position = Vector3.Lerp(this.transform.position, this._target, Time.deltaTime * Speed);
}

[RFC]
void OnSetTarget(Vector3 v)
{
this._target = v;
}

/// <summary>
/// 有新角色加入时,初始化已有角色的位置
/// </summary>
/// <param name="p"></param>
void OnNetworkPlayerJoin(Player p)
{
tno.Send("OnSetTargetImmediate", TNet.Target.AllSaved, transform.position);
}

[RFC]
void OnSetTargetImmediate(Vector3 v)
{
this.transform.position = v;
}
}

需要注意的是,Player的父类是TNBehaviour。

(4)创建Ground脚本

为Ground创建Ground脚本,实现通过鼠标点击控制Player移动的功能,代码如下:

using UnityEngine;
using System.Collections;

public class Ground : MonoBehaviour
{
void OnClick()
{
PlayerMove.Instance.Target = TouchHandler.worldPos;
}
}

(5)制作Player预制体

将Player做成Prefab,然后删除game场景中的Player。

(6)添加TNAutoCreate脚本

创建一个空对象,为其添加TNAutoCreate脚本,并将Prefab设置为Player。

4. 最终设置

打开start场景,将Player的Prefab添加到GameManager的TNManager脚本中的Objects中。至此,整个设置完成。可以发布一个exe运行起来,同时在Unity中运行游戏,即可看到效果。

资源下载

作者信息

boke

boke

共发布了 3994 篇文章