• Unity实现摄像机向屏幕中间发射射线射击物体


    1.创建一个准星放在屏幕中间

    外部找个PNG透明图,拖到Unity文件夹,右上角改成精灵sprite2d

    2.添加到UI画布

     

    3.写脚本

    首先,我们需要引入一些 "工具",就像我们在玩游戏时要先下载游戏客户端一样。这里的 "工具" 就是一些命名空间,让我们可以方便地使用 System 和 UnityEngine 类。 🔧

    接下来,我们创建了一个名为 RayToScreenMid 的 "小玩具"。这个小玩具有一个重要的 "成员"(在程序中,我们称之为变量),那就是 MianCamera。MianCamera 就是我们的 "摄像头",用来观察游戏世界。我们在玩具的 "启动" 阶段(Start 方法)计算了一下屏幕的 "中心位置",并把结果存放在 ScreenMidPos 变量里。 📝

    当我们 "玩"(Update 方法)这个小玩具时,如果鼠标左键被按下,RayShot 方法就会被调用。RayShot 方法就像我们在玩游戏时按下的 "射击" 键,它会从 MianCamera(摄像头)出发,向屏幕中间发射一条 "射线"(Ray)。 🎯

    然后,我们使用 Physics.Raycast 方法来检查这条射线是否与游戏中的其他物体 "相撞" 了。如果相撞,我们会检查这个物体是不是 "地形" 或者 "角色",如果不是,我们就会 "消灭"(Destroy)这个物体。 🚀

    此外,我们还会在游戏中画出一条从 MianCamera(摄像头)到屏幕中间位置的红色射线。这样,我们就可以清楚地看到这条射线,就像我们在玩游戏时看到的 "血条" 一样。 🎭

    1. using System;
    2. using System.Collections;
    3. using System.Collections.Generic;
    4. using UnityEngine;
    5. public class RayToScreenMid : MonoBehaviour
    6. {
    7. // 从视角摄像机向屏幕中间发射射线
    8. Camera MianCamera; // 这是一个摄像机对象
    9. Vector3 ScreenMidPos; // 这是屏幕中央的点的坐标
    10. private void Start()
    11. {
    12. ScreenMidPos = new Vector3(Screen.width / 2, Screen.height / 2, 0); // 初始化屏幕中央的点的坐标
    13. }
    14. void Update()
    15. {
    16. if (Input.GetMouseButtonDown(0))
    17. {
    18. RayShot(); // 如果鼠标左键按下,则发射一条射线
    19. }
    20. }
    21. private void RayShot()
    22. {
    23. //从摄像机出发向屏幕中间发射射线!
    24. Ray OneShotRay = Camera.main.ScreenPointToRay(ScreenMidPos); // 以屏幕中央点为原点,发射射线
    25. RaycastHit OnEnemy;
    26. if (Physics.Raycast(OneShotRay,out OnEnemy)) // 如果射线碰到了物体
    27. {
    28. Debug.Log("射线发射成功");
    29. if (OnEnemy.transform.name!= "Terrain"&& OnEnemy.transform.name != "Role") // 如果碰到的不是地形和角色
    30. {
    31. Destroy(OnEnemy.transform.gameObject); // 销毁碰撞到的物体
    32. Debug.Log("销毁对方");
    33. if (ScreenMidPos != null)
    34. {
    35. Debug.DrawLine(Camera.main.transform.position, ScreenMidPos, Color.red, 10000f); // 画一条从摄像机出发,到屏幕中央点的射线
    36. }
    37. }
    38. }
    39. }//end class

    这个脚本挂载到哪里都可以,为了符合面向对象,请挂在摄像机或者主角身上

    这个脚本是从摄像机往电脑屏幕中间发射射线!前面的UI仅仅只是一个标识!

  • 相关阅读:
    Vue的路由
    什么是杠杠炒股平台
    对比 elasticsearch 和 mysql
    python+nodejs+php+springboot+vue 校园安全车辆人员出入安全管理系统
    Vue3学习(二十)- 富文本插件wangeditor的使用
    新时代高效记账:自动化智能如何进行财务管理
    【CAPL】XMLTestModule XML文件模板
    重新定义容器化 Serverless 应用的数据访问
    alipay sofa-ark-1.1.5 各种类加载器 & 优先级
    vue + openlayer 按路径移动
  • 原文地址:https://blog.csdn.net/leoysq/article/details/133832731