|
资源信息 Tutorial Information
教程名称: | 另类血条制作[2]-简单AI 残血时自动跑去加血(发帖教程) |
适用引擎: | (适用引擎,为空默认为Unity) |
教程语种: | 中文 |
教程等级: | 1 |
教程格式: | 文档(请用IE9以上浏览器访问本版块) |
教程作者: | 摞你命3000 (如有问题请短消息联系作者或发表回复) |
下载地址: | 无 (兑换积分) |
看了上一次我的帖子《unity 血条的另类制作-伤害减血加血自动回血,最简单教程,菜鸟必看。 》的童鞋,这次我们来做个简单AI 练习
地址在这里http://www.u3dchina.com/t-6116-1-1.html
因为上次只做了那个骷髅怪被击中减血和自动回血的功能,没有做在生命值低的时候会自动跑去加血的功能。好了,废话不说,我们开始。
1:首先在地图中放置一个空物体和一个Cube,其实Cube可以不放,我是为了运行的时候能知道那个加血点在什么地方而已。把空物体放在距离骷髅远一点的地方,然后起个名字叫jiaxuedian,名字随便起,不会影响代码的作用。然后把cube丢它旁边就行。就是为了做个标记,当然了,也可以在空物体做个效果 比如会冒烟啊,有光芒啊 什么的,我为了省事就不搞那么复杂了。
2:为加血点添加一个球形碰撞器,设置为IS Trigger 打钩,然后调整一下半径和高度,半径我调成了3.5,这样。也就是为了有个进入碰撞的检测范围。半径范围大概调成下面的图片差不多就可以了。
第二步的图片示例
3:然后为骷髅身上添加钢铁属性和一个胶囊碰撞器,调整参照截图就可以了。胶囊碰撞器范围不要太大,能裹住骷髅的身体就行,高度刚好在脚底这样就行,这个很重要,否则你会发现骷髅莫名其妙的站姿,等等怪异行为。
4:好了。准备工作完成了,接下来把上次的代码改一改就成了。
================================================
void Start () { //脚本运行时就载入的脚本
xuetiao = new Texture2D(512,32); //定义血条是个2D贴图,括号里的是长和宽,具体自己可以在PS里制作,将制作的图片尺寸放入。
xuetiao.wrapMode = TextureWrapMode.Clamp; //将贴图拉伸覆盖到血条,严格点说是将血条这个图片拉伸
dangqianHP = 1000; //这里的意思是运行的时候就用500的当前血量值,也可以在上面直接定个500的值,这里就不用定了
bot_name = p_name.name;
m_name.GetComponentInChildren<TextMesh>().text = bot_name;//改变3Dtext的文字,让他显示骷髅的名字
}
======================================================
打开那个xueliang.cs脚本,找到上面这段话,将当前生命值改成1000,。
=============================
public class pz : MonoBehaviour {
public Transform target;//加血点坐标
====================================
在pz.cs这个脚本的头部加上上面这个变量。target 加血点坐标,添加好后记得在骷髅的属性面板里绑定那个空物体到这个target上,让骷髅知道加血点的坐标位置。
然后将Start 和 Update中添加以下内容:
============================================
void Start ()
{
//动画为循环播放
this.animation.wrapMode = WrapMode.Loop;
}
void Update ()
{
if (GetComponentInChildren<xueliang> ().dangqianHP <= 500) {
this.transform.LookAt (target.transform);
transform.Translate (Vector3.forward * Time.deltaTime * 5);
gameObject.animation.Play ("run");
}
}//update结束符号
=======================================
protected void OnTriggerEnter(Collider other){
//protected void OnCollisionEnter(Collision collision){
if (other.gameObject.name == "Cube") {
if (GetComponentInChildren<xueliang> ().dangqianHP < 1000) {
GetComponentInChildren<xueliang> ().dangqianHP += 500;
Instantiate (boomFire, target.transform.position, target.transform.rotation);
gameObject.animation.Play ("idle");
}
}
}
==============================
然后再将上面这一段代码添加到 pz.cs的尾部,就在碰撞检测之后,文档结束符号} 之前加入。别搞错了~
好了完成了,看看效果,当我向骷髅射击,他的血量低于500的时候,他就自动跑去加血点的位置加血去了。。。。。
跑到加血点后。接触了碰撞范围的检测,引爆了爆炸效果,当然这个效果应该放一个加血的光芒效果,懒得做了我。。呵呵,
然后骷髅的血量增加了500。
好了这次的作业我又做完了,同学们应该看明白了。连续两次的作业就涉及到了碰撞检测函数的使用。
OnCollisionEnter(Collision collision) 和 OnTriggerEnter(Collider other) 的使用方法
而OnTriggerEnter(Collider other) 这个我个人认为以目前自己的对unity的认知水平来看,最合适用来做AI的范围检测了,当然了还有Distance(距离检测)。两种方法都可以检测到入侵他地盘的玩家。检测到就进攻玩家。
自学了两个星期的Unity,感觉好累,我大部分时间都花在看代码上,然后弄到场景中进行反复测试,加深认识。
昨天我参考雨松momo的AI部分的代码,做了个改进和修正。感觉还不错,用状态机制来给AI选择不同的反应。有兴趣的童鞋们也研究研究。有时间的话做个教程。。。。
老规矩,回复看我的Poser 3d 美女作品 。。。哈哈
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
评分
-
查看全部评分
|