- 博客(43)
- 收藏
- 关注
原创 VRTK_v4 直播教程笔记(3)物体吸附,固定传送点式位移和 VRTK的RuleSystem
VRTK_v4 直播教程笔记(3)物体吸附,固定传送点式位移和 VRTK的RuleSystem
2022-06-11 17:38:45
1720
2
原创 UniTask使用笔记
异步处理&同步处理同步处理:简单说就是代码按顺序执行,在方法1里调用方法2时,要等到方法2执行完毕才接着执行方法1的代码。异步处理:简单说就是在两个方法里的代码同时或者来回执行,在方法1里调用方法2时,不等方法2执行完就接着执行接下来的代码。异步不等于多线程异步处理不等于多线程,因为即使是单线程,也可以通过切换执行的代码来实现异步。典型的例子就是unity的协程。协程就是只运行在主线程来实现异步处理的。而C#里真正跟多线程相关的是把ThreadPool封装后的Task类。Task类通常通过
2021-08-09 02:23:21
29865
4
原创 Unity 双击Asset后回调的实现
利用unity提供的OnOpenAssetAttribute特性。unityAPI描述用于打开 Unity 中某个资源的回调属性(例如,双击 Project Browser 中的某个资源时会触发回调)。将此属性添加至某个静态方法后,系统会在 Unity 即将打开资源时调用该方法。该方法应有以下签名之一:static bool OnOpenAsset(int instanceID, int line)static bool OnOpenAsset(int instanceID, int line,
2021-08-05 12:19:29
977
原创 命令行开启一个unity实例和执行其中的脚本方法的使用和注意
工作中有一个需求,就是将unity工程放在服务器上,自动执行一些打包任务。这时候就需要启动一个没有GUI的unity,并自动执行其中的打包脚本。1.官网的说明:官网API
2021-08-03 10:08:40
1708
原创 搭建自己的Unity Package
在开发过程中我们希望能把一些公共独立的功能单独做成一个package,方便在其他项目里使用。这里就涉及到怎么做一个package。这个帖子就讲的比较详细https://www.jianshu.com/p/153841d65846还有可以参考unity官方文档https://docs.unity3d.com/Manual/CustomPackages.html...
2021-07-17 14:09:00
1456
1
原创 Unity Editor下改变场景里prefab的参数后保存时注意点
在改变场景里prefab的时候,要记得将所改变的组件设为脏(tag和layer不用)。EditorUtility.SetDirty(component);之后再调用保存场景,才能将场景里的prefab修改保存到场景文件里。//保存当前场景EditorSceneManager.SaveScene(EditorSceneManager.GetActiveScene());PS 可以在修改前将组件加入undo,用于实现撤销Undo.RecordObject(Component,"msg");//m
2021-07-09 10:23:04
2135
2
原创 记录:注意Unity返回的所有数组,只是数组的副本
注意Unity返回的所有数组,只是数组的副本例如Renderer里的sharedMaterialsby unity APIpublic Material[] sharedMaterials ;描述该对象的所有共享材质。此为渲染器使用的所有材质的数组。Unity 支持单一对象使用多种材质; 在这种情况下,sharedMaterials 包含所有材质。 如果有多个材质,sharedMaterial 和 material 属性返回第一个 使用的材质。修改 sharedMaterials 中的任何材质
2021-07-06 12:08:40
323
1
原创 OculusQuest2 直接连电脑调试
实际上是用Quest2的Oculus Link 将头显作为Rift来使用。1.将头显连接到电脑上,执行Oculus link,成功连接上(就是打开了Oculus home)。2.打开unity工程,在Project Setting的XR Plug-in Management里PC平台上Oculus选上。3.运行工程,unity就会自动识别头显和控制器来运行。PS:由于是按照Rift运行,所以实际上程序是跑在PC上,最终效果还是要打包到Quest里确认才行。...
2021-05-30 15:05:07
14922
原创 Unity上的Oculus Quset2开发(2) —— 在VR里打棒球
在安装完Oculus的插件后,能在Assets/Oculus/文件夹下看到插件包含的所有资源和脚本。当然有耐心的话,可以配合官方文档一起一个一个去看,另一方面在Assets/Oculus/SampleFramework/Usage下有官方搭建的几个demo场景,实现和演示了一些基本功能。可以直接将场景打包出来放实机里看看效果。有以下几个场景:1.AppDeeplink : 演示从游戏内外联到其他APP上2.CustomControllers: 演示VR相机和Touch控制器3.CustomHands
2021-05-30 14:48:46
1333
原创 Unity上的Oculus Quest2开发(1) ——首先要空工程能在Quest上跑起来吧
其实一开始赋闲在家思考转行的时候,就也想去搞搞VR开发。之后的报unity培训班一半也是基于这个目的。但当时VR基本是PCVR,PSVR。要么要高配PC,要么要主机的开发机。在培训班也只是讲了一点皮毛。终于在前几天海淘了OculusQuest2+专用路由器。终于可以开始我的VR开发之旅啦。(这里要感谢公司的直连线路,让我能在路由器没到时激活和更新机器。)1.搭建环境的基本流程参考的是这位博主的文章。搭建环境流程如果是从unity安装开始做,同时有外国线路的话,应该都能build成功的。但是我在第一次
2021-05-22 23:34:05
1306
原创 在URP中使用UICamera
有时候我们想要用单独一个相机来渲染UI。1.内置管线在内置渲染管线里,我们可以设一个主相机,再设一个UI相机。将UI相机的ClearFlags设为Depth Only,再设置相应的要渲染的层,即可将UI相机的图像叠加到主相机上(注意相机优先级)。2.URP相机栈但URP里的Camera没有clearFlags,改为了RenderType 。RenderType里只有base和overlay。所以通常方法是利用相机栈来进行多个相机的叠加。同内置渲染管线一样,我们可以设一个主相机,再设一个UI相机。
2021-05-13 00:08:12
2327
1
原创 unity里如何在点击UI时,避免触发游戏内操作。
如果在游戏中同时有点击UI和检测鼠标点击的操作时,要避免在点击UI时,避免触发游戏内操作。用eventsystem去检测是否点到ui,方法如下:if (Input.GetMouseButtonDown(0)) { //试图获取当前点击时选择的物体 GameObject btn = EventSystem.current.currentSelectedGameObject; if (btn == null)
2021-04-29 14:31:45
2332
原创 Unity URP一分钟实现遮挡透视
1.设定要遮挡透视的对象的层,比如player2.准备好被遮挡后要替换的材质3.在默认的ForwardRendererData下新增一个Renderer Feature4.设置如下:layer mask:要应用的层。overrides/material:要替换的材质Depth/Depth test:开启深度测试,决定renderer feature是否渲染object的片元。深度更大是渲染(即被遮挡)...
2021-04-27 12:13:08
3163
1
原创 unity editor里的undo操作
主要是使用unity里的Undo的API。1.Undo.RegisterCreatedObjectUndo //撤销创建[MenuItem("Example/Create Cube")] static void CreateCube() { var cube = GameObject.CreatePrimitive(PrimitiveType.Cube); Undo.RegisterCreatedObjectUndo(cube, "Create Cube"
2021-04-26 18:42:37
2145
4
原创 Unity 编辑器内建图标获得
通过调用EditorGUIUtility.IconContent(string name, string text = null);能获得icon的UIContent,从中可以调Image来获得Icon的Texture。例如://获得shader文件的IconTexture icon = EditorGUIUtility.IconContent("Shader Icon").image;Icon Name参考:Editor-Icon...
2021-04-12 17:24:48
917
原创 unity Conditional特性 总结
除了用预处理指令来控制编译之外,在Unity中可以用Conditional特性来控制编译。一、使用方法[Conditional("Debug")]public static void Logger(string msg){ Debug.Log(msg);}之后在playerSetting/Player/OtherSettings里的Scripting Define Symbols里添加上Debug字符时(用;号隔开)该方法即被编译。删去的话,这个方法就不会被编译。[Conditio
2021-02-03 22:11:42
3350
原创 利用导航网格限制玩家移动范围
在看插件案例时,发现了一个利用NavMeshAgent组件来限制玩家移动范围的用法。感觉挺有意思的,就先记录下来。1.原理其实挺简单的,就是agent在移动到边缘时,因为无法再向前了,NavMeshAgent中的Speed就会自动为零,于是把这个变量乘到实际的移动里就可以了。2实现具体代码如下:using UnityEngine;using UnityEngine.AI;[RequireComponent(typeof(NavMeshAgent))]public class MoveByN
2020-12-06 23:31:18
572
原创 unity Mirror使用笔记
由于mirror的概念和API同已经弃用的unet很相似。同时mirror的文档在基础概念比较少,而且全英文。所以可以先从unet的官方文档开始入门。UNetmirror入门1) 运行环境:从AssetStore下载mirror插件。注意.net版本要求。需要在playersetting1里将.net版本改成.net4.x。2) 构建NetworkManager建立一个空物体,将networkManager,Transport,networkManagerHUD组件挂在上面。3) 制作play
2020-11-30 01:50:41
18359
6
原创 背包系统搭建总结
背包系统搭建,实现效果如下:1. UI系统的搭建首先创立一个UIroot空物体其子物体是UI相关的游戏物体创建一个UICanvas作为所有窗口的根节点,所有生成的UI窗口的canvas都在其下做统一管理。2. 设定好UICanvas的由一个专门渲染UI的camera渲染,同时设定好自适应的尺寸。采用单例模式,用一个UIManager类来管理。•1.在UImanager定义一个枚举类,规定可能存在的窗口。•2.用一个字典类保存每一个打开过的窗口。键就是枚举类的值,值是动态加载生成的
2020-10-19 01:43:24
884
原创 unity DOTS的学习总结之Job System应用——绘制曼德勃罗集合
接上回:DOTS的学习总结之Job System的介绍,这次就利用之前了解知识来应用一下做点效果。上回在这:1.首先实现复数类public struct Complex{ float a; float b; public Complex(float a, float b) { this.a = a; this.b = b; } public static Complex operator +(Complex p1, Com
2020-10-18 16:09:00
740
原创 unity 的Cinemachine组件运用
1.第三人称视角控制通过Package Manager 安装CineMachine1) 最简单的方法使用freeLook虚拟相机常用的调整为:1.观察目标:将要看的目标放在这里。2输入控制:把你想用来控制的虚拟轴(就是InputManager里的)的名字输入进去就行。默认是填mouse那个输入轴。注意:似乎不支持New InputSystem。所以在用New InputSystem时要么用在projectSetting/player里改成both设置。要么自己写脚本去调用这个组件中的
2020-10-18 02:29:09
4528
2
原创 Unity的NewInputSystem的InputManager实现多玩家的总结
1.首先自然是安装InputSystem的包2.创建一个空物体挂载InputManager组件Notification Behavior:用来绑定当玩家加入或离开时的事件。Joining Behavior :用来指定玩家加入的方式player Prefab : 玩家预制体Joining enabled by default : 勾选该项时默认组件激活时能加入玩家limit Number of Player : 是否限制最多玩家数量enable Split-Screen是否分屏要注意的问题:
2020-10-17 01:40:37
2141
2
原创 MyGameDemo:打砖块
做了个打砖块,发布到unityConnect上了。以下是网址。https://connect.unity.com/mg/other/untitled-11192内部脚本的框架如下:
2020-08-16 13:29:53
92
原创 Unity基础学习笔记(一)
1. unity中的特殊文件夹在Unity中一些文件夹是预设定具有某些特殊功能的。在建立文件夹时若不是使用相应功能,应避免和这些文件夹重名。***Assets文件夹***为资源的根节点,所有的资源都应在Assets文件夹下,经测试似乎可以命名其他文件夹为Assets,但为了避免混淆,应避免使用这个文件夹名。Editor 文件夹,用来存放一些调用Unity.Editor的API的脚本。可以在各个层级中有各自的Editor文件夹。因为实际项目不能调编辑器,这个文件夹中的脚本不会被build打包进去。Ed
2020-08-15 12:46:15
983
原创 Unity超基础学习笔记(四)
1. 装箱和拆箱由于在C#中所有类型(包括值类型)都继承于System.Object类。另一方面Object类本身又是引用类型。所以值类型的数据可以隐式转换为终极基类的Object类型,同时数据由值类型变成了引用类型,即所谓的装箱。同理由于值类型也实现一些接口,当值类型数据隐式转换成相应的接口类型时,也属于装箱。而反向操作,将装箱的值类型数据显式转换回来就是拆箱。显然要有装箱操作,才有拆箱操作。如果尝试对null引用拆箱或拆箱时数据类型不对的话,会报错。 int i = 123; object
2020-08-10 21:52:14
431
原创 Unity超基础学习笔记(三)
1. 面向对象的编程早先面向过程编程的问题:1) 功能和数据分离,使用的建模概念不能直接映射到问题域中的对象,不符合人们对现实世界的认识和思维方式。2) 自顶向下的设计方法限制了软件模块的可复用性,降低了开发效率。3) 当系统需求发生变化时,维护和扩展都变得非常困难。面对对象的思想:将软件的各个模块进行分割,形成一个一个独立的部分。就像现实世界里的一个个人,一个个物体一样。我们将其称为对象。就像每个人一样,对象有自己的属性,能执行特定的操作。比如一个人,有姓名,职业,身份证号,身高等称之为他
2020-08-08 18:12:54
250
原创 Unity超基础学习笔记(二)
Unity超基础学习笔记(二)1. 基本数据类型的扩展之前在K12中学习了一些基本的数据类型,实际上C#支持更多的数据类型。如下:注意无符号整型数和有符号整型数的表示范围,例如:int 能表示 -231~231-1;uint 能表示 0~2^32-1;2. 类型转换同种数据(例如都是整型)的不同数据类型可以互相转换。有两种方法。1) 隐式类型转换 。这些转换是 C# 默认的以安全方式进行的转换, 不会导致数据丢失,也就是从表示范围小转换到表示范围大的数据。例如,从小的整数类型转换为大的整数
2020-08-02 11:18:18
533
原创 unity DOTS的学习总结之Job System
这篇文章是笔者对网上DOTS相关资料的总结,主要来自UNITY官方直播和unity社区的资料,还有其他网上同好的分享。如有纰漏,望读者指正,谢谢。DOTS是什么?DOTS全名:Data-Oriented Tech Stack(DOTS),即多线程式数据导向型技术堆栈。简单来说,就是UNITY提供了一个高性能编程的解决方案,其中包含三个组成。1)C#任务系统(Job System):用来方便地写出高效的多线程代码。2)实体组件系统(ECS):一个用来实现高性能的实体框架。(类似原来的游戏对象...
2020-07-30 01:10:53
1347
原创 Unity超基础学习笔记(一)
1.安装Unity和认识Unity界面通过访问unity下载来下载unityHub或者直接下载unity。(应该需要注册个unityID)。本次课程用的版本是2019.4.3f1。打开后新建一个项目。任意模板项目都行,因为可以互相转。这里主要选3D模板。之后编辑界面为:Hierarchy标签:用列表形式表现现场景内的对象,和对象之间的关系(可以用拖到操作)。Scene标签:用来观察和操作2/3D场景。Game标签:用来观察游戏运行时的情况。Inspector标签:显示当前选中对象的信息
2020-07-28 00:19:44
267
原创 算法基础笔记
这半个月还学了算法基础,这里总结一下。迭代和递归1)迭代:迭代是重复反馈过程的活动,其目的通常是为了逼近所需目标或结果。每一次对过程的重复称为一次“迭代”,而每一次迭代得到的结果会作为下一次迭代的初始值。例如:求0~n整数的和int Sum(int n){ Int sum=0; for (int i = 0; i <= n; i++) { sum += i; }//循环累加到n后跳出循环,返回sum的值 return sum;}2)递归:一个方法在其定义或说明中有直接
2020-07-26 22:14:45
169
原创 C#入门总结笔记
前两个月主要讲的是C#和算法基础,用的是unity自己开发K12教程。个人觉得可以配合着我之前看的科技传播坊出的C#入门视频,和一本C#本质论能更深入的学习C#。https://www.bilibili.com/video/av10011565/?spm_id_from=333.788.b_636f6d6d656e74.12这里列出了现阶段学习的东西。变量,数据类型和运算符:数据类型:好像就学了int 类型,float类型,char类型,bool类型和string类型。int类型为32 位有符号
2020-07-26 21:59:39
188
原创 笔记:制作游戏所需的数学
https://www.youtube.com/watch?v=fJS4qLifFf8&list=PLFw9ryLdiLzY1s1_XFvOOX4QJQArB-B2c1.公式和图像f(x) = xf(x) = x^2x在0到1变化时,y也对应地从0-1的变化。但变化快慢却不同应用 : 进度条
2020-07-19 22:57:21
242
原创 游戏设计讲座总结
油管上unityJapan的游戏设计讲座的总结:原链接如下:https第一讲:游戏的四要素根据罗杰•凯洛斯的定义:游戏分为四个要素:1)竞争、2)偶然性、3)模仿、4)眩晕。眩晕可能有点难理解,就是日常生活难以体验的极端事件。例如超高的速度感,旋转,像走独木桥通过高度和平衡给人一种紧张的感觉。具体的应用:明显是右边的大象型滑梯。这里用的是模仿要素。接下来出现了恐龙型滑梯。小孩子会喜欢哪一个?明显是恐龙,因为更高更长了。这里用的就是眩晕,或者说紧张感。把这个滑梯建在泳池里,在旁边放上随机
2020-07-05 15:08:28
1034
原创 unity小技巧总结
这是对unity公众号上一个unity小技巧的介绍视频的总结原文是这个:https://unity.cn/projects/unity-tips?signup=true1)unity常用快捷键1.1 QWERTY1.2 Ctrl+Sunity不会自动保存,注意经常保存场景。1.3 alt+点击场景里物体旁的小三角展开或收起所有子物体。1.4 通过shortCuts Manager来确认新建快捷键。(2019.3版本以上)2)运行模式着色因为在运行模式下的修改不能保存下来,为了防止
2020-06-29 19:11:12
819
原创 在unity用shaderGraph做出类似动物之森的柱面场景,甚至球面场景。
在unity用shaderGraph做出类似动物之森的柱状场景,甚至球状场景。这个是模仿油管上NotSlot的视频https://www.youtube.com/watch?v=SOK3Ias5Nk0做的。B站上也有人搬运。最后的效果如下:基本的原理就是离摄像机位置越远,相应的节点越往下。所以只要建立起Dy=f(d)的关系就行。用公式表达就是Dy=(worldPosition-CameraPosition).z^2*(-Amount);Amount是个值在0.005~0.01之间的值用来
2020-06-28 02:45:12
944
原创 用unity制作能量护盾(3)
为护盾力场添加一个扭曲光线的效果。这个实现的原理是先将当前不透明物体的渲染结果作为一张贴图保存起来。再把它贴到要实现透明效果的物体上,通过扭曲改变这张贴图,实现扭曲光线的效果。首先要获得不透明物体的渲染结果。在使用的渲染管线的设定中开启Opaque Texture。由于之前的颜色占了color那个通道,要另开一个shader和材质做目标物体的第二材质。因为同样要等不透明物体绘制完,改为Transparent。建一个texture2D的变量,reference填入_CameraOpaqueText
2020-06-25 22:39:32
959
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人