UNITY 怎么识别或者攻击不同敌人
答案:2 悬赏:50 手机版
解决时间 2021-01-15 11:08
- 提问者网友:像風在裏
- 2021-01-14 11:37
UNITY 怎么识别或者攻击不同敌人
最佳答案
- 五星知识达人网友:独钓一江月
- 2021-01-14 12:48
设置敌人的Layer为“Enemy”,在脚本中检测碰撞器的Layer,具体的脚本语言我有点忘了(呵呵最近一直忙别的没写脚本),大概是这样:
raycasthit hit = new raycasthit();
raycastall(ray, hit);//向检测对象(敌人)发射射线,hit用来提取对象碰撞器的信息
//如果对象的Layer是“Enemy”,就.....
if(hit.layer == layermask.nametolayer("Enemy"))
{
...........
}追问但是是前方类似扇形范围的啊,不能用射线吧,还有这个射线是从我角色上发的吧,用来看我射的物体是不是隶属ENEMY层的物体,那么问题来了,假如我的那么多敌人都是在ENEMY层的我该找谁发射攻击信息啊,这个语句应该也没有设置射线的方向以及长度对吧...,能不能做成一定范围内的射线发射呢..追答这个吧就涉及到人工智能(AI)了有很多种不同的检测方法,我举一个超简单方法:
首先给角色加一个球形的Collider,半径就是你的攻击范围,设置Collider的属性是Trigger,用脚本或者编辑器下都可以设置的,建议在脚本里加
void Start(){
SphereCollider attackRange = gameObject.AddComponent(typeof(SphereCollider));//为角色添加一个球形碰撞器;
attackRange.radius = 1000;//设置攻击范围
attackRange.isTrigger = true;//设置为触发器
}
//这个是Unity的事件自动检测,只要进入范围就发攻击消息,多个敌人进入时可以建一个敌人列表把要攻击的敌人加进去,敌人死了或者逃离了攻击范围就把它从列表里删掉
void OnTriggerEnter(Collider c)
{
if(c.gameObject.layer == LayerMask.NametoLayer("Enemy"))
{
....
}
}追问好像明白了些东西,我试试,以前从没用过层追答用Tag也可以的追问5555我试了问题是现在OntriggerEnter只能触发一次,也就是说根本实现不了持续掉血什么的并且假如敌人在我的攻击范围内我按下攻击也没反应求问砸破
raycasthit hit = new raycasthit();
raycastall(ray, hit);//向检测对象(敌人)发射射线,hit用来提取对象碰撞器的信息
//如果对象的Layer是“Enemy”,就.....
if(hit.layer == layermask.nametolayer("Enemy"))
{
...........
}追问但是是前方类似扇形范围的啊,不能用射线吧,还有这个射线是从我角色上发的吧,用来看我射的物体是不是隶属ENEMY层的物体,那么问题来了,假如我的那么多敌人都是在ENEMY层的我该找谁发射攻击信息啊,这个语句应该也没有设置射线的方向以及长度对吧...,能不能做成一定范围内的射线发射呢..追答这个吧就涉及到人工智能(AI)了有很多种不同的检测方法,我举一个超简单方法:
首先给角色加一个球形的Collider,半径就是你的攻击范围,设置Collider的属性是Trigger,用脚本或者编辑器下都可以设置的,建议在脚本里加
void Start(){
SphereCollider attackRange = gameObject.AddComponent(typeof(SphereCollider));//为角色添加一个球形碰撞器;
attackRange.radius = 1000;//设置攻击范围
attackRange.isTrigger = true;//设置为触发器
}
//这个是Unity的事件自动检测,只要进入范围就发攻击消息,多个敌人进入时可以建一个敌人列表把要攻击的敌人加进去,敌人死了或者逃离了攻击范围就把它从列表里删掉
void OnTriggerEnter(Collider c)
{
if(c.gameObject.layer == LayerMask.NametoLayer("Enemy"))
{
....
}
}追问好像明白了些东西,我试试,以前从没用过层追答用Tag也可以的追问5555我试了问题是现在OntriggerEnter只能触发一次,也就是说根本实现不了持续掉血什么的并且假如敌人在我的攻击范围内我按下攻击也没反应求问砸破
全部回答
- 1楼网友:逃夭
- 2021-01-14 14:26
直接说你做的是什么类型的游戏设计~想要达到什么效果吧
你这样的表述方式实在很难让人看明白~追问
上帝视角的游戏,我的主角可以向前方三角范围内侦测是否有敌人,当侦测到了敌人并按下F键则向敌人发送攻击信息,当有复数敌人可以向复数敌人同时发送攻击信息(敌人有收到攻击信息的void beingAttack然后触发掉血)
如图上面的那个是我的角色,但是目前我只能办到让他识别出来一个敌人(右边那个)
一旦另外一个(左边那个)加进到攻击范围来没有任何反应追答....你这里侦测敌人有什么作用~~
直接在你按下F键时在你角色面前生成一个触发器(碰撞器勾选Trigger,形状可以按需求调整)
然后直接判断触发器触碰到了什么物体就行了啊
你也可以让这个触发器一直存在,在OnTriggerStay回调函数里监听F按键,不过这样性能开销应该比上面的要大追问哦,你的意思是说,我本来就在角色上多绑一个碰撞体,然后开始的时候enable=false
然后按下F就为True用OnTriggerStay还是Enter判断撞得是什么是这个意思吧,那个问下碰撞体我能自己做么,毕竟默认的只有方块能用来着追答你可以在3Dmax或者MAYA里面建个扇形柱体然后用meshCollider就行了追问那个,劳驾问下,我怎样让敌人在攻击范围内持续受到伤害呢,OnTriggerEnter只能触发一次信息啊,然后怎么办,尤其是最纠结的我设定了ONTriggerExit之后OnTriggerEnter就不能再次触发了,还有就是当敌人角色本身就在碰撞器中时用这个会失效
你这样的表述方式实在很难让人看明白~追问
上帝视角的游戏,我的主角可以向前方三角范围内侦测是否有敌人,当侦测到了敌人并按下F键则向敌人发送攻击信息,当有复数敌人可以向复数敌人同时发送攻击信息(敌人有收到攻击信息的void beingAttack然后触发掉血)
如图上面的那个是我的角色,但是目前我只能办到让他识别出来一个敌人(右边那个)
一旦另外一个(左边那个)加进到攻击范围来没有任何反应追答....你这里侦测敌人有什么作用~~
直接在你按下F键时在你角色面前生成一个触发器(碰撞器勾选Trigger,形状可以按需求调整)
然后直接判断触发器触碰到了什么物体就行了啊
你也可以让这个触发器一直存在,在OnTriggerStay回调函数里监听F按键,不过这样性能开销应该比上面的要大追问哦,你的意思是说,我本来就在角色上多绑一个碰撞体,然后开始的时候enable=false
然后按下F就为True用OnTriggerStay还是Enter判断撞得是什么是这个意思吧,那个问下碰撞体我能自己做么,毕竟默认的只有方块能用来着追答你可以在3Dmax或者MAYA里面建个扇形柱体然后用meshCollider就行了追问那个,劳驾问下,我怎样让敌人在攻击范围内持续受到伤害呢,OnTriggerEnter只能触发一次信息啊,然后怎么办,尤其是最纠结的我设定了ONTriggerExit之后OnTriggerEnter就不能再次触发了,还有就是当敌人角色本身就在碰撞器中时用这个会失效
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯