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

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

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

2.添加到UI画布

 

3.写脚本

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

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

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

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

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

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仅仅只是一个标识!

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Unity3d青子

难题的解决使成本节约,求打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值