Unity3d学习笔记(一)

        今天下午乖乖的跟着教学视频学习使用Unity3d完成期末的游戏课程实验,第一遍跟着做的时候没有什么印象,几天尝试一边做一遍整理,一遍查自己不明白的地方,发现有很多知识点课本上并没有学习到。先把下午的知识点整理一下,然后接着努力啦。

    

课时37:开发功能面板

1.功能面板:背包、状态、装备等信息 功能栏

(1)NGUI:Unity的导入资源,NGUI为unity中绘制游戏2d界面的插件,通常在做菜单,按钮等地方要用到。UGUI是unity4.6之后出现的Unity自己的UI技术,在某种程度上重新定义了UI技术规范,它的出现大有统一unity各种UI插件的目的。具体的使用方法:https://www.2cto.com/kf/201708/663727.html

(2)Invisible Widget:容器

(3)Sprite精灵:精灵是什么东西?它可以在一张大图中去截取一部分(大图就是整体图像集合,而截取的小图就是一个精灵),然后起一个精灵的名称,使用时通过精灵的名称就能直接绘制,并且精灵还可以播放动画。

2.添加状态按钮

(1)添加Box Collider盒子碰撞器,添加 Button Script

(2)设置正常和按下的图片

3.添加背包、装备、技能、设置按钮,放在FunctionBar右下端,设置Anchor,设置图片

 

 

课时38:功能按钮点击事件的监听

1.FunctionBar添加脚本来监听5个按钮,添加Function脚本

2.编辑脚本,添加5个方法,分别处理按钮的点击事件

public void OnStatusButtonClick()
public void OnBagButtonCLick()
public void OnEquipButtonCLick()
public void OnSkillButtonCLick()
public void OnSettingButtonCLick()

3.给上述5个方法添加监听

       给每个按钮的OnClick添加对应的事件

 

 

 

课时39:物品信息管理系统,分析物品信息属性

1.开发背包管理系统:包括药品、装备等信息,因此先开发物品信息管理系统。

2.信息管理系统信息列表

ID

名称

ICON名称

类型

回血值

蓝血值

出售价

购买价

0

1

2

3

4

5

6

7

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

类型:药品(Drug)装备(Equip)材料Mat

3.创建.txt文档,ObjectsInfoList物品信息清单

        每行一条物品信息,物品的属性之间用逗号隔开

        药品ID以100开头,装备是200开头,材料用300开头

Unity3d学习笔记(一)_第1张图片

 

 

 

课时40:创建物品信息的管理类(读取.txt文件,获得物品信息)

1.创建类ObjectInfo,管理所有的物品

创建一个空物体叫做GameSetting,上面挂一个脚本ObjectsInfo

(1)单例模式

       每个游戏场景中都会有许多的游戏对象,而各个游戏场景之间也是同等的关系。如何去管理它们,是我们要解决的问题。

场景中各脚本间的直接访问,会在各脚本间形成一个巨大而又混乱的网络,这给以后代码的维护带来了极大的困难。为了避免这种因交互访问而带来的过度耦合情况,我们取消掉场景中各脚本间的直接交互,取而代之的是,让所有脚本都只与场景中的一个特定脚本交互。

在刚开始使用这种方法时,声明了一个场景中的全局脚本,然后把场景中所有其他需要交互的脚本声明为其成员,一旦脚本间要发生交互,就在脚本中声明一个全局脚本的对象,然后通过这个对象去访问其他的脚本,从而把直接交互变成了间接交互。这样做确实解决了脚本之间直接访问带来的高耦合度问题,但是在每个脚本中都要保存一个全局脚本的对象,这显然有些不太合适,浪费了资源。为了进一步解决这个问题,引入了单例模式的应用。

单例模式的定义是:保证一个类只有一个实例,并且提供一个访问它的全局访问点。单例对象的类必须保证只有一个实例存在。在我们的场景中,全局脚本的对象只会创建一次,保证单例,然后它(全局单例类)提供给各个脚本访问单例对象的方法,并且所有其他脚本的公共数据都会存储在全局单例脚本中

       在整个游戏生命周期当中,有很多对象从始至终有且只有一个。这个唯一的实例只需要生成一次,并且直到游戏结束才需要销毁。 单例模式一般应用于管理器类,或者是一些需要持久化存在的对象。

●声明全局单例类自身类型的静态私有成员变量,作为单例对象使用。

Private static GloSingleton _globalSingleton;

●创建访问方法

Public static GloSingletonGetSingleton() { …}
If (null==_globalSingleton) {
lock(_globalSingleton) {
if(null== _globalSingleton) {
_globalSingleton=(GloSingleton)GameObject.FindObjectOfType(typeof(GloSingleton));
   }
  }
}

(2)ObjectsInfo类代码:

using UnityEngine;
using System.Collections;
using System.Collections.Generic;//包含字典类 字典存储的是键值对
/// 
/// 解析物品信息
/// 
public class ObjectsInfo : MonoBehaviour {

    public static ObjectsInfo _instance;
    void Awake() {
        _instance = this;
    }
//枚举类型记录物品的类型
public enum ObjectType {
    Drug,//药品
    Equip,//装备
    Mat//材料
}
/// 
/// 类ObjectInfo:一条物品信息
/// 
public class ObjectInfo {
    public int id;//物品ID
    public string name;//名称
    public string icon_name;//这个名称是存储在图集中的名称
    public ObjectType type;//类型
    public int hp;//血量
    public int mp;//魔法
    public int price_sell;//售价
    public int price_buy;//购买价
}

 

 

 

你可能感兴趣的:(本科课程)