要实现的目标
实现个性化的鼠标
实现弹弓
选择小鸟、拉升弹弓、发射小鸟
弹弓橡皮筋
声音
1、实现个性化鼠标
效果
2、添加弹弓
建立两个材质
创建一个空GameObject 把两个shoot拖进来统一管理
3、建一个空GameObject 弹弓slingShot
3.1把投掷中心移动到弹弓发射中心,就是小鸟发射架
3.2创建一个Sphere碰撞体
调整好radius=0.2大小
4、拉伸弹弓、发射小鸟代码
using UnityEngine; using System.Collections; public class slingShot : MonoBehaviour { /// <summary> /// 小鸟 /// </summary> public GameObject bird; /// <summary> /// 弹弓拉伸的声音 /// </summary> public AudioClip slingShotSound; /// <summary> /// 飞行声音 /// </summary> public AudioClip flyingSound; /// <summary> /// 弹弓橡皮筋颜色 /// </summary> public Color myColor; /// <summary> /// 是否按下鼠标 /// </summary> private bool isClick = false; /// <summary> /// 发射出去的小鸟 /// </summary> private GameObject shot; /// <summary> /// 拉伸弹弓小鸟的位置 /// </summary> private Vector3 lastKnowPosition; private Vector3 direction; /// <summary> /// [ˈmægnɪtju:d] n. 巨大,广大;重大,重要;量级;(地震)级数 /// </summary> private float magnitude; /// <summary> /// 小鸟运动的轨迹线 /// </summary> public static bool isDrawing = false; /// <summary> /// 小鸟发出去后下一个小鸟是否上弹弓 /// </summary> public static bool isJump = false; /// <summary> /// 飞出去的小鸟 /// </summary> public static GameObject myBird; /// <summary> /// 发射的是那只小鸟 /// </summary> public static int birdNumber; /// <summary> /// 画弹弓的橡皮筋 /// </summary> private LineRenderer lineRenderer; private int index = 0; private Vector3 position; // Use this for initialization void Start() { birdNumber = -1; lineRenderer = gameObject.AddComponent<LineRenderer>();//添加对象 画两条线 lineRenderer.material.color = myColor; lineRenderer.SetWidth(0.1f, 0.1f);//设置宽度 lineRenderer.SetVertexCount(3);//橡皮筋两个点+小鸟一个点 ['vɜ:teks] n. 最高点;顶点;<数>(三角形、圆锥体等与底相对的)顶;(三角形、多边形等的)角的顶点 } // Update is called once per frame void Update() { bool isMouseDown = Input.GetMouseButton(0); if (!isClick)//拖放小鸟 没有点击 { if (isMouseDown) { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);//把鼠标的点定义一个射线 RaycastHit hit;//光线投射碰撞 if (collider.Raycast(ray, out hit, 10.0f))//光线投射 选择小鸟 [distance光线的长度。] { isClick = true; if (birdNumber <= 1) { //Instantiate()克隆原始物体,位置设置在position,设置旋转在rotation,返回的是克隆后的物体 //Quaternion.identity:返回恒等式旋转(只读)。这个四元数对于“无旋转”:这个物体完全对齐于世界或父轴。 shot = Instantiate(bird, transform.position, Quaternion.identity) as GameObject;//动态的生成被发射的小鸟 [ɪns'tænʃɪeɪt] 实例化 //Physics.IgnoreCollision 忽略碰撞:使碰撞体1和碰撞体2的碰撞侦测无效。 Physics.IgnoreCollision(shot.collider, GetComponent<Collider>()); //忽略小鸟碰撞体 shot.rigidbody.isKinematic = true;//运动属性 myBird = GameObject.FindWithTag("bird0");//拉伸位置的Bird myBird.active = false;//隐藏 } } } } else if (isMouseDown) { var lastDirection = direction; lastKnowPosition = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, 0.8f)); direction = transform.position - lastKnowPosition; direction.Normalize();//规范化当规范化时,一个向量保持相同的方向,但它的长度为1.0。 magnitude = Mathf.Min(Vector3.Distance(transform.position, lastKnowPosition), 2.5f);//最小值:橡皮筋拉伸距离;返回两个或更多值中最小的值。 shot.transform.position = transform.position + direction * (-magnitude); lineRenderer.enabled = true;//LineRenderer :线渲染器 如果启用,使被渲染的物体可见 //三点:小鸟+弹弓两点 lineRenderer.SetPosition(0, new Vector3(-5.1f, 2.2f, 0.1f));//弹弓橡皮筋点 lineRenderer.SetPosition(1, shot.transform.position);//小鸟点 lineRenderer.SetPosition(2, new Vector3(-5.6f, 1.2f, -0.1f));//弹弓橡皮筋点 if (direction != lastDirection) { if (!audio.isPlaying) { PlaySound(slingShotSound); } } } else//发射 { birdNumber++; if (birdNumber<=2) { GameObject birdObject2 = GameObject.FindWithTag("birdClone");//实例化的小鸟也就是飞出去的小鸟 if (birdObject2!=null) { Destroy(birdObject2, 1.0f);////加载物体1秒后销毁游戏物体 } lineRenderer.enabled = false;//不显示橡皮筋了 shot.collider.isTrigger = false; shot.rigidbody.isKinematic = false;// 是否动力学:[ˌkɪnɪ'mætɪk] adj. 运动学的,运动学上的 shot.rigidbody.velocity = direction * 7.0f * magnitude;//速度 shot.rigidbody.useGravity = true; if (audio.isPlaying) { audio.Stop(); } PlaySound(flyingSound); shot.tag = "birdClone"; isClick = false; } } } /// <summary> /// 小鸟拉伸发生声音 /// </summary> /// <param name="soundName"></param> /// <returns></returns> public void PlaySound(AudioClip soundName) { if (!audio.isPlaying) { audio.clip = soundName; audio.Play(); new WaitForSeconds(audio.clip.length); } } }
5、最终效果