27824人加入学习
(125人评价)
如何制作塔防游戏(基于Unity5.5)
价格 免费

射线检测检测敌人是否在攻击范围之内如果在攻击范围之内我们攻击最先检测到的敌人

设置攻击范围碰撞器触发器修改成触发器另外添加刚体检测然后监听一下触发事件创建一个进入一个离开的触发器可能有很多的敌人炮塔只攻击最先检测到的敌人然后定义一个list存放所有检测到的敌人这样攻击最先检测到的在攻击下一个然后通过标签检测标签来确认进去的是否是敌人如果标签正确就添加到集合里当离开时就从集合里删除

[展开全文]

 

建筑创建,完成创建时的泥土飞溅效果,每次生成都会去实例他

创建一个心得GameObject改名为BuildEffect效果是围绕在建筑的四周的在buildEffect下创建一个ParticleSystem用它来完成

控制特效

buildEffect和ParticleSystem两个保持持平移动他的父类来控制ParticleSystem然后给ParticleSystem的rotationX修改为-90方便观察ParticleSystem的状态,3D像素风:“ParticleSystem里有一个Renderer就是每一个粒子的效果然后选择Mesh后选择cube网格然后给Cube网格创建一个材质单纯的颜色然后把做好的材质赋值给Randerer的material”

默认的粒子特效是从下向上的修改成向四周散去的效果首先修改ParticleSystem的StartSize修改小一些;发散效果:要以一个周发散所以把Shape中心点向四里发散的效果修改成一个Circler然后它发散一次就达到效果了所以把Emission下的Rate over Time是一秒钟散开多少次修改为0,我们只是需要她实例化时发散一次所以添加一个Emission下的Bursts就可以一秒发送30个了,现在的运行周期有些略长把每个循环(Duration)和每次运行时间(Start Lifetime)都修改为每0.3执行一次,让这个实例化出的效果执行到结束让他从大慢慢变小这里修改Size Over Lifetime这里把曲线修改为从大到小的一个曲线就好了然后再给特效一个向上的速度 ,如果向上还是需要修改成圆锥体,然后修改速度修改数量到12-25

[展开全文]

运行问题:

1.运行时激光炮头部旋转点错误。解决:改变head空物体的位置,把他应该在turret的中心。因为刚创建空物体时位置不对,并且没有改变,而是直接把turret拖到head下面,导致出错。

2.升级UI界面显示在固定位置,不会随着点击消失或者转移位置。

[展开全文]

我运行的时候,升级UI界面出现一个问题。

standard炮台的pos.Y在mapcube里面,根据代码UI界面也会出现在mapcube里面。

重点在改变standard炮台的Y轴?

解决了。我改变了画布的小篮圈pivot把他定格在底部中线上,之后把两个按钮的字体在rect transform调整到画布上方-top center,之后运行调节,调整到合适位置就好了

[展开全文]

这一节解答了炮塔旁边的地板没有办法点亮的问题。方法是取消勾选Queries Hit Triggers

但是,这方法同样也会消除其他事件的射线检测。

所以我想,是不是可以提示一下玩家,炮塔检测范围之内的地板是不会变红的(除非玩家想要重火力),推荐在变红的位置建立炮塔。

[展开全文]

官网api文档中,OnMouseEnter的触发条件之一,是Edit-project settings-Physics-Queries Hit Triggers勾选上。(另一个是物体身上有collider)

以此反推,OnMouseEnter的工作是通过射线检测完成的。同理,OnMouseExit也是

 

PS:在炮塔collider范围内的mapcube在目前的情况中,是不可以被点亮的

[展开全文]

。子弹上的刚体和spherecollider检测不到敌人

[展开全文]

炮台检测敌人,使用Sphere Collider组件,通过扩大检测范围-radius,并挂载刚体组件rigid body来检测物体

[展开全文]

BuildManager里面得有这行代码。

public Animator moneyAnimator;

没有的话在写

else
                        {
                            //提示钱不够
                            moneyAnimator.SetTrigger("Flicker");
                        }

的时候会报错。

[展开全文]

private void SetRoad3() { roadTrans3 = new Transform[5]; roadPoint3 = new int[5] {5,2,8,7,9}; int j = 0; do { for (int i = 0; i < transform.childCount; i++) { if (j == roadTrans3.Length) { break; } else if (transform.GetChild(i).name == "Road" + roadPoint3[j]) { roadTrans3[j] = transform.GetChild(i); j++; } //Debug.Log(transform.GetChild(i)); //Debug.Log(j); } } while (j != roadTrans3.Length); //foreach (var item in roadTrans3) //{ // Debug.Log(item); //} }

[展开全文]

LaserTurret

MissleTurret

StandardTuret

Upgraded

[展开全文]

授课教师

SiKi学院老师

课程特色

图文(2)
视频(52)