7月26日 学习日志

配置保存信息

1.服务器 2.本地: 类似于消除游戏 IO操作 
3.内置信息保存方式 int float string 3种类型 PlayerPrefs
提供了键值对的配置信息方法,只适合读写简单的数据。hasKey/get***/set***

{
if(Input.GetKeyDown(KeyCode.W))
	{
	 PlayerPrefs.SetFloat("Volume",0.89f);
	}
	if(Input.GetKeyDown(KeyCode.S))
	{
	Print(PlayerPrefs.GetFlost("Volume"));
	}

} //写入注册表信息

资源加载

可以动态加载资源,动态加载的资源必须放到Assets的Resources路径下
读取通过路径加载

{
if(Input.GetKeyDown(KeyCode.W))
{
AudioSource.PlayClipAtPoint(Resources.Load("Audios/victory2") as AudioClip
,Camera.main.transform.position);//资源 不需要写扩展名 

}
}

如果加载FBX模型的话,使用模型的主线是明,加载出来的虽然也是Game Object对象,但是不会显示到Hierarchy中,需要Instantiate()复制一个实例才能显示出来。


多场景切换

File -> Build Settings ->将场景拖入 Scenes In Build ->

void Update()
{
if(Input.GetKeyDown(KeyCode.A))
{
Application.LoadLevel("sResources");
}
}

协同

启动一条代码 进行等待 等待一段时间之后 在进行

void Update()
{
StrartCoroutine(PlayClip());
}
IEnumerator PlayClip()
{
AudioSource.PlayClipAtPoint(Clip1,Camera.main.transform.position);
yield return new WaitForSeconds(Clip1.Length);
AudioSource.PlayClipAtPoint(Clip2,Camera.main.transform.position);
}

本质 给我未来的时间点 一个任务


网络通信 WWW类###

unity内置一个类 WWW 基于HTTP协议的网络传输功能
需要结合协同调用,来完成数据加载等待
在狗仔方法中指定URL地址
支持使用Get POST方法来发送数据
-Get:在地址后面加?key=value
-Post:在WWW的构造方法中传递
属性:text,texture,movie,bytes,audioclip等 根据返回类型获取数据,不需要做类型转换.
以获取图像为例

private Texture2D pic;
IEnumerator DrawPic()
{
  WWW w3 = new WWW("放入图片地址");
  yield return w3;
  pic =w3.texture;
}
void Update()
{
  if(Input.GetKeyDown(KeyCode.W))
  {
	StartCoroutine(DrawPic());//资源存在pic
	
}
}
void OnGUI()
{
	if(pic!=null)
	{
	GUI.DrawTexture(new Rect(0,0,100,100),pic);
	}
}

OnGUI虽然没有在我们写的代码中被调用,但是他在Monobehavior里里面自动被调用.
如果有服务器可以做上传操i做,WWWForm对象,在传递给WWW对象.
通过w3.texture, 可以获取返回的图片,ONGUI不支持协同,所以要将图片复制后,在使用GUI进行绘制
下载声音文件:WWW,GetAudioClip(false);
自定义数据流:就可以使字符串,字节流,json对象等.


导航

Unity的寻路导航 NavMesh
unity中对于寻路算法进行了封装,支持提交将地图进行导航烘焙,降低了实时计算的小号
使用方法:Window->Navgation,打开导航面板
操作方法:
·选择不移动的游戏对象,勾选Navigation Static
·如果是不连接的游戏对象,勾选Generate OffMeshLinks
·如果需要设置区域们可以在属性 Navigation Area 下选择 使用方式与层一样
·点击Areas标签,可以添加区域,内置创建了三个区域,表示可以行走,不可以行走,可条约
·选择完成后,点击back按钮烘焙,点击clear按钮清除已烘焙的数据
在移动物体上面加入脚本Nav Mesh Agent

private NavMeshAgent agent;
void Start()
{
agent = GetCompent<NavMeshAgent>();
}
void Update()
{
if(Input.GetButtonDown("Fire1"))
{
Ray ray =Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if(Physics.Raycast(ray,out hit,10))
{
	agent.SetDestination(hit.point);
}
}
}

选择区域行走 导航
不同的地方加上Area 类似于mask 在bake选项中 调整自己的层的"tag"
在行走的不同的颜色的人 走不通颜色的路 在NavMeshAgent中的AreaMask中层
动态寻找对象的代码

private Tansform cube;
void Start
{
  cube = GameObject.Find("Cube").transform;
  GetComponent<NavMeshAgent>().SetDestination(cube.position);
  
}

导航:跳跃,动态选择区域
设置旋转点 创建一个小球作为旋转点 并且没有东西阻挡
代码如下:

public Transform rotatePos;
private float time1,time2;
private int direction;
direction =1;
void Start()
{
 time1=1f;
 time2=0;
}
void Update()
{
time2 +=Time.deltaTime;
if(time2>=time1)
{
time2=0;
transform.RotateAround(rotatePos.vector3.forward,30*direction);
direction*=-1;
}
}//此处是根据一个旋转点进行旋转 

在移动对象身上加上脚本

public transform destPos;
void Start()
{
GetComponent<NavMeshAgent>().SetDestination(destPos.postion);//设定目标位置
}//此时,桥抬起来的时候,移动对象穿墙而过.

接下来则需要让桥告诉移动对象,当他抬起是不能通过

public Transform rotatePos;
public GameObject gameObject;// 
private float time1,time2;
private int direction;
direction =1;
void Start()
{
 time1=1f;
 time2=0;
}
void Update()
{
time2 +=Time.deltaTime;
if(time2>=time1)
{
time2=0;
transform.RotateAround(rotatePos.vector3.forward,30*direction);
direction*=-1;
cube.SendMessage("SetArea",1<<6);
}
}//这里 将方法传输给 SetArea方法 这个方法 在游戏对象身上

游戏对象的脚本:

public transform destPos;
private NavMeshAgent Agent;
void Start()
{
agent=GetComponent<NavMeshAgent>();
agent.SetDestination(destPos.postion);//设定目标位置
}//此时,桥抬起来的时候,移动对象穿墙而过.
void SetArea(int areaMask)
{
agent.areaMask = agent.areaMask^areaMask//异或运算进行运算 这一步 巧妙 
}

今天就到这里结束了 。明天见

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值