老师,我子弹是发射出来了,但是方向不太对,希望老师可以用射线或其它方法实现,尽可能准确
同学你好,老师不是很清楚同学的意思,同学意思是点击屏幕某一个地方,就会从这个位置在世界坐标里实例化子弹并飞向前方吗?那么可以从屏幕坐标转世界坐标然后生成子弹
老师,我是游戏主角位于camera正前方可见的,我按照您的方法试了一遍,不知道为什么出现了方位不是特别准,子弹可以向身后射击的bug,以下是部分相关代码,希望老师帮我解答一下,谢谢了
<枪脚本>:
void Update(){
if (Input.GetMouseButton(0) )
{
Vector3 gunPos = Camera.main.WorldToScreenPoint(transform.position);
Vector3 mousePos = new Vector3(Input.mousePosition.x,Input.mousePosition.y,gunPos.z);
GunTarget = Camera.main.ScreenToWorldPoint(mousePos);//得到子弹朝向的目标向量
transform.LookAt(GunTarget);//枪转向
GameObject missileClone;
missileClone = Instantiate(LaserBullet, transform.position, Quaternion.identity);//实例化子弹
missileClone.transform.SetParent(this.transform);//将子弹的父物体设为枪
this.transform.gameObject.BroadcastMessage("SendTarget",GunTarget);//向子弹物体发送命令调用SendTarget函数
}
}
<子弹脚本>:
void Update()
{
this.transform.GetComponent<Rigidbody>().velocity+= BulletTarget.normalized * Time.deltaTime * LBulletSpeed;//子弹移动
}
void SendTarget(Vector3 target){
BulletTarget = target;//设置子弹移动的方向向量
this.transform.SetParent(null);//解除父子关系,确保之后实例化的子弹不受影响
}
我之所以使用广播消息是因为我在测试中发现如果在枪脚本中设置子弹移动会比较卡顿,希望老师也帮我看看,怎么搞这段代码比较好,谢谢老师!
经过老师的指点和我的反复测试,终于矫正了原来不正确的Z轴值,使得主角射击准心正确。需要更改的代码如下:
Vector3 clickPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
Vector3 mousePos = new Vector3(Input.mousePosition.x,Input.mousePosition.y,-clickPos.z);
GunTarget = Camera.main.ScreenToWorldPoint(mousePos);//得到子弹朝向目标的向量
在这里分享给大家,同时也谢谢老师的指点!