TNet Tasharen Networking 插件使用



TNet TasharenNetworking插件可用于轻量级多人网络游戏的网络功能的开发。


功能说明:


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


实现过程:


1、创建项目TNetDemo,导入TNetTasharen Networking 2.0.3.unitypackage


2、解压TNetDemo\Assets\TNet\TNetServer.zip中的TNServer.exe,并运行。


3、创建场景start,创建一个空物体GameManager,添加脚本TNManagerTNAutoJoin



4、创建场景game,添加cubeGround,添加capsulePlayer,作为游戏场景。



5、创建场景disconnet,添加text,作为无法连接网络时的显示场景。



6、startgamedisconnet添加到File - Build Settings - Scenes In Build中。



7、打开start场景,在GameManagerTNAutoJoin脚本中设置First LevelDisconnetLevel属性分别为gamedisconnet


      当有网络连接时,运行start,将进入game场景;若无网络连接,将进入Disconnect场景。


8、打开game场景,实现游戏功能。

(1)   MainCamera上添加TouchHandler脚本,用于获取鼠标点击在屏幕上的世界坐标,以控制Player的移动。


(2)   Player上添加TNObject脚本。


(3)   Player创建PlayerMove脚本,控制Player的移动。

[csharp] view plain copy print ?
  1. using UnityEngine;  
  2. using System.Collections;  
  3. using TNet;  
  4.   
  5. public class PlayerMove : TNBehaviour {  
  6.   
  7.     public static PlayerMove Instance;  
  8.   
  9.     /// <summary>  
  10.     /// 目标位置  
  11.     /// </summary>  
  12.     private Vector3 _target;  
  13.     public Vector3 Target  
  14.     {  
  15.         set  
  16.         {  
  17.             tno.Send("OnSetTarget", TNet.Target.AllSaved, value);  
  18.         }  
  19.     }  
  20.   
  21.     /// <summary>  
  22.     /// 移动速度  
  23.     /// </summary>  
  24.     public float Speed = 5f;  
  25.   
  26.     void Awake()      
  27.     {  
  28.         //只能操作自己实例化的Player  
  29.         if (TNManager.isThisMyObject)  
  30.         {  
  31.             PlayerMove.Instance = this;  
  32.         }  
  33.     }  
  34.   
  35.     void Update()  
  36.     {  
  37.         this.transform.position = Vector3.Lerp(this.transform.position, this._target, Time.deltaTime * Speed);  
  38.     }  
  39.   
  40.     [RFC]  
  41.     void OnSetTarget(Vector3 v)  
  42.     {  
  43.         this._target = v;  
  44.     }  
  45.   
  46.     /// <summary>  
  47.     /// 有新角色加入时,初始化已有角色的位置  
  48.     /// </summary>  
  49.     /// <param name="p"></param>  
  50.     void OnNetworkPlayerJoin(Player p)  
  51.     {  
  52.         tno.Send("OnSetTargetImmediate", TNet.Target.AllSaved, transform.position);  
  53.     }  
  54.   
  55.     [RFC]  
  56.     void OnSetTargetImmediate(Vector3 v)  
  57.     {  
  58.         this.transform.position = v;  
  59.     }  
  60. }  
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脚本,实现通过鼠标点击控制Player移动的功能。

[csharp] view plain copy print ?
  1. using UnityEngine;  
  2. using System.Collections;  
  3.   
  4. public class Ground : MonoBehaviour {  
  5.   
  6.     void OnClick()  
  7.     {  
  8.         PlayerMove.Instance.Target = TouchHandler.worldPos;  
  9.     }  
  10. }  
using UnityEngine;
using System.Collections;

public class Ground : MonoBehaviour {

    void OnClick()
    {
        PlayerMove.Instance.Target = TouchHandler.worldPos;
    }
}

[csharp] view plain copy print ?
  1.   

(5)  将Player做成Prefab,删除game中的Player。

(6)   创建一个空对象,添加TNAutoCreate脚本,设置PrefabPlayer


 

9、打开start场景,将PlayerPrefab添加到GameManagerTNManager脚本中的Objects中。


 


到这就OK了,可以发布一个exe运行起来,同时在unity中运行游戏,就可以看到效果了。





  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在QNX操作系统中,可以使用以下步骤设置Telnet登录密码: 1. 打开/etc/inetd.conf文件,可以使用任何文本编辑器打开该文件,例如: ``` vi /etc/inetd.conf ``` 2. 找到以下行: ``` telnet stream tcp nowait root /usr/sbin/telnetd telnetd ``` 如果该行不存在,则需要添加它。如果已经存在,则跳过此步骤。 3. 在该行的末尾添加以下选项: ``` -a <username> ``` 其中,<username>表示要使用的用户名。例如,如果要使用用户名"myuser",则可以将该行修改为: ``` telnet stream tcp nowait root /usr/sbin/telnetd telnetd -a myuser ``` 这将设置Telnet登录用户名为"myuser",但是仍然没有设置密码。 4. 创建一个密码文件,用于存储Telnet登录密码。可以使用以下命令创建该文件: ``` mkpasswd -l > /etc/passwd.tnet ``` 注意,这里使用了mkpasswd命令来创建密码文件。如果该命令不存在,则需要使用包管理器安装它。 5. 打开密码文件/etc/passwd.tnet,可以使用任何文本编辑器打开该文件,例如: ``` vi /etc/passwd.tnet ``` 6. 在该文件中,为之前设置的Telnet登录用户名设置密码。可以使用以下命令生成密码哈希值: ``` mkpasswd -p <password> ``` 其中,<password>表示要设置的密码。例如,如果要设置密码为"mypassword",则可以使用以下命令: ``` mkpasswd -p mypassword ``` 该命令将生成一个密码哈希值,类似于"$1$7CxmylqX$BZo9NcOu5V3xw6BYt7Z6K1"。将该哈希值复制到密码文件的相应行中。 7. 保存并关闭密码文件。 8. 打开/etc/telnetd.conf文件,可以使用任何文本编辑器打开该文件,例如: ``` vi /etc/telnetd.conf ``` 9. 在该文件中添加以下行: ``` auth required /usr/lib/security/pam_passwdqc.so.1 debug auth required /usr/lib/security/pam_unix.so.2 account required /usr/lib/security/pam_unix.so.2 ``` 这将启用PAM认证模块,并使用之前设置的密码文件进行认证。 10. 保存并关闭文件。 11. 重新启动inetd服务,以使配置文件生效。可以使用以下命令重启服务: ``` svc -t /etc/svc/inetd ``` 现在,你的QNX系统已经设置了Telnet登录密码。当用户连接到服务器时,他们将被要求输入用户名和密码才能登录。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值