手机是如何进入元宇宙的?(结合Android和UE4技术)

最近元宇宙概念大热,作为紧跟热点技术的博主是不是也应该跟进一下?当然是的!

但跟元宇宙相关的技术很多,如VR、AR、AI、NFT、物联网、5G等等,应该从哪里开始入手呢?

最近跟朋友聊起做一款手机当枪的游戏:

  1. 手机获取陀螺仪信息,实时控制枪支,触屏射击
  2. 结合AI肢体识别或者脸部识别,跟踪人体移动,躲避子弹
  3. 加上局域网内联机功能

这样就能实现一款体感射击对战游戏了。

目前已经实现了第一步。

这时才发现其实手机就是充当VR眼镜里带3DOF的手柄,VR眼镜里的手柄可以通过玩家手持发射激光,实现对三维界面或物体的触摸和交互。现在手机也完全实现了这样的功能,控制手机三维模型(或任意模型,如枪)在虚拟世界里转动。

换个说法:手机进入了元宇宙!

下面讲述如何实现,步骤有以下几步:

  • 获取手机旋转信息
  • 命令发送到三维世界
  • 轴向转换
  • 角度初始化

一、获取手机旋转数据

Android手机可以直接通过SensorManager获取手机旋转数据,如下面代码拿到的rotator就是手机旋转的四元数数据。

private SensorManager sensorManager;
private Sensor rotationSensor = null;
public static float[] rotator = new float[4];

void init(){
	sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
	rotationSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ROTATION_VECTOR);
}

@Override
protected void onResume() {
    super.onResume();
    sensorManager.registerListener(this, rotationSensor, SensorManager.SENSOR_DELAY_GAME);
}

@Override
protected void onPause() {
    super.onPause();
    sensorManager.unregisterListener(this);
}

@Override
public void onSensorChanged(SensorEvent event) {
    if (event.sensor.getType() == Sensor.TYPE_ROTATION_VECTOR) {
        rotator = event.values;
	    // Log.i("dv", String.format("%.2f,%.2f,%.2f,%.2f",rotator[0],rotator[1],rotator[2],rotator[3]));
    }
}

@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {

}

二、发送数据到三维世界

拿到手机旋转数据之后,通过局域网内socket把数据传递到三维程序(如Unity或UE4),这里不详述。

三、轴向转换

拿到的手机旋转数据后,由于Android端的旋转坐标轴和三维软件的坐标轴可能对不上,这时需要根据需求做坐标轴的转换。

四、角度初始化

手机的旋转角度是取了陀螺仪、加速度传感器、地磁传感器等数据计算的,最后计算出来的数据是跟真实世界的东南西北方向有关。手机平放在桌面时,手机前方朝向正北,这时获取到手机的纵轴旋转角为0。

可是我们电脑屏幕不会刚好背向正北,很多时候我们需要在手机指向屏幕时,纵轴旋转角为0,这对我们写逻辑比较方便。此时需要做个简单的角度初始化。

初始化的方式很简单,在手机朝向屏幕时,记录此时的角度,然后在以后每次获取到角度时,减去偏移值即可。

五、可以怎么玩?

  • 当游戏手柄

待补充

  • 控制射击游戏

【开启元宇宙大门】手机当枪玩射击游戏

相关源码地址:
https://mianbaoduo.com/o/bread/mbd-YpaVk55t

猜你喜欢

转载自blog.csdn.net/killfunst/article/details/122017826
今日推荐