Unity愤怒的小球(2d)(关于碰撞,射线,刚体)的小练习
游戏是要用小球撞击搭好的方块,将其击落到下面.
先创建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;//使小球的位置跟随鼠标
}
}
以上就是自己写的小程序.能有更好的方法,望指正,万分感谢.