unity
unity游戏开发中涉及的功能及原理
梁工123
这个作者很懒,什么都没留下…
展开
-
unity3d后期效果的重影
后期效果对于unity来说还是挺耗性能的,因为是对整屏幕逐像素计算,c#代码:原创 2015-09-25 10:26:40 · 3366 阅读 · 3 评论 -
u3d游戏中显示模型的网格
在网上找了一下,貌似这个实现的并不多,比较多的是一个付费的插件,本id最初的设想是单纯使用着色器就实现的,折腾了一段时间,还是妥协了,用了c#,嗯,先上效果图:先解释一下原理吧,后面补全代码。unity开放了opengl的图形接口给我们,这给了我们在游戏中绘制自定义图形的机会。首先,我们先要获得目标对象的顶点信息:Mesh mesh = this.gameObject.Ge原创 2016-01-18 17:28:22 · 4515 阅读 · 2 评论 -
unity关于clearFlags的一个可能为bug
最近项目中加入一个屏幕特效时候偶然发现这样一个奇怪现象,做屏幕特效时候需要在照相机上附加脚本,重写OnRenderImage方法,可是如果clearFlags设置为depthOnly或者DontClear,电脑端是没有问题的,但是移动端运行效果的话帧数甚至会掉到两三帧。博主找了很多博客都没有人能直接解决的。可能是unity的一个bug吧,不知道这一步引擎里做了什么事情。原创 2016-12-26 10:06:51 · 924 阅读 · 0 评论 -
shader.find在手机上失败
这个是应该算是unity的一个bug,因为shader.find在pc端是正常的,但是在手机上就不行了,这种跨平台pc正常,移动端错误的问题很难找到错误。其实是需要告诉unity,你的shader所在的路径。设置shader的路径方法为edit->project setting->graphics,在这里将你的shader拖进去,手机就能像pc一样找到shader了。原创 2016-12-19 10:56:00 · 1737 阅读 · 0 评论 -
3d游戏中人物被遮挡后以其它颜色显示的方法
好久没有更新博客,最近忙于其他事情了。今天玩了一下九阴真经,偶然发现里边有一个效果,如图显示:我们一步步来解释这个效果的原理,涉及的方面其实还挺多的。首先我们必须清楚地知道,在角色被遮挡的时候,已经暴露出来模型其实是分两次渲染,也就是该模型的着色器必然是存在两个通道的。第一个通道便是遮挡后显示出来的蓝色,第二个通道就是普通情况下显示出来的模型。第一步:前面的屋子没有能够遮挡住角原创 2016-09-19 11:20:08 · 2033 阅读 · 0 评论 -
unity源码解析Texture
Texture类继承自Object是作为一个Texture2D与Texture3D的基类存在的,一般也并不直接使用它,且其本身也并没有对纹理数据的存储using System;using System.Runtime.CompilerServices;namespace UnityEngine{ public class Texture : Object原创 2016-05-07 22:00:34 · 3302 阅读 · 1 评论 -
关于3d模型任意切割的思路
3d模型的任意切割一直是游戏开发里的一个很大的问题,其实博主也没有根本解决,主要的问题是在切面上,然而如果是切面片则并不存在切面的问题,所以是可以在项目中实用的,总之本文权当研究吧。先看看博主切出来的效果下面先看看切出平整切痕的原理吧,本文需要图形学的基础扎实。如上图所示,当切割模型时,对于切面上的三角面,无非是如图中3种情况(正好切在三角形的某个顶点上几乎不可能,不过也可以考虑在内,这里原创 2017-06-02 16:45:49 · 14943 阅读 · 8 评论 -
unity模型任意无限切割插件
前面几篇文章都是关于3d模型切割的原理,经过两天奋战,完成了整个流程的制作,包括了滑动屏幕,切割模型的整个过程,不过这并不是完美版本,因为这个版本目前并没有将切割之后的切口缝合上,不过已经亲测了无限切割(只要你的机器跟得上),本文理解难度其实挺大的,能理解的可以将他运用到其他平台上,比如虚幻之类的,不能理解就只能直接在unity上使用了,没有缝合切口的版本如果运用于2d面片的切割是可以在实际项目中原创 2017-08-09 16:21:31 · 21719 阅读 · 13 评论 -
根据屏幕上的触摸生成平面方程
其实看过我前面两篇文章的朋友应该知道这篇文章的意义,就是为切割模型做准备的,其实我是想有空就慢慢把切割模型整个工程写一下的(要是某天懒惰战胜了勤奋就没办法了),原理虽然已经了然,写出来完整版也不是个简单的事。这篇文章相对来说简单点,就是一些数学运算/* * @authors: liangjian * @desc: */using UnityEngine;using System.Co原创 2017-08-04 11:27:10 · 742 阅读 · 0 评论 -
万向节锁的理解
今天看了一下万向节锁,觉得挺有意思,假设旋转使用欧拉角,那么当绕着y轴旋转90度的时候,会出现z轴与原来的x轴重合,那么(x, 90, z)则可以表示为(x-z, 90, 0),如此,丧失了一个维度,所以就出现了四元数来表示角度原创 2015-09-07 12:38:04 · 1526 阅读 · 0 评论 -
unity3d中的addChild
很多从cocos2d-x转unity3d的朋友会面对unity3d中的父子关系不知所措,所以就稍微提下,unity3d中的父子关系是由transform中的parent决定的,c#中可写成如下所示GameObject obj = GameObject.FindGameObjectWithTag ("MainCanvas");//取得画布 GameObject newNod原创 2015-07-10 20:01:55 · 3723 阅读 · 0 评论 -
unity3d制作弧形血条,魔条
第一步,我们需要先准备好一张弧形素材图片资源:第二步,把该资源在unity中按照如下设置:第三步,在unity中创建一个image,并且把资源拖给该image,就变为如下所示需要注意点击一下set native size,图片才会显示真实大小第四步,给该图片添加一个材质,并给该材质添加一个带透明通道的着色器,为此我们需要动手写一个着色器附上shaoder:第原创 2015-09-17 10:33:38 · 2605 阅读 · 2 评论 -
unity源码解析GameObject
using System;using System.Collections.Generic;using System.Runtime.CompilerServices;using UnityEngine.Internal;using UnityEngineInternal;namespace UnityEngine{ public sealed class原创 2016-04-06 11:21:36 · 2662 阅读 · 0 评论 -
unity源码解析Component
Component 这个没有声明好说的,因为他的方法实现基本都在GameObject中,就是上一篇中的额内容,就单单贴出源码好了using System;using System.Collections.Generic;using System.Runtime.CompilerServices;using UnityEngine.Internal;using UnityEngineIn原创 2016-04-06 11:32:36 · 3183 阅读 · 0 评论 -
unity源码解析Transform
Transform这个类继承自Component, IEnumerable。我们在开发的过程中之所以可以对Transform进行foreach,就是因为它实现了IEnumerable抽象方法GetEnumerator,该方法返回一个IEnumerator,而通过重写了IEnumerator中的Current,可以依次获得子对象。废话不多说了using System;using System原创 2016-04-06 15:27:42 · 5303 阅读 · 0 评论 -
unity源码解析Material
Material这个需要结合shader来讲,计算机图形学里本身就没有Material这个东西,引擎加入这个其实是在shader和主程序之间搭建了一座桥梁,可以说Material是一个着色器管理器,所以很多接口都是对shader的控制。using System;using System.Runtime.CompilerServices;using UnityEngine.Interna原创 2016-04-08 20:30:32 · 4058 阅读 · 0 评论 -
unity3d的斜边分屏实现
昨天看到蛮牛上有个练手的文章,要求是实现unity斜边分屏,就是将屏幕分成两个三角形,分别显示两个照相机显示的内容,有些端游也出现过,而且网上也好像没有这样的例子,觉得有趣,就写了一个早上,实现了它,先上效果图:上面的例子中,两个照相机对准的是同一个立方体,触摸右下角的区域则旋转立方体,触摸左上角则移动立方体,达到了简单的分屏控制效果。简单说一下步骤:1,创建两个照相机原创 2015-10-08 16:41:11 · 2006 阅读 · 0 评论 -
3d地图的a*寻路
对于2d地图的a星算法其实很多。原理都是一样的,我做这个的3d的寻路其实只是在2d地图数据中加入了一个高度的数据,而在权重中由原来的两个坐标的勾股定理变为三维坐标系的勾股定理,以前我做cocos2dx开发时曾写过一个lua版的a星,就用这个作为说明吧(涉及a星的原理就不必再说明了,很多博客都会有):其中的mapInfo可以更改为如下self.MapInfo = {原创 2015-09-07 10:53:01 · 4991 阅读 · 0 评论 -
Angry Bots水面反射效果剖析
这两天研究了一些unity官方的例子Angry Bots,发现其中的水面反射挺有趣,就算是作为读书笔记写下来吧。图中显示了地面的水相当于一块模糊的镜子一样。就先来说说其中的原理吧,生活中你站在一块镜子面前,看到的东西都是面向镜子的那一面,就相当于镜子中有一个你(虚像)正朝着外面看一样,高中物理可以解释。为此,我们必须准备一台辅助的camera来充当镜子中的你(虚像),于是得到一个相原创 2015-08-31 21:53:00 · 2132 阅读 · 0 评论 -
unity文本自发光效果
项目要求一个文本自发光的效果,网上搜索了一下法线并没有找到有关代码,于是只能自己动手写了一个,先上效果吧这里其实只用到了简单的模糊效果,本来想用的高斯模糊,但是发现效果还不如简单的模糊效果。下面是片元着色器的代码float getTransparent(sampler2D MainTex, float2 uv) { fixed4 result = tex2D(_Main原创 2016-03-16 14:49:07 · 16536 阅读 · 7 评论 -
谈一下unity3d的光照
其实学习shader的话,搞unity开发,就是《unity 3d shaderLab开发实战详解》。unity在opengl的基础上又封装了了一个表面着色器,本id其实并不怎么喜欢写表面着色器,因为以前学习opengl的时候都没有听说过这个东西,其实表面着色器最终是要编译成顶点和片元着色器的。今天本id突然想说起这个,是因为昨天下午被自己坑了一把,就导致了在unity编辑器上运行正常,手机上原创 2015-12-09 11:27:58 · 531 阅读 · 0 评论 -
3d游戏中剧情开启扭转镜头的实现
很多3d游戏中在玩家与npc发生对话时候会有一个扭转镜头的动画,其实实现起来并不是很难,只是略微涉及向量的点积和叉积,先上代码吧,这是在unity中运行的using UnityEngine;using System.Collections;public class CameraAction : MonoBehaviour { public GameObject m_npc; //npc原创 2015-11-25 19:23:48 · 582 阅读 · 0 评论 -
unity的图像边缘检测以及简单的模糊效果
首先,看下边缘检测的效果(其实这个边缘检测我是从cocos2dx的官方着色器里面拿过来加以修改的)给image添加一个材质,而材质上的shader是这样的Shader "Custom/Edge" { Properties { _MainTex ("Base (RGB) Trans (A)", 2D) = "white" {}//主相机的纹理 } SubShader {原创 2015-10-22 17:05:40 · 12027 阅读 · 0 评论 -
unity3d创建一个跟随人物的血条
在游戏的战斗中经常需要使用到一个能够跟随人物位置变化而变化的血条,由于项目用到,就动手写了一个,作为巩固一下里面需要用到的坐标变换的知识。我们项目中ui层使用的照相机跟场景中的照相机是独立的,所以这个例子中需要两个照相机,一个用来显示血条,另外一个用来显示角色,当然,需要保证角色的屏幕坐标跟血条的屏幕坐标要保持一致。惯例先来上最终效果图:上面三幅图中,不管球体怎么移动,血条在屏原创 2015-10-12 15:55:55 · 8345 阅读 · 0 评论 -
unity中的万向节锁具体体现
之前写过一篇关于万向节锁的文章(http://blog.csdn.net/lj820348789/article/details/48264049),当然,那都是理论上的,下面来看看在实战中遇到的万向节锁问题,代码如下:public class Rotation : MonoBehaviour { // Use this for initialization void Start () {原创 2015-10-05 15:41:29 · 2020 阅读 · 0 评论 -
模拟实时光照下的阴影
在3d游戏中,实时光照是一个特别大的消耗,不仅是因为对于颜色的计算,还有消耗在绘制实时阴影,对于手机游戏无疑是一个很大的开销,但是吧,没有实时光照的影子,就显得很呆板,这里就说明一下3d游戏中绘制阴影的原理。太阳光可以看做是一个平行光,平行光经过物体,投影到某个平面中,于是在该平面形成了阴影。现在,我们假设需要投影到一个平面上,该平面的方程为ax+by+cz+d=0,其中(a,b,c)原创 2016-02-24 17:56:29 · 2893 阅读 · 2 评论 -
unity选择关卡的跑马灯效果
最近项目中需要做一个类似乱斗西游的选择关卡的效果,如下所示涉及到的知识点也就四元数在旋转中的应用。四元数公式: q.w=cos(a/2) q.x=RAix.x*sin(a/2) q.y=RAix.y*sin(a/2) q.z=RAix.z*sin(a/2)首先,需要需要假定一个旋转的半径,然后在该空间原创 2016-03-09 16:14:31 · 3977 阅读 · 4 评论 -
unity3d边缘发光效果
这是本人在学习unity的shader的一些理解,效果图如下核心代码为void surf (Input IN, inout SurfaceOutput o) {fixed4 t = tex2D (_MainTex, IN.uv_MainTex);o.Albedo = t.rgb;o.Alpha = t.a; half rim = 1.0 - saturate(do原创 2015-07-21 17:48:37 · 6338 阅读 · 0 评论