Unity3D
honey199396
记录自己工作中遇到的点点滴滴沟壑。
展开
-
Unity3D -- Unable to read header from archive file:
问题描述:加载AssetBundle的时候报了Unable to read header from archive file:xxx.问题解析:这里的问题是xxx文件不是AssetBundle文件,所以去查一下加载的文件对不对即可。可能文件为空,可能文件格式不对,反正xxx文件肯定不是AssetBundle文件。...原创 2020-12-21 11:44:33 · 7386 阅读 · 1 评论 -
Unity3D -- Shader is not supported on this GPU (none of subshaders/fallbacks are suitable)
问题描述:在一台显卡未GeForce RTX3070显卡上报了这个错误,而这个Shader之前能好好的在其他电脑上正常跑。Unity工程和显卡都设置都一样。解决办法:在playerSetting 的publish setting 中,去掉勾选Auto Graphics API For Windows去掉勾选解决问题。...原创 2020-12-21 11:28:07 · 9947 阅读 · 2 评论 -
Unity3D -- 命令行导出Android && iOS工程
首先给一个官方的文档:Command line arguments具体的参数请去官网文档查看这里直接来Python代码,里面有一些绝对路径,要麻烦自己替换成自己打包机子的路径_unityPath:需要打包的unity版本的路径_projectPath:需要打包的Unity工程PlatformBuild.BuildIOS:Editor中的打包代码下面代码是传入版本号和构建号来打包#! /usr/bin/python3# -*- coding: utf-8 -*-import osimpo原创 2020-07-23 18:37:26 · 1977 阅读 · 0 评论 -
unity hub中的unity版本无法添加模块
在Unity hub中导入unity 版本安装包时,出现无法添加模块的情况,如下图所示好了,去你的unityhub对应版本安装处,会发现少了一份叫modules.json的文件,找其他安装包下载放过去里面内容是这样的相信看到这篇博客的童鞋是看得懂里面内容的,将对应模块,设置成正确内容,然后在重启unityhub,可以看到添加模块选项。...原创 2020-07-21 15:25:22 · 15938 阅读 · 14 评论 -
Unity3D -- IEnumerator 使用时间
这里不介绍IEnumerator的原理,记录一下当使用IEnumerator时,要等待的时间。 private IEnumerator TestIEnumerator() { yield return 0; // 下一帧 yield return 1; // 下一帧 yield return 10; // 下一帧 yield return new WaitForSeconds(1);原创 2020-07-08 20:22:39 · 857 阅读 · 0 评论 -
C# -- 查看类有哪些属性、方法
使用C#的反射来实现我们想要的功能,下面是实现方法和调用方法。using System;using System.Reflection;public static class PropertyUtil{ /// <summary> /// 判断对象是否包含某个属性,porperty要求有set,get方法 /// </summary> /// <param name="instance">object</param>原创 2020-06-22 20:34:38 · 2114 阅读 · 0 评论 -
Unity3D -- C#之InvalidOperationException: out of sync
详细报错:InvalidOperationException: out of syncSystem.Collections.Generic.Dictionary`2+Enumerator[System.String,System.Int32].VerifyState () (at /Users/builduser/buildslave/mono/build/mcs/class/corlib/Sys原创 2017-11-16 11:40:54 · 2771 阅读 · 0 评论 -
Unity3D -- 3D Text对模型的穿透显示
Unity3D中使用3D Text(Text Mesh)时,如何让场景中的物体和3D Text有正确的遮挡关系。由于3D Text默认材质是(Font Material),他的shader是GUI/Text Shader,自然也就有了GUI的穿透特性,所以我们使用自定义材质就可以解决这个问题了。 1、新建材质,并将如下shader设置给它Shader "Custom/3D Text Shader"原创 2017-05-25 19:52:31 · 5525 阅读 · 3 评论 -
Unity3D -- 物体反弹碰撞
设置Unity物体碰撞时的反弹系数:也即Physic Material的 Bounciness属性。只需要给物体的Collider添加Material属性即可。创建一个Physic Material Asset -> Create->Physic Material(Physic Material 2D)设置Bounciness这个属性,区间是0到1,0:没有弹力,1原创 2017-05-17 16:22:57 · 12572 阅读 · 0 评论 -
unity3D -- 给游戏体添加组件
一、直接在编辑器Inspector上添加一个组件。二、在脚本中使用AddComponent函数添加一个组件,例如:using UnityEngine;using System.Collections;public class Test : MonoBehaviour { private CanvasGroup m_CanvasGroup; void Start() {原创 2016-03-08 11:16:59 · 2694 阅读 · 0 评论 -
游戏开发中网络通讯协议对比
在网络游戏开发中,通讯协议是一个无法被避免的问题,无论对于客户端开发中还是服务器开发程序猿而言,制定一个合适的通讯协议是很有必要的游戏联网需求有弱联网游戏,即时互动类游戏选择通讯协议的时候主要关注于延迟低,易用,低成本等 下面对比TCP,UDP,HTTP,WebSocket 四种协议优缺点、特性TCP: 优点: 可靠性 、全双工协议、开源支持多、应用较广泛、面向连接原创 2017-01-18 19:10:29 · 17544 阅读 · 6 评论 -
Unity3D -- 常用函数和变量(Shader学习之一)
最近在学习Unity Shader,写Shader的时候总是忘记Unity为我们提供的函数、变量怎么写的,这里整理一下,方便自己查阅,也提供给网友,学习Shader不易。1、函数float3 WorldSpaceViewDir(float4 v) 输入一个模型空间中的顶点位置,返回世界空间中从该点到摄像机的观察方向float3 ObjSpaceViewDir(float4 v) 输入一个模型原创 2017-01-16 15:06:31 · 15398 阅读 · 1 评论 -
Unity3D -- 避免代码被反编译
写在前面的话:本文转自雨松大大的文章,里面内容亲测(自己操作了一次,真的很强大),这里只不过是自己记录一下。雨松大大的原文地址是:http://www.xuanyusong.com/archives/2664我最近研究发现80%以上的Unity3D游戏都没有做代码混淆。而且我觉得反编译后的代码可阅读性更加好。今天把《锁链战记》的代码和资源都反编译出来了。1.Unity编译后原创 2016-09-19 16:10:02 · 2933 阅读 · 0 评论 -
Unity3D -- Attribute 总结
AddComponentMenu可以在UnityEditor的Component的Menu中增加自定义的项目。菜单可以设置多级,使用斜线/分隔即可。在Hierarchy中选中GameObject的时候,点击该菜单项,就可以在GameObject上追加该Component。例如如下代码可以完成下图的效果。[AddComponentMenu("TestMenu/TestComponet转载 2016-12-28 15:21:22 · 584 阅读 · 0 评论 -
Unity3D -- 语法内置函数(Shader学习之三)
该篇是Unity Shader中HLSL的内置函数,主要是一些数学方面的计算函数。在写Shader的时候可以直接使用。abs //计算输入值的绝对值。acos //返回输入值反余弦值。all //测试非0值。any原创 2017-01-16 20:34:41 · 2279 阅读 · 0 评论 -
Unity3D -- 光照常用函数和变量(Shader学习之二)
上一篇记录了shader常用函数和变量,这篇记录一些光照计算时常用函数和变量 1、内置的光照变量_LightColor0 float4 //该Pass处理的逐像素光源的颜色_WorldSpaceLightPos0 float4 //_WorldSpaceLightPos0.xyz是该Pass处理的逐像素光源的位置。如果该光源是平行光,那么_WorldSpaceLightPos0.w原创 2017-01-16 19:25:12 · 1733 阅读 · 0 评论 -
Unit3D -- 类的序列化(数据存储之三)
序列化是指将对象实例的状态存储到存储媒体的过程。在此过程中,先将对象的公共字段,私有字段及类的名称(包括类所在的程序集)装换为字节流,然后再把字节流写入数据流中。随后对对象进行反序列化时,将创建出与元对象完全相同的副本。我们要将玩家的数据保存到数据库中,尽管不使用序列化也可以完成这项工作,但有时会很繁琐而且容易出错,并且在需要跟踪对象的层次结构时,会变得越来越复杂。可以想象一下不得不为每一个对象编写原创 2017-02-07 13:17:51 · 1126 阅读 · 0 评论 -
Unity3D -- 连接MySql(数据存储之一)
Unity3D使用MySQL准备工作:1、安装connector。使用C#操作MySQL数据库时,需要安装MySQL官方提供的连接文件,文件下载地址为https://dev.mysql.com/downloads/connector/net/ ,下载对应版本就可以了。2、引用mysql.data.dll。在MonoDevelop项目面板上的有一个References的目录,右键选择Edit Refe原创 2017-02-06 17:57:06 · 13412 阅读 · 4 评论 -
Unity3D -- 获取游戏屏幕的宽高
这里要用到一个摄像机函数Camera.ViewportToWorldPoint, Unity官方对其定义为: Camera.ViewportToWorldPoint 视窗转世界位置 function ViewportToWorldPoint (position : Vector3) : Vector3Description描述Transforms position from viewport s原创 2017-09-05 13:39:06 · 15330 阅读 · 2 评论 -
Unity3D -- 使用数据库MySQL(数据存储之二)
上一篇我们写了Unity3D连接MySQL数据库,这篇来看看如何读取与存储数据。 废话不多说,先上代码,后面分析。 public void HandleMsg(string str) { // 获取数据 if (str == "_GET") { string cmdStr = "select * from msg order b原创 2017-02-07 11:48:50 · 6736 阅读 · 2 评论 -
Unity3D -- 输出堆栈信息(StackTrace)
我们可以通过断点调试查看堆栈信息,也可以直接输出调用的堆栈信息,using System.Collections;using System.Collections.Generic;using UnityEngine;public class DebugStack : MonoBehaviour { // Use this for initialization void Start原创 2017-12-07 12:01:50 · 13655 阅读 · 0 评论 -
Unity3D --游戏体上所有Component组件复制
该篇文章只是实现以下功能 1、实现复制功能 Copy Component 2、实现粘贴功能 Paste Component As New和Paste Component Values 直接上可运行代码:using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEdito原创 2017-12-07 10:46:28 · 10669 阅读 · 0 评论 -
Unity3D -- 自动创建动画控制器(AnimationOverrideController)
通过上一篇我们可以创建动画控制器(AnimationController),这一篇我们创建AnimationOverrideController,方法很简单,直接上代码,详细看了上一篇的这篇都看得懂。using System.Collections;using UnityEditor.Animations;using UnityEngine;using UnityEditor;public c原创 2017-12-05 10:48:31 · 3753 阅读 · 0 评论 -
Unity3D -- 自动生成动画控制器(AnimationController)
上一篇搞定了自动生成动画,这一篇来试试动画控制器(AnimationController) 代码大部分来自于官方代码。using System.Collections;using UnityEditor.Animations;using UnityEngine;using UnityEditor;public class CreateAnimatorController : Editor {原创 2017-12-05 10:44:26 · 8746 阅读 · 0 评论 -
Unity3D -- 自动生成动画(AnimationClip)
我们一个Prefab有很多个子物体,而且当前prefab使用了大量的动画状态,假如想将该Prefab动画更改过的属性在Idle中重新更改过来,一种比较暴力方法就是直接将需要更改的属性在Idle动画中K出来,但如果动画有更改的话,我们就需要更改Idle里面的属性,操作起来比较麻烦。然后花了一天时间,查找API终于搞定代码自动生成动画,下面代码是在编辑器模式下生成动画,废话说多了,直接上代码,全套的。u原创 2017-12-04 20:13:54 · 8576 阅读 · 0 评论 -
Unity3D -- 编辑器注入lua代码到游戏运行
最近做项目时有一个要求是这样的:使用编辑器编辑的关卡到游戏运行,策划希望点击编辑器试玩时,游戏直接打开编辑器指定的关卡,但是编辑器编辑关卡是可以上传到服务器发布的关卡,游戏也是可以发布正常运行的游戏,这样就导致游戏不知道编辑器送过来的关卡ID,那么如何才能直接打开编辑器送过来的关卡呢。这个时候只能只用Unity注入lua代码到游戏端,告诉游戏我们送过来的关卡ID。实现办法:在游戏端写一个模板结构,在原创 2017-11-30 11:09:00 · 6002 阅读 · 0 评论 -
Unity3D -- 平台宏定义
官方文档网址:https://docs.unity3d.com/Manual/PlatformDependentCompilation.html本文章转译自官方文档Property:Function:UNITY_EDITORUnity编辑器UNITY_EDITOR_WINWindows 操作系统.原创 2017-11-28 23:15:08 · 27285 阅读 · 0 评论 -
Unity3D -- MD5加密
查资料找到的一个unity的MD5加密写法,在这里写出来供大家参考。using UnityEngine;using System.Collections.Generic;using System.Text;using System;public class Md5 : MonoBehaviour { public static string Md5Sum(string strToEnc原创 2016-12-13 11:04:59 · 3687 阅读 · 0 评论 -
Unity3D -- WaitForTargetFPS和Gfx.WaitForPresent和Graphics.PresentAndSync
WaitForTargetFPS、Gfx.WaitForPresent 和 Graphics.PresentAndSync是我们经常会被问到的参数。想必正在读此文的你也经常在Profiler中遇到过这几项CPU开销过大的情况。对此,我们今天就来好好地聊一聊这几个参数的具体含义和触发规则。各位开发朋友,作好准备,下面的文章会很干,很难啃! WaitForTar转载 2016-10-14 16:32:13 · 1494 阅读 · 0 评论 -
Unity3D -- 简单的UI管理结构
Unity3D – 简单的UI管理结构使用Unity3D做一些小游戏原型的时候,虽然我们想做UI,但是又没有美术的支持,我们使用一个简单的UI模板,所有不需要做UI的小游戏直接使用就行了,也不必要每次都要自己写。首先写一个UIBase类,所有的UI类都继承这个类就可以了 。代码块UIBase类using UnityEngine;using System.Collections;using Uni原创 2016-03-02 10:14:25 · 5959 阅读 · 2 评论 -
Unity3D -- 使用可移动图片作为3D背景
1. 在Hierarchy窗口创建一个新的摄像机,命名为Bg Camera2. 新建空游戏体,命名为Background Image,并添加GUI Texture组件3. 在Background Image的Inspector面板中点击Layer下拉窗口,选择“Add Layer”4. 在打开的面板中的 U原创 2016-01-06 14:41:14 · 5604 阅读 · 0 评论 -
Unity3D -- (UGUI)Toggle
一、作用 (Toggle)开关控件拥有一个具备持久开/关状态的检查框。用户可以通过点击检查框影响开关控件的状态二、用法 在UnityGUI中Toggle的开关状态是由true/false布尔值实现。你必须提供一个布尔值做为参数来使Toggle在屏幕上显示出确定的状态。如果开关控件被用户改动,Toggle函数会为你返回表示开关控件当前状态的布尔值。你可以原创 2016-01-05 21:06:12 · 5039 阅读 · 0 评论 -
Unity3D -- (UGUI)Canvas
一、作用Canvas画布负责UI组件的布局以及渲染,所有的UI组建元素必须作为Canvas的子节点。二、创建1、Hierarchy --- 点击右键 --- UI --- Canvas。 2、创建任一个Hierarchy --- 点击右键 --- UI中的组建,如果当前都会默认添加Canvas,如果有则不再添加。原创 2016-01-05 20:41:42 · 1203 阅读 · 0 评论 -
unity3D -- (UGUI)Scroll View
一、相关组件Scroll View Mask &&Rect Mask 2DScroll RectHorizontal Layout GroupLayout Element二、步骤1、创建一个Panel,并为其添加Scroll View 组件2、删除Scroll View子组件Scrollbar Horizontal和Scrollbar Vertica原创 2016-01-05 19:47:38 · 4334 阅读 · 0 评论 -
Unity3D -- (UGUI)Scrollbar
Unity3D中Scrollbar控件(滚动条控件)分为水平滚动条(HorizontalScrollbar)和垂直滚动条(VerticalScrollbar)。其用法也是一样的。官方简介网址:file:///Applications/Unity/Unity.app/Contents/Documentation/en/Manual/script-Scrollbar.html我在实际项目中使用Sc原创 2016-01-05 16:10:35 · 10037 阅读 · 0 评论 -
Unity3D -- 保存数据到excel
上一篇介绍了怎么从excel读取数据,这一篇介绍一下怎么保存数据到excel,背景都是一样的,在工作中遇到的问题。我将游戏中上下左右的操作转换成U’,‘D’,‘L’,‘R’,然后保存到test.csv文件中,这样就可以看到我的操作步骤啦。假如数据已经好了啊。我们只做保存数据到文件中。public void StoreData() { FileStream fs原创 2015-12-16 18:22:24 · 6746 阅读 · 3 评论 -
Unity3D -- 从excel文件中读取数据
最近做的一款益智小游戏需要给出关卡的解答过程,想到了把答案的操作写入到excel表中,然后在游戏运行过程中从表中读取数据来进行相应操作,给出解答过程。我的做法如下啦:首先把游戏上下左右的操作简化为数据‘U’,‘D’,‘L’,‘R’,然后将一系列操作保存在excel表中这里保存了3关的游戏答案数据,然后将其导出成.csv格式的文件da'ta.csv。然后放到工程Resources文件原创 2015-12-16 17:42:11 · 7680 阅读 · 0 评论 -
Unity3D -- 自定义范围截屏
大家都知道unity有一个截屏方法,调用Application.CaptureScreenshot("Screenshot.png")方法就可以截取一张图保存到Application.persistentDataPath + "/Screenshot.png", 但是如果你只是想截取屏幕固定部分的内容怎么办呢,而且那个固定部分还是使用程序动态算出来的,这个时候使用全屏截取就会有错误了。U原创 2015-11-21 11:55:56 · 1840 阅读 · 1 评论 -
Unity3D -- iOS查看系统版本
我们在使用objective-c或者swift编程的时候很容易就能拿到系统的版本,但是有时候我们需要在unity3d中拿到手机的系统版本,这个时候怎么办呢,今天试了一下发现有个办法可以做到。SystemInfo这个类里面有一个函数可以查看使用系统的版本,SystemInfo.operatingSystem。使用Debug.Log ( SystemInfo.operatingSystem);原创 2015-12-13 23:54:00 · 4150 阅读 · 0 评论 -
unity3D -- 单例泛型模板
我们在使用unity开发开发游戏的时候,很多游戏管理类都是唯一的,比如GameManager、UIManager脚本类就是唯一的,由一个GameObject游戏体运行就可以了,这个时候GameManager、UIManager就是一个单例类,下面写一个泛型单例模板,只要哪个类需要用单例类,只需要继承这个类就可以了。 废话几句之后就直接上代码咯:using UnityE原创 2015-09-30 14:08:18 · 3213 阅读 · 1 评论