最近在学习使用UNET,记录下学习过程中用到的一些知识点。
using UnityEngine;
using System.Collections;
using UnityEngine.Networking;
public class MyTest : NetworkBehaviour
{
[Range(0, 10)] //在Inpsector界面上,num的取值范围被限定在了[0,10];在脚本中,还是可以随意改变其值,没有限制。
public int num;
[SerializeField]
[Range(0, 2.5f)]
private float num2;
//成员变量通过[SyncVar]标签被配置成同步的变量
//同步变量可以是基础类型,如整数,字符串和浮点数。
//也可以是Unity内置数据类型,如Vector3和用户自定义的结构体,
//但是对结构体类型的同步变量,如果只有几个字段的数值有变化,整个结构体都会被发送。
//每个NetworkBehaviour脚本可以有最多32个同步变量,包括同步列表
[SyncVar]
int num3;
//当同步变量有变化时,服务器会自动发送他们的最新数据。不需要手工为同步变量设置任何的脏数据标志位。
//注意在属性设置函数中设置一个同步变量的值不会使他的脏数据标志被设置。如果这样做的话,
//会得到一个编译期的警告。因为同步变量使用他们自己内部的标识记录脏数据状态,在属性设置函数中设置脏位会引起递归调用问题。
//同步变量还可以指定函数,使用hook;
//当服务器改变了playerHP的值,客户端会调用ChangHP这个函数
//这个值是以服务器为准。就算客户端改变了,服务器改变之后,客户端还是显示服务器的数据
[SyncVar(hook = "ChangHP")]
public int playerHP = 100;
public void ChangHP(int newHP)
{
playerHP = newHP;
}
// Use this for initialization
void Start()
{
}
// Update is called once per frame
void Update()
{
if (Input.GetKeyDown(KeyCode.A))
{
playerHP -= 10;
}
if (Input.GetKeyDown(KeyCode.B))
{
playerHP -= 20;
}
}
}