一、豌豆射手的子弹控制
创建脚本单独控制子弹的运动
用transform来控制移动
void Update()
{
transform.Translate(Vector3.right * speed * Time.deltaTime);
}
创建一个控制子弹速度的方法,方便速度的控制
private void SetSpeed(float speet)
{
this.speed = speet;
}
回到控制豌豆射手的脚本中,当调用他的射击方法时去实例化子弹这样就能实现豌豆射手的攻击了。
private void shoot()
{
BulletControl go = GameObject.Instantiate(PeaBulletPrefab, shootPointTransform.position, Quaternion.identity);
go.SetSpeed(BulletSpeet);
}
效果如下:
二、僵尸动画的开发
普通的僵尸有五个动画状态Eat 、Move、LostHeadMove、LostHandMove,Die他们之间的相互转换关系如下:
在制作动画时,帧动画可以直接拖拽到游戏物体上,相当于给游戏物体上的动画状态机添加新的动画。
添加动画后,效果如下:
在Zombie_Move和Zombie_Eat通过一个布尔变量来控,当控制到敌人时就开Eat,没有碰到植物就Move。
当IsAttacking为true时,就会播放Eat动画,然后将退出时间取消表示随时都可以切换。
Move动画和LostHeadMove的切换时当血量达到某个值的时候进行切换,添加一个float类型的参数,
Eat动画和LostHeadEat的切换条件也是一样的
其他动画状态的切换也是类似设置。
设置好了之后,当参数达到对应的值之后就会进行不同状态的切换。
测试效果如下:
三、僵尸功能开发
1.行走功能
僵尸需要和植物之间进行检测,因此要在僵尸上添加刚体组件,既然僵尸身上有刚体组件,那么就可以使用刚体组件来控制他的移动。
因此就要为其添加刚体和碰撞器
Rigldbody 2D 、Box Collider 2D。
在僵尸的脚本上拿到刚体的引用
private Rigidbody2D rgd;
在start函数中获取这个刚体组件
rgd = GetComponent<Rigidbody2D>();
然后通过MovePosition方法来进行移动
rgd.MovePosition(rgd.position + Vector2.left * moveSpeed * Time.deltaTime);
当前的位置加上移动的方向乘以移动的速度和时间
2.攻击功能
这个攻击功能通过触发检测来进行控制,将僵尸物体的Collider组件设置为触发器,
然后再为每个植物添加一个触发器。这样僵尸和植物之间就能进行触发检测了。
这里会出现一个问题:植物无法被正常种植在地面上。
这是由于地面上也有触发器,植物上的刚体会将地面上的覆盖掉。
解决办法是:在植物处于禁用状态时将Box Collider 2D组件禁用掉,只有当植物处于启用状态时,再将Box Collider 2D组件启用。
要确保僵尸植物进行触发检测,为所有植物添加一个标签plant。
在脚本中调用出发检测的方法,当与其碰撞的物体的标签为plant时,就会执行Eat动画
要执行Eat动画,就要获取animation组件,
private Animator animator;
animator = GetComponent<Animator>();
然后通过OnTriggerEnter2D方法设置Isattacking参数为true,通过OnTriggerExit2D方法设置Isattacking参数为false。
private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.tag == "plant")
{
animator.SetBool("IsAttacking", true);
}
}
private void OnTriggerExit2D(Collider2D collision)
{
if(collision.tag == "plant")
{
animator.SetBool("IsAttacking", false);
}
}
当触发器与植物碰撞时开启攻击动画,当触发器与植物分离时停止攻击动画的功能。
效果如下:
此时会发现僵尸是在一边移动一边吃植物,因此还要为僵尸设置三个状态,在对应的状态播放对应的动画
enum ZombieState
{
Move,
Eat,
Die
}
ZombieState zombieState = ZombieState.Move;//设置默认状态
通过switch方法来对不同的状态进行判断,进而执行对应的方法。
void Update()
{
switch (zombieState)
{
case ZombieState.Move:
MoveUpdate();
break;
case ZombieState.Eat:
break;
case ZombieState.Die:
break;
default:
break;
}
}
最后效果如下:
文章来源:https://www.toymoban.com/news/detail-823162.html
当接触到植物时只会进行eat动画,当植物被移除时只会进行move动画。文章来源地址https://www.toymoban.com/news/detail-823162.html
到了这里,关于unity学习笔记----游戏练习06的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!