## 子弹如何朝向屏幕准星发射 ##
我在做一款FPS射击类游戏时,需要子弹的发射方向朝向准星的方向,在网上找了好久没有发现有价值的内容,都是寥寥几句。
在这里介绍一下我的实现方法。
首先:子弹要作为枪的子节点,枪作为摄像机的子节点,摄像机作为人物的子节点,这样在人物旋转的时候子弹发射的前方永远和人物的前方保持一致。
其次:制作设计准星,在网上找一个准星texture,导入Unity中,创建一个ImageUI空间,选择Sprite为准星的贴图,在调节这个UI控件的位置,处于屏幕的正中心就好。
最后就是代码的编写了直接上图:
using UnityEngine;
using System.Collections;
public class Shoots : MonoBehaviour
{
void Update()
{
Shoot();
}
/// <summary>
/// 发射子弹
/// </summary>
private void Shoot()
{
if (Input.GetKey(KeyCode.Mouse0))//按下鼠标左键
{
timer += Time.deltaTime;//计时器计时
if (timer > 1f / rate)//如果计时大于子弹的发射速率(rate每秒几颗子弹)
{
//通过摄像机在屏幕中心点位置发射一条射线
Ray ray = m_Camera.ScreenPointToRay(new Vector3(Screen.width/2, Screen.height / 2, 0));
if (Physics.Raycast(ray, out hitInfo))//如果射线碰撞到物体
{
targetPoint = hitInfo.point;//记录碰撞的目标点
}
else//射线没有碰撞到目标点
{
//将目标点设置在摄像机自身前方1000米处
targetPoint = m_Camera.transform.forward * 1000;
}
//在枪口的位置实例化一颗子弹,按子弹发射点出的旋转,进行旋转
bullet = Instantiate(bulletPrefab, bulletPoint.position, bulletPoint.rotation) as GameObject;
bullet.transform.LookAt(targetPoint);//子弹的Z轴朝向目标
Destroy(bullet, 10);//在10S后销毁子弹
timer = 0;//时间清零
}
}
}
}
最后效果图:
博主链接:http://my.csdn.net/baidu_39447417