项目源码:链接:https://pan.baidu.com/s/1g78L9QODXdRjoVcm-odRSg 密码:0pzo
源码引用自Siki老师的Unet基础系列教程,文章主要以解释为主,后期会添加一些Siki老师源码以外的新东西,敬请期待。
文中用红色显示的内容为我自己命名的关键名词,例如场景名、代码名、阐述代码或方法所实现的功能 等等
文中用蓝色显示的内容为UI元素、组件名或是变量名,例如Button、InputField、NetworkManager 等等
文中用紫色显示的内容为当前所解释的代码部分。例如:
这里使用一个Console命令完成输出语句
public void ShowMessage()
{
Console.WriteLine("Hello World.");
}
本文中仅讨论Unet用于局域网的情况
如有互联网联网需求,请自行查询Unity与Socket协议结合相关的文章,不推荐使用Unet完成
本文主要服务于渤海大学交互式虚拟现实开发基地,为求尽可能的细致和易懂,可能有些地方写的过于冗杂,不喜勿喷
1.进入服务器时,服务器能够随机生成多个敌人
2.敌人由服务器控制,而不是客户端控制
3.敌人会随机生成在不同的位置,而不是固定于某一处。
创建角色
创建Enemy的方法与创建Player方法类似。但是为了有所区分,同时也避免增加算法上的复杂性。我们移除掉Player身上的枪,使他只能挨打,不能自动开枪,同时在他的头上加上一个炫酷的新发型。并将它保存为Prefab
在Prefab上移除掉Enemy身上的PlayerController代码
创建EnemySpawner
新建一个空物体EnemySpawner,并添加同名脚本EnemySpawner
以下为代码
using UnityEngine;
using System.Collections;
using UnityEngine.Networking;
public class EnemySpawner : NetworkBehaviour {
public GameObject enemyPrefab;
public int numberOfEnemies;
public override void OnStartServer()
{
for (int i = 0; i < numberOfEnemies; i++)
{
Vector3 position = new Vector3(Random.Range(-6f, 6f), 0, Random.Range(-6f, 6f));
Quaternion rotation = Quaternion.Euler(0, Random.Range(0, 360), 0);
GameObject enemy = Instantiate(enemyPrefab, position, rotation) as GameObject;
NetworkServer.Spawn(enemy);
}
}
}
public override void OnStartServer()
{
//function
}
public override void OnStartServer()
{
for (int i = 0; i < numberOfEnemies; i++)
{
Vector3 position = new Vector3(Random.Range(-6f, 6f), 0, Random.Range(-6f, 6f));Quaternion rotation = Quaternion.Euler(0, Random.Range(0, 360), 0);
GameObject enemy = Instantiate(enemyPrefab, position, rotation) as GameObject;
}
}
public override void OnStartServer()
{
for (int i = 0; i < numberOfEnemies; i++)
{
Vector3 position = new Vector3(Random.Range(-6f, 6f), 0, Random.Range(-6f, 6f));Quaternion rotation = Quaternion.Euler(0, Random.Range(0, 360), 0);
GameObject enemy = Instantiate(enemyPrefab, position, rotation) as GameObject;
NetworkServer.Spawn(enemy);
}
}
就这样吧,掰掰。