0
点赞
收藏
分享

微信扫一扫

Unity5之Network随机生成主角位置


这一讲来讲如何设置人物生成的位置并且同步到所有客户端。

首先讲如何在两个固定的位置,交替循环生成。就是现在A点生成下一个在B点生成,然后再在A点生成下一个再在B点生成,如此反复循环。

首先在场景中新建两个空物体作为生成的位置,分别命名为networkstartposition1和networkstartposition2,放到两个不同的坐标位置。在两个上面都添加Network Start Position组件。如图:

Unity5之Network随机生成主角位置_ide

接下来在network manager里面把人物生成的方式改为Round Robin,如图:

Unity5之Network随机生成主角位置_客户端_02

如此便实现了人物初始生成时,只会在这两个位置轮流生成。

------------------------------------------下面实现如何随机生成功能-------------------------------------------------

上面所做的都是随机生成的前部分步骤,下面要实现的就是要在刚才的两个生成点之间随机生成主角的位置,不过是在主角复活的时候随机生成。

思路就是将这两个位置作为一个数组,然后随机选取这两个中的一个作为生成点。

代码如下(依旧是在health里进行改动):

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

public class health : NetworkBehaviour {


public const int maxhealth = 100;

[SyncVar (hook ="changevalue")]//同步变量,改变currenthealth的值。一直会调用changevalue方法。
public int currenthealth = maxhealth;

public Slider healthslider;

private NetworkStartPosition[] spawnpoints;

void Start()
{ //获取到场景中所有带有NetworkStartPosition组件的物体
if (isLocalPlayer)
spawnpoints = FindObjectsOfType<NetworkStartPosition>();
}
/// <summary>
///在Server端运行
/// </summary>
/// <param name="damage"></param>
public void Takedamage(int damage)
{
if (isServer == false)
{
return;
}

currenthealth -= damage;
if (currenthealth<=0)
{
currenthealth = maxhealth;
Rpcspawnnew();//满血复活到原点
}

}
/// <summary>
/// 该方法里需要定义一个参数,传入的参数就是上面定义的同步的currenthealth的值
/// </summary>
/// <param name="healthvalue"></param>
void changevalue(int healthvalue)
{
healthslider.value = healthvalue / (float)maxhealth;
}

/// <summary>
/// 所有客户端同步执行该方法
/// </summary>
[ClientRpc]
void Rpcspawnnew()
{
if (isLocalPlayer == false)
{
return;
}

Vector3 spawnposition = Vector3.zero;
if (spawnpoints != null && spawnpoints.Length > 0)
{
//随机选取数组中的一个NetworkStartPosition作为位置
spawnposition = spawnpoints[Random.Range(0, spawnpoints.Length)].transform.position;
}

transform.position = spawnposition;
}
}

解释以上代码,在Start方法里获取到所有带有NetworkStartPosition组件的东西,然后放到数组里(本案例里只有两个)。然后在主角死亡后生成的Rpcspawnnew方法里对其位置进行设置。

这样就实现了主角随机位置生成的功能。这次就不录制gif图片了!

至此network的基础知识就讲完了。老夫又要陷入潜水状态了。

举报

相关推荐

0 条评论