我的游戏开发笔记(二):加状态以及检东西
来源:互联网 发布:淘宝卖家能知道买家 编辑:程序博客网 时间: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
- 我的游戏开发笔记(二):加状态以及检东西
- 我的游戏开发笔记(三):扔东西与跟踪。
- 我的游戏开发笔记(五):Animator的运用二
- 游戏程序开发:状态驱动的游戏智能体设计 (二)
- 我的游戏开发系列笔记(索引)
- 我的游戏开发笔记(五):Coroutine及其用法
- 我的Android游戏开发笔记
- cocos2dx游戏开发学习笔记(二)
- 我的NDK学习开发笔记(二)
- 游戏开发笔记之八——基础动画显示(二)游戏循环的使用
- 游戏开发学习笔记(二)创建游戏角色场景的制作
- 【iOS-Cocos2d游戏开发之二十二 】CCSpeed实现CCAnimate动画进行时设置慢动作以及设置游戏加减速进行(塔防游戏必备)!
- 【iOS-Cocos2d游戏开发之二十二 】CCSpeed实现CCAnimate动画进行时设置慢动作以及设置游戏加减速进行(塔防游戏必备)! .
- 【iOS-Cocos2d游戏开发之二十二 】CCSpeed实现CCAnimate动画进行时设置慢动作以及设置游戏加减速进行(塔防游戏必备)!
- 跟我学ios开发(二)-分析一个简单的游戏
- javaWeb笔记(二) 装饰者模式 以及我的理解
- iOS游戏开发游戏功能之外的东西
- 【iOS-Cocos2d游戏开发之二】Cocos2D 游戏开发资源贴(教程以及源码)
- CGRectInset、CGRectOffset详解
- MTK中加入ETT测试代码
- 当启动多个Activity后从最后一个activiy越级返回方法
- 分析android动画模块
- hdu5327 Olympiad(简单题:打表+模拟)
- 我的游戏开发笔记(二):加状态以及检东西
- eclipse中用struts2时报Path must include project and resource name: /struts-default.xml的错误
- Zend里正则替换
- 机房收费系统之实时错误‘94’无效使用null值
- 《面向 SSD/HDD 混合存储的动态缓存调度算法 DRC 》结--
- C-1.1
- VirtualBox 创建com对象失败
- 使用Android Studio 1.3 版本进行NDK开发
- 关于短信的读取以及新短信到达时如何触发事件去处理自己的逻辑