项目实战-愤怒的小鸟

动画

  • 搭建场景
  • 表情动画
  • 在天空飞翔的小鸟
  • 天空和地面的两只鸟做不同的动画。地面的小鸟跳上弹弓。

发射小鸟

  • 判断是否选中了小鸟。
  • 拖动小鸟。
  • 容错:当拖动距离非常小时忽略拖动。
  • 计算发射向量。
  • 限定打动的最大距离。
  • 添加2D刚体和碰撞体。
  • 给刚体加力把小鸟发射出去。
  • 添加落地时的弹性。

Shoot.cs

using UnityEngine;
using System.Collections;

public class Shoot : MonoBehaviour {

    Vector2 start;
    Transform shootPoint;
    bool selected = false;

    // Use this for initialization
    void Start () {
        shootPoint = GameObject.Find ("ShootPoint").transform;
    }

    // Update is called once per frame
    void Update () {
        // 计算世界坐标系中鼠标的位置
        // 将鼠标位置的屏幕坐标转为世界坐标
        Vector3 mouse = Camera.main.ScreenToWorldPoint(Input.mousePosition);
        // 忽略z轴
        mouse.z = 0;

        // 判断是否选中了小鸟
        if (Input.GetMouseButtonDown (0)) {
            Vector3 delta = shootPoint.position - mouse;
            if (delta.magnitude < 0.4f) {
                // Selected
                selected = true;
            }
        }

        // 拖动小鸟
        if (selected && Input.GetMouseButton (0)) {
            // 计算发射点到鼠标的偏移向量
            Vector3 delta = mouse - shootPoint.position;
            // 限定最大偏移
            if (delta.magnitude > 1.2f)
                delta = delta.normalized * 1.2f;

            // 小鸟的位置设置为发射点位置+偏移向量
            transform.position = shootPoint.position + delta;
        }

        // 发射小鸟
        if (selected && Input.GetMouseButtonUp (0)) {
            // 计算发射向量
            Vector3 delta = shootPoint.position - transform.position;

            // 给刚体加力把小鸟发射出去
            rigidbody2D.AddForce (delta * 300f);
//            rigidbody2D.velocity = delta * 2;
            // 恢复重力
            rigidbody2D.gravityScale = 1;

            // 释放小鸟选中
            selected = false;
        }


    }

}