从摄像机发射一个Ray(射线)销毁碰到的物体

 

//定义一个Ray的类用来保存射线到终点位置的信息

private Ray ray;

//定义一个Hit的类 用来保存Ray射线碰到的物体的信息

private RaycastHit hit;

//射线的位置是从主摄像机发射一个射线到终点的位置(终点的位置是鼠标点击位置)

 ray = Camera.main.ScreenPointToRay(Input.mousePosition);

     //如果射线Ray到物体Hit的位置小于等于0.1F那么返回tute

   if (Physics.Raycast(ray,out hit,0.1f))  //还有个Int的返回值 layerMask没懂起

       {

 

            //执行销毁物体Hit

            GGameObject.Destroy(hit.collider.gameObject);

        }

2018.1.15

---------------------------------------------------------------------------------------------------------------------------------

在上面的基础上把发射的Ray(射线)实例化出来变成一个球?子弹

还是先生成一些正确的cude来当砖块

//用来保存实例化的物体cude

public Gameobjeck cude;

//用XYZ来设置cude生成长高宽

privat int x=10;

privat int y=5;;

privat int z=1;

void Zkuai()

{

//用for循环来生成cude的位置  

for (int i = 0; i < x; i++)
        {
            for (int j = 0; j < y; j++)
            {
                for (int k = 0; k < z; k++)
                {

           //用go来保存生成cude的信息   为什么i-5是因为X=i ,X减去二分之1的X 这个是让物体居中           

          Gameobjeck go =  Gameobjeck.Instantiate(Brick, new Vector3(i - 5, j, k), Quaternion.identity);

//用GetComponent<>()方法来访问go上面的MeshRenderer这个管理色彩贴图的父类中的子类material中color色彩并重新定义一个color颜色是随机

 go.GetComponent<MeshRenderer>().material.color= new Color(Random.Range(0f,1f), Random.Range(0f, 1f), Random.Range(0f, 1f));
                }

}

---------------------------------------------------------------------------------------------------------------------------------

砖块cude生成完成了在来把RAY实例化

//定义一个TransForm 来保存摄像机的位置

private TramsForm m_TramsForm;

//定义一个Gameobjeck 的类来保存要实例化的物体球

public Gameobjeck zidan;

//定义一个Ray的类用来保存射线到终点位置的信息

private Ray ray;

//定义一个Hit的类 用来保存Ray射线碰到的物体的信息

private RaycastHit hit;

//在 Start中声明m_TramsFrom

void Start ()
{
   m_Transform = gameObject.GetComponent<Transform>();
}

//在封装个发射球和实例化

 

   /// <summary>
    /// 子弹的生成和发射
    /// </summary>

void ZiDan()

{

//先来做出射线Ray从主摄像机发出到物体的终点位置用刚刚定义的ray来保存

ray= Camera.mian.ScreenPointToRay(Input.mousePosition);

//用if来判断ray是否碰到物体用hit来保存物体信息,如果返回为turn那么接着执行下面

  if (Physics.Raycast(ray,out hit))
        {   //用go来保存实例化出来的zidan他的位置和不旋转
          GameObject go =  GameObject.Instantiate(zidan, m_Transform.position, Quaternion.identity);
      //定义一个Vector3 类的mub 来保存起点到终点的距离
            Vector3 mub = hit.transform.position - m_Transform.position;
         //用Debug.DrawRay方法绘制一条线开始位置是摄像机结束是mub颜色用color.来定义
            Debug.DrawRay(m_Transform.position,mub,Color.red);
        // 把用GetComponent<>()方法查询到go身上的Rigidbody组件子在用AddForce(mub*100);方法给他一个力度;
            go.GetComponent<Rigidbody>().AddForce(mub*100);
        }

}

void Update () {

//鼠标点击就发射出去
   if (Input.GetMouseButtonDown(0))
   {
       ZiDan();
   }

2018.1.17.17.33

 --------------------------------------------------------------------------------------------------------------------------------

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值