Unity - A计划(永久有效期) 扫二维码继续学习 二维码时效为半小时

(197评价)
价格: 3987.00元
3D游戏如何朝鼠标或手指触屏点准确发射子弹?包含手枪的转向,代码尽可能简练
LCCSK发起了问答2020-06-21
9
回复
315
浏览

老师,我子弹是发射出来了,但是方向不太对,希望老师可以用射线或其它方法实现,尽可能准确

所有回复
  • 老师_Trigger 2020-06-21

    同学你好,老师不是很清楚同学的意思,同学意思是点击屏幕某一个地方,就会从这个位置在世界坐标里实例化子弹并飞向前方吗?那么可以从屏幕坐标转世界坐标然后生成子弹

    还有-5条回复,点击查看
    你还没有登录,请先登录注册
  • LCCSK 2020-06-21

    点击屏幕某一个地方,从游戏主角的手枪中朝世界方位的点击点射出子弹,手枪和camera都是游戏主角的子物体

    还有-5条回复,点击查看
    你还没有登录,请先登录注册
  • 老师_Trigger 2020-06-21

    获取到位置之后,让子弹朝向对应的位置移动就可以了,位置的获取可以参考一下:

    https://blog.csdn.net/weixin_41727741/article/details/79304062

    https://blog.csdn.net/wkkingsam/article/details/52371547

    还有-5条回复,点击查看
    你还没有登录,请先登录注册
  • LCCSK 2020-06-22

    知道了,谢谢!yes

    还有-5条回复,点击查看
    你还没有登录,请先登录注册
  • LCCSK 2020-06-22

    老师,我是游戏主角位于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);//解除父子关系,确保之后实例化的子弹不受影响

    }

    我之所以使用广播消息是因为我在测试中发现如果在枪脚本中设置子弹移动会比较卡顿,希望老师也帮我看看,怎么搞这段代码比较好,谢谢老师!

    还有-5条回复,点击查看
    你还没有登录,请先登录注册
  • 老师_Trigger 2020-06-23

    把子弹也设置看向目标位置,如果是物理系统的移动需要多调试,试试这个力的值,这个可以参考一下云端战纪里弓箭手攻击的实现

    还有-5条回复,点击查看
    你还没有登录,请先登录注册
  • LCCSK 2020-06-23

    好的,知道了。谢谢老师的指导!yes

    还有-5条回复,点击查看
    你还没有登录,请先登录注册
  • LCCSK 2020-06-25

    老师,按照您的方法主角静止时发射子弹的问题解决了。我还为主角编写了一个弹跳脚本,如何保证主角在弹跳时射击也能准确的朝点击点射击?希望老师指导一下,谢谢了!

    还有-5条回复,点击查看
    你还没有登录,请先登录注册
  • LCCSK 2020-06-26

    经过老师的指点和我的反复测试,终于矫正了原来不正确的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);//得到子弹朝向目标的向量

    在这里分享给大家,同时也谢谢老师的指点!yes

    还有-5条回复,点击查看
    你还没有登录,请先登录注册
发表回复
你还没有登录,请先 登录或 注册!