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

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

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

2.添加到UI画布

3.写脚本

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

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

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

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

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

cs 复制代码
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class RayToScreenMid : MonoBehaviour
{
    // 从视角摄像机向屏幕中间发射射线

    Camera MianCamera;                // 这是一个摄像机对象
    Vector3 ScreenMidPos;             // 这是屏幕中央的点的坐标

    private void Start()
    {
        ScreenMidPos = new Vector3(Screen.width / 2, Screen.height / 2, 0);  // 初始化屏幕中央的点的坐标
    }
    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            RayShot();              // 如果鼠标左键按下,则发射一条射线
        }
    }

    private void RayShot()
    {
        //从摄像机出发向屏幕中间发射射线!    
        Ray OneShotRay = Camera.main.ScreenPointToRay(ScreenMidPos);          // 以屏幕中央点为原点,发射射线
        RaycastHit OnEnemy;
        if (Physics.Raycast(OneShotRay,out OnEnemy))                          // 如果射线碰到了物体
        {
            Debug.Log("射线发射成功");
            if (OnEnemy.transform.name!= "Terrain"&& OnEnemy.transform.name != "Role")  // 如果碰到的不是地形和角色
            {
                Destroy(OnEnemy.transform.gameObject);                        // 销毁碰撞到的物体
                Debug.Log("销毁对方");
                if (ScreenMidPos != null)
                {
                    Debug.DrawLine(Camera.main.transform.position, ScreenMidPos, Color.red, 10000f);    // 画一条从摄像机出发,到屏幕中央点的射线
                }
               
        }
    }
 
}//end class

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

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

相关推荐
mxwin1 天前
unity shader中 ddx ddy是什么
unity·游戏引擎·shader
郝学胜-神的一滴2 天前
[简化版 GAMES 101] 计算机图形学 08:三角形光栅化上
c++·unity·游戏引擎·godot·图形渲染·opengl·unreal
nnsix2 天前
Unity ILRuntime 笔记
unity·游戏引擎
nnsix2 天前
Unity API 兼容的 .NET Standard 2.1 和 .NET Framework 区别
unity·游戏引擎·.net
mxwin2 天前
Unity Shader 制作半透明物体 使用多Pass提前写入深度的方式 避免穿模
unity·游戏引擎
nnsix2 天前
Unity HybridCLR 笔记
笔记·unity·游戏引擎
nnsix2 天前
Unity Addressables 笔记
unity·游戏引擎
RReality2 天前
【Unity Shader URP】视差贴图 实战教程
ui·平面·unity·游戏引擎·图形渲染·贴图
小清兔2 天前
Addressable的设置打包流程
笔记·游戏·unity·c#
3D霸霸2 天前
Sourcetree 拉取新工程
数据仓库·unity