My First RPG Game总结二

Posted zhangxiaofan666

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了My First RPG Game总结二相关的知识,希望对你有一定的参考价值。

背包栏打开点击的时候也会触发主角移动,解决办法

   if (Input.GetMouseButtonDown(0)&&UICamera.hoveredObject==null)


鼠标点击NPC触发事件:

给npc添加box collider,在脚本中调用 private void OnMouseOver()当有鼠标指针落到npc上面就自动触发该函数

要想弹出任务框,还得将任务框的图片拖动到脚本中

这里的TweenPosition设成public,就把任务栏拖动到那里即可,因为任务栏里面有tweenPosition

public TweenPosition questTween;

    private void OnMouseOver()
    {
        if (Input.GetMouseButtonDown(0))
        {
            ShowQuest();
        }
    }
    //显示任务框
    void ShowQuest()
    {
        questTween.gameObject.SetActive(true);
        questTween.PlayForward();
    }
如果让任务框的动画倒回去播放,也即让任务框退回去消失,questTween,PlayReverse();


如果一个物体不能添加c#脚本,检查下该脚本的类名写错没


下面是背包系统的制作:

首先物品种类的分析:


创建txt文件,放入所有物品信息:

1001,小瓶血药,icon-potion1,Drug,50,0,50,60
1002,大瓶血药,icon-potion2,Drug,100,0,70,100
1003,蓝药,icon-potion3,Drug,0,100,60,80


我们发现,当物品种类是药品的时候才会有4,5,也即加血量和加魔法值,我们可以通过物品id得到一条信息,该信息可以得到该物品的名称,类型,价格等等,所以用字典的方式,key为id,value为ObjectInfo集合来标识

public class ObjectsInfo : MonoBehaviour {

    public static ObjectsInfo _instance;

    private Dictionary<int, ObjectInfo> objectInfoDict = new Dictionary<int, ObjectInfo>();
    //把存有所有物品的txt文件拖动到这里
    public TextAsset objectsInfoListText;

    void Awake() {
        _instance = this;
        ReadInfo();
    }


    public ObjectInfo GetObjectInfoById(int id) {   //根据id得到该id的物品所有属性
        ObjectInfo info=null;
        objectInfoDict.TryGetValue(id, out info);
        return info;
    }
  //读取文本文件
    void ReadInfo() {
        string text = objectsInfoListText.text;
        string[] strArray = text.Split('\\n');//用一个string数组来保存每一行的数据

        foreach (string str in strArray) {
            string[] proArray = str.Split(',');//得到一行数据中的所有属性,每个属性用,来隔开
            ObjectInfo info = new ObjectInfo();

            int id = int.Parse(proArray[0]);
            string name = proArray[1];
            string icon_name = proArray[2];
            string str_type = proArray[3];
            ObjectType type = ObjectType.Drug;
            switch (str_type) {
                case "Drug":
                    type = ObjectType.Drug;
                    break;
                case "Equip":
                    type = ObjectType.Equip;
                    break;
                case "Mat":
                    type = ObjectType.Mat;
                    break;
            }
            info.id = id; info.name = name; info.icon_name = icon_name;
            info.type = type;
            if (type == ObjectType.Drug) {
                int hp = int.Parse(proArray[4]);
                int mp = int.Parse(proArray[5]);
                int price_sell = int.Parse(proArray[6]);
                int price_buy = int.Parse(proArray[7]);
                info.hp = hp; info.mp = mp;
                info.price_buy = price_buy; info.price_sell = price_sell;
            }
            objectInfoDict.Add(id, info);//添加到字典中,id为key,可以很方便的根据id查找到这个物品信息
        }
    }
	
}

//id
//名称
//icon名称
//类型(药品drug)
//加血量值
//加魔法值
//出售价
//购买
public enum ObjectType {
    Drug,
    Equip,
    Mat
}
//该集合保存了物品的所有信息
public class ObjectInfo {
    public int 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;
}
注意上面的这个脚本定义了2个类ObjectInfo和ObjectsInfo,看清楚


给背包物品添加可拖拽功能:给物品添加脚本,让它继承UIDragDropItem,这个应该是NGUI的一个类,这里注意的是继承了这个类就要把默认的start和update函数删去否则默认重写该函数,或者在start函数中加上base.start();也行

而且由于物品要和鼠标拖拽交互,需要给他添加box collider,这是游戏里发现可以对物品进行拖拽了,给物品和背包的格子添加tag来区分,给每个格子都添加box collider,这里注意的是物品,格子,背包全部添加了box collider,给物品添加这样的脚本,当拖拽结束的时候如果下面是格子,就会打印出格子的tag

public class Inventory_item : UIDragDropItem{

    protected override void OnDragDropRelease(GameObject surface)
    {
        base.OnDragDropRelease(surface);
        if (surface != null) {
            Debug.Log(surface.tag);
        }
        
    }
}
这里特别注意的是,自己在调试的时候,发现什么都不打印,一直空指针,弄了TMD 3小时才发现,给格子的box collider的范围要设置合理才能行,如果太小就空指针,妈了个bb的



Inventory_item 中代码如下:

以上是关于My First RPG Game总结二的主要内容,如果未能解决你的问题,请参考以下文章

日文RPG游戏可以用啥翻译

在派生类中使用虚函数

RPGツクール相关rtp下载

RPGツクール相关rtp下载

OpenGL基础学习之二代码基本结构

为什么二代测序的原始数据中会出现Read重复现象?