设置免密登录
在windows的家目录里
ssh-keygen
cd .ssh
//设置一个服务器的别名
//创建config并进入里面
vim config
在config里
Host unity
HostName 47.109.183.222
User root
在windows里
//输入密码登入服务器
ssh unity
创建一个服务器的用户
在服务器的root里
adduser u3d
//然后创建用户密码
//给u3d添加sudo权限
usermod -aG sudo u3d
exit
在windows里
//在 .ssh/ 的目录下
vim config
在config里
...
//把root改成u3d
User u3d
在windows里
//试一试能不能登进去
ssh unity
//配置免密登录
ssh-copy-id unity
ssh unity
去AC Termial把祖传配置传进u3d里
在ac T里
scp .vimrc .bashrc .tmux.conf u3d@47.109.183.222:
配置一下unity的代码,使得linux版本能够接入参数
在NetWorkManangerUI里
...
public class NetWorkManagerUI : MonoBehaviour
{
...
void Start()
{
//System.Environment.GetCommandLineArgs()可以返回向程序传入的所有命令行参数
var args = System.Environment.GetCommandLineArgs();
for(int i = 0; i < args.Length; i++)
{
if (args[i] == "launch-as-server")
{
//通过NetworkManager.Singleton可以方便地从任何脚本中访问这个唯一的网络管理实例
NetworkManager.Singleton.StartServer();
DestroyAllButtons();
}
}
...
}
...
}
用终端打开fps.exe
在windows里
./fps.exe -lauch-as-server
在NetWorkManangerUI里
...
public class NetWorkManagerUI : MonoBehaviour
{
...
void Start()
{
//System.Environment.GetCommandLineArgs()可以返回向程序传入的所有命令行参数
var args = System.Environment.GetCommandLineArgs();
//两个for循环的顺序不能变
for(int i = 0; i < args.Length; i++)
{
if (args[i] == "-port")
{
//将“-port”的下一个参数转为int
int port = int.Parse(args[i + 1]);
var transport = GetComponent<UNetTransport>();
transport.ConnectPort = transport.ServerListenPort = port;
}
}
for(int i = 0; i < args.Length; i++)
{
if (args[i] == "-launch-as-server")
{
//通过NetworkManager.Singleton可以方便地从任何脚本中访问这个唯一的网络管理实例
NetworkManager.Singleton.StartServer();
DestroyAllButtons();
}
}
...
}
...
}
在windows里
//加-r可以递归的把整个文件传过去
scp -r Linux/ unity:
ssh unity
在u3d里
tmux a
cd Linux
chmod +x server.x86_64
//如果要用自己服务器的IP,好像只能在Linux上才能做server端
//如果连不上可以重启一下服务器试试
./server.x86_64 -batchmode -nographics -launch-as-server -port 7777
实现自动化部署
在u3d里
vim run.sh
chmod +x run.sh
在run.sh里
cd Linux
chmod +x server.x86_64
在windows里
vim deploy.sh
chmod +x server.x86_64
在deploy.sh里
scp -r Linux/ unity:
ssh unity './run.sh'
创建两个可进入的房间
先在tmux里把两个端口的server启动起来
在NetworkManagerUI里
public class NetWorkManagerUI : MonoBehaviour
{
[SerializeField]
private Button room1;
[SerializeField]
private Button room2;
void Start()
{
//System.Environment.GetCommandLineArgs()可以返回向程序传入的所有命令行参数
var args = System.Environment.GetCommandLineArgs();
//加一个改ip
for (int i = 0; i < args.Length; i++)
{
if (args[i] == "-ip")
{
string ip = args[i + 1];
var transport = GetComponent<UNetTransport>();
transport.ConnectAddress = ip;
}
}
room1.onClick.AddListener(() =>
{
var transport = GetComponent<UNetTransport>();
transport.ConnectPort = transport.ServerListenPort = 7777;
NetworkManager.Singleton.StartClient();
DestroyAllButtons();
});
room2.onClick.AddListener(() =>
{
var transport = GetComponent<UNetTransport>();
transport.ConnectPort = transport.ServerListenPort = 7778;
NetworkManager.Singleton.StartClient();
DestroyAllButtons();
});
...
}
//手动搓一个删除所有按钮的函数
private void DestroyAllButtons() {
...
Destroy(room1.gameObject);
Destroy(room2.gameObject);
}
}