项目实战-愤怒的小鸟
动画
- 搭建场景
- 表情动画
- 在天空飞翔的小鸟
- 天空和地面的两只鸟做不同的动画。地面的小鸟跳上弹弓。
发射小鸟
- 判断是否选中了小鸟。
- 拖动小鸟。
- 容错:当拖动距离非常小时忽略拖动。
- 计算发射向量。
- 限定打动的最大距离。
- 添加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;
}
}
}