美文网首页
Unity愤怒的小球(2d)(关于碰撞,射线,刚体)的小练习

Unity愤怒的小球(2d)(关于碰撞,射线,刚体)的小练习

作者: Unity学习的路上 | 来源:发表于2016-12-28 23:06 被阅读0次

    游戏是要用小球撞击搭好的方块,将其击落到下面.

    先创建2D object Sprite将贴图放上去.然后搭成这样的形状.

    每个小方块都需要

    BoxCollider2D 和Rigidbody2D这两个组件 保证能完成被撞击和一些物理效果

    最下面的木板只需要一个BoxCollider2D就可以了

    我在这些的后面放置了一个空物体,它具有一个BoxCollider,使射线能够在碰到碰撞体时返回碰撞点的信息

    上面的红色小球则需要Rigidbody2D和CircleCollider2D,在小球上需要挂上一个脚本以下是脚本的代码

    using UnityEngine;

    using System;

    public class BallScript : MonoBehaviour

    {    

    Vector3 _startPos;

    Vector3 _endPos;

    Vector3 _secendPos;   

     Vector3 dir;      

    float speed = 5;    

    public void OnMouseDown()    

    {        

    _startPos = Input.mousePosition;          //记录鼠标按下时的位置  

    }   

     public void OnMouseUp()   

    {        

    _endPos = Input.mousePosition;        //记录鼠标弹起时的位置

    dir = _startPos - _endPos;        //获得小球射击方向 (向量的减法)

    transform.gameObject.GetComponent().AddForce(dir * speed);        //给小球一个力

    transform.gameObject.GetComponent().gravityScale = 0.5f;           //因为一开始小球的重力设为0,所以在这里时小球拥有重力

    }

    public void OnMouseDrag()//这个方法使鼠标在小球上按下时小球能够跟随鼠标

    {

    Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);//创建一条射线

    RaycastHit hit;

    if (Physics.Raycast(ray, out hit))//当碰到碰撞体时

    {

    _secendPos = hit.point;//保存碰撞点的坐标

    }

    _secendPos.z = 0;//使Z轴的坐标为0,因为其它物体的Z轴都为0,让小球能够成功撞到

    transform.position = _secendPos;//使小球的位置跟随鼠标

    }

    }

    以上就是自己写的小程序.能有更好的方法,望指正,万分感谢.

    相关文章

      网友评论

          本文标题:Unity愤怒的小球(2d)(关于碰撞,射线,刚体)的小练习

          本文链接:https://www.haomeiwen.com/subject/ztruvttx.html