人物射击第一时间想到的方法是往前发射一条射线
LineRenderer line;
Ray r;
Ray bullet;
RaycastHit hit;
line = this.gameObject.AddComponent<LineRenderer>();
line.SetVertexCount(2);
line.material = new Material(Shader.Find("Particles/Additive"));
line.SetColors(Color.red, Color.red);
line.SetWidth(0.05f, 0.05f);
初始化LineRenderer;
if(Input.GetMouseButtonDown(0))
{
Shooting();
}
鼠标左键按下射击
void Shooting()
{
r.origin = mcamera.transform.position;
r.direction = mcamera.transform.forward;//设定r射线
if(Physics.Raycast(r, out hit, 1000f))
{
GameObject gameObj = hit.collider.gameObject;
if (gameObj.tag == "zombie")
{
gameObj.transform.position += this.transform.forward * shootback_dis;
gameObj.SendMessage("ApplyDamage",30);
}
}//通过tag判断是否为敌人 如果射中的是敌人,调用其伤害函数,并将其击退
bullet.origin = transform.position;
bullet.direction = hit.point - transform.position;//子弹的弹道为人物到射中的物体
line.enabled = true;
line.SetPosition(0, transform.position);
line.SetPosition(1, hit.point); //绘制射线
sound.clip = weaponList[(int)weaponIndex.ak].sound_shoot; //播放枪声
this.sound.Play();
Invoke("detroyline", 0.05f);//消除弹道
}
通过第一个射线r得到屏幕中心射线触碰的点,再绘制射线从人物到射中点。
但只是一个取巧的方法,而且如果r没有碰到物体就无法绘制射线。