玩家信息血条及伤害值随主角移动

本文将指导您如何在Unity中利用NGUI组件实现RPG游戏中玩家信息的动态显示,包括角色信息、生命值等。通过创建角色模型、设置UI组件和编写脚本来实现玩家信息的实时更新。

  许多RPG游戏中绝对少不了的就是玩家信息的动态显示,包括玩家姓名,等级,生命值,被攻击时生命值的减少等。

今天我们来共同学习一下怎么制作。搞起。。。。

1,首先导入NGUI,感觉NGUI做UI还是挺方便的。

2,创建玩家Player可用cube代替且在cube下创建子物体head位置默认值归零,用途:玩家信息显示位置。

3,使用NGUI创建玩家信息跟随,结构如下:

4,贴代码:NewBehaviourScript.cs挂到MainCamera上

using UnityEngine;
using System.Collections;

public class NewBehaviourScript : MonoBehaviour {

    //角色
    public Transform Cube;
    //要岁主角移动的信息 血条,名称
    public Transform UI;

    //默认血条与摄像机的距离
    private float Fomat;
    //角色头顶位置
    private Transform Head;

    void Start () 
    {
        //找到角色头顶点
        Head = Cube.Find("head");
        //计算一下默认血条的距离 
        Fomat  = Vector3.Distance(Head.position,Camera.main.transform.position);
        Debug.Log (Fomat);
    }
    
    void Update () 
    {
        //这里可以判断一下,如果位置没发生变化课不再赋值
        float newFomat = Fomat / Vector3.Distance(Head.position,Camera.main.transform.position);
        UI.position  = WorldToUI(Head.position);
        //计算血条的缩放比例
        UI.localScale = Vector3.one * newFomat;

        //测试代码 移动角色
        if(Input.GetKey(KeyCode.W))
            Cube.Translate(Vector3.forward);
        if(Input.GetKey(KeyCode.S))
            Cube.Translate(Vector3.back);
        if(Input.GetKeyDown(KeyCode.A))
            Cube.Translate(Vector3.left);
        if(Input.GetKeyDown(KeyCode.D))
            Cube.Translate(Vector3.right);
    }


    //3D坐标转换为NGUI屏幕上的2D坐标
    public static Vector3 WorldToUI(Vector3 point)
    {
        Vector3 pt = Camera.main.WorldToScreenPoint(point);
        //UICamera.currentCamer 
        Vector3 ff = UICamera.currentCamera.ScreenToWorldPoint(pt);
        //UI的Z轴为0
        ff.z = 0;
        return ff;
    }
}
View Code

%26nbsp;5,另一个脚本cube.csgua挂在player上

%26nbsp;

using UnityEngine;
using System.Collections;



public class cube : MonoBehaviour 
{
    public GameObject fg;
    private GameObject sprite;
    public GameObject harm;
    public UILabel hp;
    // Use this for initialization
    void Start ()
    {
        harm.SetActive(false);
        hp.text = "HP:100/100";
    }
    
    // Update is called once per frame
    void Update () 
    {
        
    }

    void OnMouseDown()
    {
        if(fg.GetComponent%26lt;UISprite%26gt;().fillAmount%26gt;0)
        {
            fg.GetComponent%26lt;UISprite%26gt;().fillAmount -= 0.1f;
            harm.SetActive(true);
            hp.text = ((int)(fg.GetComponent%26lt;UISprite%26gt;().fillAmount*100)).ToString()+"/100";
        }

        Debug.Log (fg.GetComponent%26lt;UISprite%26gt;().fillAmount);
    }
    void OnMouseUp()
    {
        harm.SetActive(false);
    }
}
View Code

6,运行效果:

7,点击物体模拟被攻击,看血量减少,并弹出被攻击值。

玩家挂了

%26nbsp;

项目源码:

链接:http://pan.baidu.com/s/1jGDpZF4 密码:vh5p

如果打不开,请检查Unity版本哦,本人测试的是4.5.

要求设计一个名为“文彬奇侠传”的半即时制半回合制游戏,玩家操控的主角名为“陈文彬”,敌我行动次数由速度决定,行动机制为(比如行动总计长1000,敌方速度10,我方速度50,则20s我可以行动一次,敌方则需100s才可行动一次,战斗开始时,所有单位的头像都将从行动左侧开始移动,到达右侧时进行行动),并制作一个可视化行动在右上角,游戏可进行攻,技,防,术,逃五个选择,人物数有精气神攻防灵速暴,精则为量,气为释放“技”所需,神为释放“术”所需,攻为物攻,防为防御,灵为法攻,速为速度命中闪避,暴为暴击率。操作的“攻”为普通攻击,造成基于释放“攻”的单位一定比率物攻伤害,“防”为防御,降低直至下回合行动时所受的伤害,同时防会让人物从行动中间开始行动还不是最左侧,“技”为技能,技能都是基于物攻进行伤害,“术”为法术,基于法攻进行伤害,“逃”为逃跑,游戏总共有七个关卡,第一关会有三个名为RES的敌人,只会进行普攻;第二关会有三个名为MIM,三个名为MOM总计6名敌人,会进行普攻和小概率释放技能“M互助”,“M互助”效果为治疗随机一个己方已受伤单位;第三关是名为VAR的精英怪,会进行普攻,拥有技能“召唤CAP”,“召唤CAP”会召唤两个CAP,CAP为小怪,只会进行普攻,CAP所受伤害将会使VAR受到同等伤害;第四关是精英怪MOS,当它量低于50%时会分裂成三个单位,分别叫IV,CV,CAL,MOS分裂前只会进行普攻,分裂后IV只会释放法术“通电流”,对我方造成伤害并有概率施加减速;CV只会释放技能“少电容”,对我方造成伤害,若我方存在减速效果,则移除减速效果,额外造成一段伤害;CAL只会释放技能“无CT”,随机为IV,CV,CAL各施加一个增益效果(攻增,防增,速增,灵增,暴增)。第五关是WPE,LOD,NOISE三个精英怪,它们不会主动进行攻击,但它们会随机要求己方使用“普攻,技能或法术”,己方按要求连续使用十次则获得胜利,若己方不按要求使用,则三个精英怪会轮流释放“不满足DRC”,“不满足LVS”,“TO失败”,“不满足DRC”会将我方精气神降为1,“不满足LVS”会使我方攻防速暴灵降低99%,“TO失败”会使我方陷入中毒状态,我方回合开始时受到100%生命上限的伤害。第六关是Diode的精英怪,会进行普攻,拥有技能“共用边”“ISO环”“变阵列”,“共用边”会对我方造成伤害并随机削减我方精气神其中之一的上限,“ISO环”会使Diode免疫法术伤害,“变阵列”会使场上全体目标随机获得增益或减益。最后一关第七关面对的是另一个自己,玩家初始只拥有攻,防,逃,技,初始技只有“设参数”,对敌方单体造成伤害并有几率使对方定身,当玩家通关第二关时,会获得第二个技能“画阵列”,对敌方全体造成伤害,并进行法术修习路线选择,有阴阳两个选择,选择阴则获得法术“踢皮球”,随机对敌方全体施加一个减益效果;选择阳则获得法术“品质至上”,恢复自身一定精并随机获得一个增益。通过第三关时,阴会获得法术“装傻充愣”,释放后两回合内敌方为己方释放的减益将被反弹至其自身,阳会获得法术“客户满意”,此技能只能在自身有增益时释放,释放后移除自身增益对敌方全体造成伤害,移除的增益类型越多伤害越高。通过第四关时会学会技能“DRC”,恢复自身全部精气神,每场战斗只可使用一次;阴会获得法术“又不是造火箭”;对敌方全体造成随机少量中量大量伤害;阳获得法术“全员参与”,为自身附加"攻防灵暴速"所有增益。通过第五关时学会技能“LVS”,使自身"攻防灵暴速"全部巨幅提高,持续两回合,每场战斗只可使用一次;阴获得法术“摸鱼”,对敌方单体造成伤害并将伤害一部分转化为自己的精;阳获得法术“持续改进”,此技能只能在自身有增益时释放,其它法术在该场次释放的次数越多,该法术造成伤害越高。通过第六关时,若在前面六关已使用过所有技能,则习得技能“奥义版图一龙”,对敌方造成巨幅伤害;阴学会法术“不能干就走人”,转移自身负面给敌方单位,且有几率直接秒杀敌方单位;阳学会法术“ZEZD”,为自身施加免疫效果,持续两回合,免疫所有伤害和减益效果,若角色选择阴法术,则第七关boss为阳法术的角色,反之亦然,boss会使用角色技能和对应仙术(比如阳boss会使用所有技能和阳的所有法术),角色普攻可以恢复气和神,这里面所有的数包括己方和敌方角色精气神攻防速暴灵,增益减益幅度,以及技能法术伤害都需要你按照成熟的游戏设计进行设置。 我要求你将我所要求的所有功能都进行实现,不要给我只实现一部分,我要能完全实现所有功能的所有代码,并将代码分分成一小个模块生成,一个模块不超过三百行代码,但你又需保证分开的代码按顺序拼接起来时可以正常运行,你先生成一个模块,我说继续时再生成下一个模块,以此类推。
最新发布
12-17
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值