**
基本流程
**
0、实现一个小游戏,每次点击都会发射出一个子弹,对砖块进行打击,同时可以使用方向键控制镜头移动。
1、创建场景:基本都是unity内部的拖拖拽拽,砖块和子弹需要建立预制,当预制发生变动时,所有的实例都会同步。
2、创建脚本:
① 脚本可以理解为一个组件,需要注意脚本需要挂在正确的物体上。此处脚本需要挂在在camera上。
② 在脚本中定义一个GameObject变量,并在工程中将prefab赋值。
3、子弹射击脚本:主要用来实现子弹的射击。
① 检测相关输入:
if(Input.GetMouseButtonDown(0))
② 实例化生成一个子弹:
GameObject b = GameObject.Instantiate(bullet, transform.position, transform.rotation);
③ 给子弹一个射击的速度:
Rigidbody rgd = b.GetComponent<Rigidbody>();
rgd.velocity = transform.forward *speed;
//Rigidbody的velocity和AddForce的区别。前者直接赋予速度,后者模拟受力。
4、相机位移脚本:
① 检测相关输入:
float h = Input.GetAxisRaw("Hirizontal");
float v = Input.getAxisRaw("Vertical");
② 将这个输入量转化成相机的位移:
transform.Translate(new Vector(h,v,0) * Time.deltaTime *speed);
变化1
**
0、原例中子弹前行的方向始终是camera的forward方向,将子弹的前行路线重新定义为相机到鼠标点击的位置。
1、需要在射击的脚本中进行修改:
//获取从相机到书标点击位置的射线
Ray ray = Camera.main.ScreenPointToRay(Input.mousePostion);
//子弹前进的方向为射线的方向
rgd.velocity = ray.direction * speed;
变化2
**
0、在变化1的基础上,在场景中创建一个枪口实体,每次点击,子弹均从枪口射出,并射向鼠标所指的方向。
1、首先创建枪口,并将shoot代码从相机上移除,挂在在枪口上。移动脚本仍然控制相机,所以保持不变。
2、朋友提供了一个方法,通过射线碰撞检测的方法,先得到鼠标的触碰点,然后再计算从枪口发射到触碰点的射线。首先需要添加一个Plane面,将其和砖块的正面对齐,代码如下:
Ray ray = Camera.main.ScreenPointToRay(Input.mouseposition);
RaycastHit hit;
//射线的碰撞检测,射线在无穷大(Mathf.Infinity)的方向上,第一个触碰到的点,将其信息保存到hit中
if(Physics.Raycast(ray, out hit, Mathf.Infinity)) {
//Debug.DrawLine(ray.origin, hit.point, Color.red, 2);
GameObject b = GameObject.Instantiate(bullet, transform.position, transform.rotation);
Vector3 tff = hit.point - transform.position;
Rigidbody rgd = b.GetComponent<Rigidbody>();
rgd.AddForce(300 * tff);
}
算是知识点吧
**
1、在Edit->Project Settings->Input中可以查询到各种Axes参数X,获取输入的方式大致为:Input.getAxis(“X”)
2、Input.getAxisRaw(“”)