Unity3D游戏-愤怒的小鸟游戏源码和教程(一)

这篇博客介绍了Unity3D中制作愤怒的小鸟游戏的教程,涉及Spring Joint 2D实现弹性效果,CameraFollow的相机跟随与插值,RelativeVelocity检测碰撞伤害,以及Eva和EvaMum脚本的编写。同时讲解了GameManager如何管理游戏控制,并预告了后续教程。
摘要由CSDN通过智能技术生成

Unity愤怒的小鸟游戏教程


本文提供全流程,中文翻译。

Chinar坚持将简单的生活方式,带给世人!

(拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例)



AngryEva游戏效果:

这里写图片描述



1

Spring Joint 2D —— 弹簧关节



Spring Joint 2D : 是Unity提供的一个弹簧关节组件,可通过AddComponent添加

Unity会自动模拟弹簧的物理效果,来执行函数,使物体具备同样的弹簧效果


注意:Spring Joint 2D 组件,需要指定链接一个的Rigidbody组件:

这个物体是所需固定位置的物体(且物体上必须有Rididbody组件)

在Spring Joint 2D组件下的 Connected Rigid Body 属性中添加

举个栗子黑白88

这里写图片描述
这里写图片描述


2

CameraFollow —— 相机跟随,插值


Mathf.Clamp(posX, 0, 18)

数学函数.范围(限定目标,0,到 18之间)

举个栗子黑白88

/// <summary>
/// 相机在指定范围跟随
/// </summary>
private void CameraFollow()
{
    //记录Eva的横坐标
    float posX = transform.position.x;

    //相机当前位置 = 插值(当前相机位置,目标位置(Mathf.Clamp-限定范围:(限定posX,018之间))
    Camera.main.transform.position = Vector3.Lerp(Camera.main.transform.position, new Vector3(Mathf.Clamp(posX, 0, 18), Camera.main.transform.position.y, Camera.main.transform.position.z), SmoothFlo * Time.deltaTime);

}

这里写图片描述


3

RelativeVelocity —— 相对速度(- - 检测受伤的方式)


collision.relativeVelocity.magnitude > MaxSpeed

碰撞物体的.相对速度.大小 > 最大速度

举个栗子黑白88

/// <summary>
/// 触发检测,检测是否达到受伤条件
/// </summary>
/// <param name="collision"></param>
private void OnCollisionEnter2D(Collision2D collision)
{
    if (collision.gameObject.tag == "Eva") //需在外部设置标签,给Eva物体设置Tag为Eva
    {
        AudioPlay(EvaHurtClip);                         //播放受伤音效
        collision.transform.GetComponent<Eva>().Hurt(); //受伤
    }

    if (collision.relativeVelocity.magnitude > MaxSpeed) //如果相对速度.大小>最大速度
    {
        Dead(); //调用死亡消除方法
    }
    else if (collision.relativeVelocity.magnitude > MinSpeed && collision.relativeVelocity.magnitude < MaxSpeed) //相对速度在4-8之间
    {
        Render.sprite = HurtSprite; //更换图片,受伤
        AudioPlay(HurtClip);
    }
}

4

Eva —— 脚本


举个栗子黑白88

using UnityEngine;
using System.Collections;
using UnityEngine.EventSystems;


/// <summary>
/// Eva类脚本
/// </summary>
public class Eva : MonoBehaviour
{
    public                   float          MaxDis    = 1.8f;  //Eva可拖动最远距离
    public                   float          SmoothFlo = 3;     //平滑度
    [HideInInspector] public SpringJoint2D  EvaSP;             //弹簧链接组件
    protected                Rigidbody2D    EvaRg;             //刚体组件
    public                   LineRenderer   LeftLineRenderer;  //左线组件
    public                   Transform      LeftPos;           //弹弓左定点
    public                   LineRenderer   RightLineRenderer; //右线组件
    public                   Transform      RightPos;          //弹弓右定点
    protected                GameObject     EvaBoom;           //Eva爆炸特效
    protected                MyTrail        myTrail;           //定义拖尾脚本对象
    public                   AudioClip      SelectEvaClip;     //选中Eva音效
    public                   AudioClip      FlyEvaClip;        //Eva飞出音效
    protected                SpriteRenderer EvaRender;         //Eva渲染组件
    public                   Sprite         HurtSprite;        //受伤图
    [HideInInspector] public bool           isCanTrail;        //是否能拖拽
    [HideInInspector] public bool           isRelease;         //是否释放Eva
    private                  bool           isClick;           //是否点击
    private                  bool           isFly;             //是否正在飞


    private void Awake()
    {
        EvaSP     = GetComponent<SpringJoint2D>(); //获取组件
      
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值