Deepoon的相关设置以及如何玩steam游戏

基本

  • 保证Deepoon助手、显卡驱动是最新的。
  • 安装Deepoon platform sdk。在platform sdk的安装过程中需要阅读其自带的文档,sdk path中不要带中文。

DpnnGetLastError的处理

  • 目前发现在安装了steamVR的情况下会出现DpnuGetLastError错误,在启动状态下出现错误后,退出steamVR。然后重启游戏。
  • 在setting→play中关闭VR support,这个东西在启动后会被steamVR开启(如果你的程序中用到了steamVR)。
  • 按照上述两部则应该不会出现DpnnGetLastError错误,并且只能通过头盔来看游戏内容。

玩steam

  • 在steam的安装目录下放置xxx\Steam\steamapps\common\SteamVR\drivers\deepoon。如果没有放置这个驱动可能导致steam下无法设置VR房间。设置完成后应该是
    image

  • 经过上面的设置就可以用大朋眼镜玩steam游戏了。

开发相关

  • 目前发现如果用大朋眼镜可以玩steam,则在unity中是不需要使用DpnCameraRig的,而且也不需要开启大朋助手。
  • 从这些表现来看大朋应该用的是Oculus的底层。

LOD初探

概念

  • LOD全称是Level of Detail,也就是细节层级。
  • 为什么会产生这个技术?根据官方教程的解释是因为在一个很大的场景中,需要进一步考虑性能问题。LOD就是一个很好的解决性能问题的方案,它根据物体与摄像机的距离来展示这个物体不同的mesh,从而使得物体较远是使用面数比较少的mesh,而距离近的时候使用面数多的mesh。

VR开发环境搭建

  • unity3d的安装

  • 目前使用的Deepoon
    1.安装大朋助手。
    2.如果提示require DpnPlatform_x64.dll,则在大朋官网下载platform的sdk,并找到对应的平台的文件夹安装,有个bat文件可以安装。

  • 安装steam和steamVR。对于steamVR来说正常安装完会显示能识别头盔,但是可能提示未准备好,需要进行房间设置。

Github Page爬坑指南

1.jekyll的使用

  • jekyll的核心命令就几个

    1
    2
    3
    jekyll new blog // 选好文件夹位置
    jekyll build // 在_site文件夹下生成网站内容
    jekyll serve // 可以在本地生成一个服务查看生成网站的内容,IP:127.0.0.1:4000
  • 模板,参考别人的模板进行了修改,地址

iOS学习笔记-03UI

3.UI

  • iOS的UI开发说起来复杂也不复杂,复杂在于控件很多,属性很多,各种delegate,但是众多的控件也遵循着相同的模式,让人学起来会觉得可以举一反三。同时在UI这个大的标题下还有Draw、layer、transforms、animation、touch这些技术点。想要做出一些非常规UI效果往往不是依靠简单的使用SDK提供的控件可以做到的。

3.1 手动编写UI

  • 个人认知:手动编写UI在iOS不需要考虑手机屏幕尺寸的时代是很好用的,但是随着多种尺寸屏幕的出现,在自适应上手动编写UI代码就有了一些局限性。
  • 手动编写的核心在于创建UI对象,设置frame及各种属性。
  • 当然也可以使用xib来拖动UI,然后让UI与代码关联进而编写相关功能。

iOS学习笔记-05线程

5.线程

5.1 GCD

  • GCD是一套多线程库,可以有效的替换NSThread或者NSOperation。它的基本结构是dispatch_async(queue, block);参数中的queue可以通过dispatch_queue_create或者系统提供的标准dispatch queue。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// 生成一个serial dispatch queue
dispatch_queue_t serialQueue = dispatch_queue_create("com.demo.sai", NULL);
// 生成一个concurrent dispatch queue
dispatch_queue_t concurrentQueue = dispatch_queue_create("com.demo.sai", DISPATCH_QUEUE_CONCURRENT);

// 生成的dispatch queue需要手动release,注意ARC不会释放dispatch_queue_t类型的变量
dispatch_release(serialQueue);
dispatch_release(concurrentQueue);

// 使用系统已经提供的方法来create queue
dispatch_queue_t serialQueue2 = dispatch_get_main_queue();
dispatch_queue_t concurrentQueue2 = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

// 因此真正在代码中经常是这样写的
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"execute in main thread");
});

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSLog(@"execute in a concurrent thread");
});

iOS学习笔记-06数据处理

6.数据处理

6.1 plsit

  • 创建plist文件及添加数值

  • 数据读取,注意因为plist创建的时候可以选择dictionary或者array,这个也决定了后面怎么去读取它。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
NSString* filePath = [[NSBundle mainBundle] pathForResource:@"dict_data" ofType:@"plist"];
if (!isEmpty(filePath)) {
NSDictionary* dict = [NSDictionary dictionaryWithContentsOfFile:filePath];
NSLog(@"%@", dict[@"name"]);

NSArray* arr = (NSArray*)dict[@"favor"];
[arr enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL* _Nonnull stop) {
NSLog(@"%@", obj);
}];
}

NSString *filePath2 = [[NSBundle mainBundle] pathForResource:@"arr_plist" ofType:@"plist"];
NSArray *arr2 = [NSArray arrayWithContentsOfFile:filePath2];
NSLog(@"%@", arr2);

iOS学习笔记-02集合

2.集合

  • 集合分为可变与不可变。

  • 泛型,写法NSMutableArray<NSNumber*>* mutablearr = [NSMutableArray array];NSMutableDictionary<NSString*, NSNumber*>* dic = [[NSMutableDictionary alloc] init];,目前会有warning提示如果类型不对。多参数泛型如下,第二行为Xcode的提示性代码。

    1
    2
    NSMutableDictionary<NSString*, NSNumber*>* dic = [[NSMutableDictionary alloc] init];
    [dic addEntriesFromDictionary:<#(nonnull NSDictionary<NSString *,NSNumber *> *)#>]

目前来看类型只能是Objective-C object或者block。

iOS学习笔记-07必要知识

7.必要知识

7.1 APNS

  • 目前在8.0以后的推送需要以下几个步骤:

    1.使用registerUserNotificationSettings: & registerForRemoteNotifications方法

    1
    2
    3
    4
    5
    if ([[UIApplication sharedApplication] respondsToSelector:@selector(registerForRemoteNotifications)]) {
    UIUserNotificationSettings* notificationSettings = [UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge) categories:nil];
    [[UIApplication sharedApplication] registerUserNotificationSettings:notificationSettings];
    [[UIApplication sharedApplication] registerForRemoteNotifications];
    }

关于registerForRemoteNotifications方法有以下说明,它会需要实现两个delegate方法,并且方法能够被执行的条件是通过registerUserNotificationSettings:方法成功注册用户的notification,或者enabled for Background App Refresh。

// Calling this will result in either application:didRegisterForRemoteNotificationsWithDeviceToken: or application:didFailToRegisterForRemoteNotificationsWithError: to be called on the application delegate. Note: these callbacks will be made only if the application has successfully registered for user notifications with registerUserNotificationSettings:, or if it is enabled for Background App Refresh

2.实现delegate方法:每个APP都不同,就不写了。

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×