Unity3d控制鼠标光标坐标位置案例

最近在做一个小游戏的时候,遇到一个问题,就是Unity3d游戏引擎如何控制鼠标移动,以下分享一个整蛊案例,理清一种方法。

1:思路原理理清

(windows系统中可用)该方法使用System.Runtime.InteropServices该库user32.dll中的SetCursorPos函数,改变鼠标光标的坐标位置,该坐标的坐标单位为屏幕像素,如果需要变成游戏世界坐标,还需要转换一下。(如:将游戏世界坐标转成屏幕坐标,再把屏幕坐标设置进SetCursorPos函数中,进而改变鼠标光标位置)

实现步骤:

1.1导入相关库

using System.Runtime.InteropServices;

1.2设置SetCursorPos函数

//以下方法坐标单位为int类型  
 [DllImport("user32.dll")]
   public static extern int SetCursorPos(int x, int y);  //固定写法格式

   public void SetTest()  //自定义SetTest函数中调用SetCursorPos函数
   {
       int x = Random.Range(10, 600);
       int y = Random.Range(10, 600);
       SetCursorPos(x, y);
   }

//以下方法坐标单位为float类型
/*

 [DllImport("user32.dll")]
   public static extern float SetCursorPos(float x, float y); //固定写法格式

   public void SetTest()  //自定义SetTest函数中调用SetCursorPos函数
   {
       int float = Random.Range(10, 600);
       int float = Random.Range(10, 600);
       SetCursorPos(x, y);
   }

*/

2:整蛊案例

2.1游戏思路逻辑

游戏开始——鼠标光标乱动,干扰用户正常使用——按Esc键,干扰取消——按P键,干扰继续

2.2代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Runtime.InteropServices;

public class MoveTest : MonoBehaviour
{

    bool IsWorking = true;   //该布尔类型变量判断是否继续干扰

    void Start()
    {
        IsWorking = true;  //游戏开始,默认是
    }

    
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Escape))
        {
            IsWorking = false;                  //按Esc键,取消干扰
        }
        if (Input.GetKeyDown(KeyCode.P))
        {
            IsWorking = true;                   //按P键,干扰继续
        }
        if (IsWorking==true)
        {
            SetTest();
        }
        
        
    }

    [DllImport("user32.dll")]
    public static extern int SetCursorPos(int x, int y);

    public void SetTest()
    {
        int x = Random.Range(10, 600);  //鼠标x坐标为随机数
        int y = Random.Range(10, 600);   //鼠标y坐标为随机数
        SetCursorPos(x, y);
        
    }

    
}

注意:以上的MoveTest.cs脚本文件,需要与游戏场景中的物体绑定

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值