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

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


Unity愤怒的小球(2d)(关于碰撞,射线,刚体)的小练习_第1张图片

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

每个小方块都需要

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

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

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

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


Unity愤怒的小球(2d)(关于碰撞,射线,刚体)的小练习_第3张图片

上面的红色小球则需要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)(关于碰撞,射线,刚体)的小练习)