我的游戏开发笔记(二):加状态以及检东西

来源:互联网 发布:淘宝卖家能知道买家 编辑:程序博客网 时间:2024/06/05 04:13

上次已经实现了人物的基本操作与相应动作,接下来,对于人物来说肯定要有各种各样的buff,比如加速、力量提升、减速、眩晕。

我把每一个buff都封装成一个类,这样当人物达成获得buff的条件时直接添加这个类就行了。

首先,新建一个类,上面说明冰冻的效果以及冰冻的时间或者更多想要的效果,当buff的持续时间到了就把这个类给移除掉就行了,用Destroy(this)移除buff。

//Freeze.csusing UnityEngine;using System.Collections;public class Freeze : MonoBehaviour {    public float freezeTime;    float startTime;    public GameObject freezeParticle;    Object go;    // Use this for initialization    void Start()    {        startTime = Time.time;        gameObject.GetComponent<ThirdPersonControl>().walkSpeed = 0;        gameObject.GetComponent<ThirdPersonControl>().runSpeed = 0;        go = Instantiate(freezeParticle, transform.position, transform.rotation);    }    // Update is called once per frame    void Update()    {        if (startTime + freezeTime <= Time.time)        {            gameObject.GetComponent<ThirdPersonControl>().walkSpeed = gameObject.GetComponent<ThirdPersonControl>().basewalkSpeed;            gameObject.GetComponent<ThirdPersonControl>().runSpeed = gameObject.GetComponent<ThirdPersonControl>().baserunSpeed;            Destroy(this);            Destroy(go);        }    }}

其次,就是设置冰冻这个buff的触发条件,我把buff设置成撞到物体时判断,当角色没有踢或者放大招时,就会获得(AddComponent<Freeze>())这个buff(debuff),可以设置一些爆炸效果,这样看上去会更加真实。

//FreezeBoom.csusing UnityEngine;using System.Collections;public class FreezeBoom : MonoBehaviour {    public GameObject boomFire;    public float dotTime;    public GameObject freezeParticle;    // Use this for initialization    void Start()    {    }    // Update is called once per frame    void Update()    {    }    void OnTriggerEnter(Collider co)    {        if (co.tag == "Player")        {            if (co.GetComponent<ThirdPersonControl>().kicking || co.GetComponent<ThirdPersonControl>().utimating)            {                Instantiate(boomFire, transform.position, transform.rotation);                Destroy(gameObject);            }            else            {                co.gameObject.AddComponent<Freeze>();                co.GetComponent<Freeze>().freezeTime = dotTime;                co.GetComponent<Freeze>().freezeParticle = freezeParticle;                Instantiate(boomFire, transform.position, transform.rotation);                Destroy(gameObject);            }        }    }}

然后就把FreezeBoom.cs拖到可以赋予buff的物体上就可以实现了。

大概效果是这样,本人美工实在是真的的确不会,只能使用unity3d store 上面的免费模型...

先是把FreezeBoom.cs拖到这个大冰块上


然后撞上去,人物就被冰冻住了,过几秒后就能继续行动了


其他的buff也就类似冰冻buff。


接下来关于捡起物品,我把触发条件设置成只要碰到就能把物品捡起来(- -! 就是偷懒)

因为捡东西也要配动作,就把它写到ThirdPersonControl.cs里面吧!

首先这是要被捡起的东西。


接下来就是碰到它就把它捡起来,代码如下

    void OnTriggerEnter(Collider co)    {        if (co.tag == "weapon"&&!picking)        {            Transform weaponPos = gameObject.transform.FindChild("rootJoint").FindChild("torso").FindChild("shoulders").FindChild("shoulderRight").FindChild("elbowRight").FindChild("wristRight").FindChild("handRight").FindChild("weaponPos");            co.transform.position = weaponPos.position;            co.transform.localScale *= 0.2f;            co.transform.rotation = weaponPos.rotation;            co.transform.parent = weaponPos;            Debug.Log("nihao");            picking = true;        }    }

这里note一下,gameObject.transform.FindChild()似乎不能自动帮你找到最底层的子组件,必须自己去一层一层的找,所以就有这么一长串FindChild()

捡起来后把weapon缩小方向变一下就会变成这样的效果:


哎~没调好视角,就是刚刚那个我叫做武器的东西转移到角色的右手上了!可以看的见吧。

这样就把东西捡起来了,对了,还有一点,必须要设置一个参数picking来标识现在角色是否已经捡起东西了,要不然他一看到东西就捡,手上就一堆武器了!

public bool picking = false;

好了,至于怎么把物品扔掉还没做,以后再做吧!


0 0