Unity3D开发飞盘射击案例之角色控制(十六)

本节要点

1.鼠标控制手臂朝向

1.使用射线控制手臂朝向

主摄像机发射射线,与场景中的物体碰撞,获取一个碰撞点,然后手臂“朝向”

这个点。


Transform.LookAt(Vector3):朝向(面向)世界中的一个点。


2.场景背景模型添加碰撞器组件

添加 Mesh Collider 组件,使用简模进行碰撞检测。

简模模型的作用:降低物理运算资源消耗,提高游戏性能;


Vertices(verts):顶点个数,Mesh 网格是由顶点组成面,面组成体。

顶点个数越少,计算量越小。



3.控制手臂的旋转轴

手臂应该是以肩关节为轴进行旋转。

和 Unity 初级课程上部《疯狂教室》案例中旋转门的处理方式一样,新建父物

体,通过父物体控制子物体。


4.Debug 绘制测试线

枪口到碰撞点直接绘制一根测试线。




Debug.DrawLine(Vector3, Vector3, Color):绘制线

和 Debug.DrawRay()用法一样。




Transform.FindChild(string):在当前物体的子物体中查找游戏物体。

2.枪口添加激光特效

1.枪口位置添加 LineRenderer 组件

在枪口这个空游戏物体上添加 LineRenderer 组件,设置相关属性。



LineRenderer.SetPosition(int,Vector3):设置线的位置。

int:位置的索引值;

Vector3:该位置所在的坐标值;


2.从其他项目中导出资源包

选中 Project 面板中相应的资源,然后鼠标右键-->Export Package...


关键代码

Weapon

public class Weapon : MonoBehaviour {

    //手臂指向鼠标点击的位置
    //声明一个手臂位置的变量;
    private Transform m_transform;


    //利用射线去检测
    //声明一个射线的变量 声明一个存贮射线信息存贮的变量
    private Ray ray;
    private RaycastHit hit;


    //定义一个枪口位置的变量;
    private Transform m_Point;




    //设置特效 线渲染器属性组件 变量

   private LineRenderer m_LineRenderer;
    
    void Start () {
        //将Transform 位置赋值
        m_transform=gameObject.GetComponent();

        //枪口位置赋值;
      //  m_Point = gameObject.transform.FindChild("Point").GetComponent(); 
        m_Point = m_transform.FindChild("Point");


        //特效渲染器组件位置赋值;关键语法  利用枪口的位置设置; 先将查找到的组件 linerenderer 存贮起来

      m_LineRenderer = m_Point.gameObject.GetComponent();




    }
    
    
    void Update () {
    
        //使手臂朝向鼠标点击的位置;

        //接收射线的变量  利用摄像机获取射线并赋值;
        ray = Camera.main.ScreenPointToRay(Input.mousePosition);//从屏幕发射到鼠标点击的位置的射线;
        //进行物理检测 
        if (Physics.Raycast(ray, out hit))
        {
            //控制手臂的方向
            //检测成功后调用 游戏对象位置的  朝向 方法 lookat
           m_transform.LookAt(hit.point);//参数是碰撞点


            //检查是否有碰撞;
            //Debug.Log("Collider");
            //场景中没有任何碰撞体 或者打开场景的属性检查;所以手臂不会移动

            //因此 要添加网格碰撞器 选中 游戏物体 add component  加组件 mesh Collider; 
            //但是默认的有4千个顶点,ui设计的只有2千顶点的简模 所以用ui的添加碰撞器



            //成功测试后,发现手的旋转关节不对,就是手是手臂的中心点 可以定义一个父类来控制它 不要以为手臂的中心点来控制
            //建立一个父类,把之前的代码组件移除  设置好父类坐标,将脚本挂载到父类组件去


            //绘制枪口发射线  
           //与绘制射线方法相同 Debug.DrawRay();
          // Debug.DrawLine(m_transform.position,hit.point,Color.red);//参数1: 起始位置 参数2:射线碰撞的位置 参数3:颜色;


        //射线出发的位置不对 所以定义一个空物体存贮枪口的位置 transform
            //怎么查找父类下的组件呢?
           //gameObject.transform.Find("Point");
            //如果游戏对象下面有N个叫Point的组件呢;所以我们只要查找父类下的组件名称即可;
          // m_Point = gameObject.transform.FindChild("Point").GetComponent(); // 这是赋值过程,写到Start方法即可;

            //再次绘制射线;
           Debug.DrawLine(m_Point.position, hit.point, Color.red);


            //绘制特效线的位置;注意关键函数 
          m_LineRenderer.SetPosition(0,m_Point.position);//参数1:特效起始位置的下标 参数2:特效起始位置下标的位置 (枪口位置)
         m_LineRenderer.SetPosition(1,hit.point);//参数1:特效结束位置的下标 参数2:特效结束位置下标的位置 (射线碰撞点)




        }



    }
}


小结

Unity3D开发飞盘射击案例之角色控制(十六)_第1张图片
Unity API.png

你可能感兴趣的:(Unity3D开发飞盘射击案例之角色控制(十六))