unity

Unity3D 客户端编程

匿名 (未验证) 提交于 2019-12-02 23:57:01
Photon Server 和 Unity3D 数据交互: Photon Server 服务端编程 Unity3D 客户端编程 1:打开unity新建新项目,并引入Photon3Unity3D.dll到plugins文件中。 2、新建一个空物体,添加两个脚本文件。 1 using System.Collections; 2 using System.Collections.Generic; 3 using UnityEngine; 4 using ExitGames.Client.Photon; 5 using System; 6 7 public class PhotonEngine : MonoBehaviour, IPhotonPeerListener 8 { 9 //单例模式 10 private static PhotonEngine instance; 11 private static PhotonPeer peer; 12 13 public static PhotonPeer Peer 14 { 15 get 16 { 17 return peer; 18 } 19 } 20 21 private void Awake() 22 { 23 if (instance == null) 24 { 25 instance = this; 26 //不需要销毁 27

unity3D中GameObject.Find()、Transform.Find查找隐藏对象分析(转)

匿名 (未验证) 提交于 2019-12-02 23:57:01
Unity中常用到查找对象,非隐藏的、隐藏的,各种方法性能有高有低,使用又有各种条件限制。 在此对查找的性能和条件进行分析。开发时遇到的主要问题是查找隐藏对象。 没有完美的查找方法,只有最合适的查找方法 最后附带上代码 Resources.FindObjectsOfTypeAll 2.1 GameObject.Find 通过名字或路径查找游戏对象。 GameObject.Find("GameObject"); GameObject.Find("GameObject/ChildGameObject); 隐藏对象包括查找路径的任何一个父节点隐藏(active=false) 2.如果查找不在最上层,建议合理使用路径查找,路径查找是把双刃剑 优点2:如果有完全的路径,减少查找范围,减少查找时间。 3.如果路径查找中的任何一个父节点active=false,这个对象都将查找不到。 此查找相当于递归遍历查找,虽使用方便但效率堪忧,建议在Start()函数中查找对象并保存引用,切忌在Update()中动态查找。 2.2 Transform.Find 3.查找隐藏对象的前提是transform所在的根节点必须可见,即active=true GameObject root = GameObject.Find("root"); root.SetActive(false); // 根节点为空 //

unity LineRender用法

匿名 (未验证) 提交于 2019-12-02 23:57:01
1、创建一个空物体,加上LineRender组件 2、创建一个材质,用来渲染Line Shader "MyShader/RenderDepth" { Properties { _Color ( "MainColor" , Color ) = ( 1 , 1 , 1 , 1 ) } SubShader { Pass { CGPROGRAM # pragma vertex vert # pragma fragment frag struct VertexData { float4 pos : POSITION ; } ; struct V2F { float4 pos : POSITION ; } ; V2F vert ( VertexData v ) { V2F res ; res . pos = UnityObjectToClipPos ( v . pos ) ; return res ; } float4 _Color ; fixed4 frag ( V2F v ) : SV_Target { fixed4 col = _Color ; return col ; } ENDCG } } } 就是简单的赋值一个颜色。 3、设置点 编辑器下可以直接接设置: 代码里也可以直接设置: using System . Collections ; using System .

Unity进阶:PlayMaker

匿名 (未验证) 提交于 2019-12-02 23:57:01
本文原创首发于以下网站: 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123 优梦创客的官方博客:https://91make.top 优梦创客的游戏讲堂:https://91make.ke.qq.com 『优梦创客』的微信公众号:umaketop 您可以自由转载,但必须加入完整的版权声明 PlayMaker基于状态机的可视化编程工具,playmaker内部实现会为其创建一个类,在其实例化和序列化时会有开销(建立通过缓冲池避免),对复杂度要求较高的逻辑也可以将其封装到PlayMaker的Action中 playMaker基于有限状态机,一个状态机包括若干个状态节点,组合在一起形成游戏逻辑。每个状态节点包括若干Action,这些Action对应的就是Unity内的具体游戏功能,如播放动画,移动位置 PlayMaker状态机不能单独存在(其本身也是继承自MonoBehaviour),选择一个GameObjec,- PlayerMaker -> Components -> Add FSM to Selected Objects;将状态机指定给选中的GameObject,一个GameObject可以有多个状态机 State(状态) 创建状态机后,默认拥有一个状态节点,也就是起始节点,名为State1 在PlayMaker窗口中点击鼠标右键

Unity的UGUI在SetParent后修改UI的localposition问题

匿名 (未验证) 提交于 2019-12-02 23:57:01
正常情况下,UGUI设置UI的localposition可以直接赋值 UIxxx . rectTransform . localPosition = new Vector3 ( lineLenght [ 0 ] / 2f , 0 , 0 ); 运行后在Unity的Inspector面板可以得到正确的()。 但如果 UIxxx . rectTransform . SetParent ( GameObx ]); UIxxx . rectTransform . localPosition = new Vector3 ( lineLenght [ 0 ] / 2f , 0 , 0 ); 运行后得到的坐标值是错误的。 正确的做法: UIxxx . rectTransform . SetParent ( GameObx ]); UIxxx . rectTransform . anchoredPosition = new Vector3 ( lineLenght [ 0 ] / 2f , 0 , 0 ); 通过设置锚点的坐标来设置UI的position。 运行后,在Inspector面板下可以看到正确的Rect Transform。 来源:博客园 作者: Afuness 链接:https://www.cnblogs.com/Afuness/p/11442545.html

Unity打包――Android和IOS

匿名 (未验证) 提交于 2019-12-02 23:56:01
(1)首先需要安装Android SDK和Java JDK。SDK需要添加tools目录,JDK需要分别添加jdk和jre目录 (2)打开BuildSettings (3)打开PlayerSettings (4)设置Android包的相关属性 (5)设置好相关属性后直接Build导出APK包 (1)在苹果电脑上执行打Android包的前4步,第五步时Build导出XCode工程 注意:导出的过程建议在mac上进行,否则可能会报一些奇怪的错误提示。 来源:博客园 作者: 懒人下蛋 链接:https://www.cnblogs.com/shirln/p/11437374.html

Unity Shader NPR 卡通渲染

匿名 (未验证) 提交于 2019-12-02 23:56:01
卡通渲染的主要原理包含两个方面: 1.轮廓线的描边效果 2.模型漫反射离散和纯色高光区域的模拟 描边 : 描边的实现方法采用将模型的轮廓线顶点向法线(或顶点)的方向扩展一定的像素得到。也可通过边缘检测(基于法线和深度)来实现。 漫反射离散 : 利用离散的Ramp纹理对漫反射光照效果进行采样,可以实现不同效果梯度的卡通渲染效果,例如: 注意此纹理的灰度变化并非均匀变化,而是类似于一种突变,仅在灰度变化的交界处进行了平滑过渡。这样的Ramp纹理正是卡通渲染所需要的颜色过渡模式,也是卡通渲染实现的核心内容。 也可增加阶度的个数实现更多层次的卡通渲染效果。 纯色高光区域 : 不同于真实渲染,卡通渲染的高光部分通常就是一个色块,这里主要的问题是处理高光边缘的锯齿问题。 这里可以利用smoothstep(-w,w,spec-threshold);在边缘范围[-w,w]进行平滑插值处理,其中w可以通过fwidth(spec);得到。 fwidth(spec);用于得到邻域像素的近似导数值。 Shader脚本如下,光照模型采用半兰伯特: 1 Shader "MyUnlit/CartoonShading" 2 { 3 Properties 4 { 5 _Color ( "Color Tint" , Color )=( 1 , 1 , 1 , 1 ) 6 _MainTex ( "Texture" ,

Unity Button按钮延迟

匿名 (未验证) 提交于 2019-12-02 23:56:01
把下面脚本放到Editor文件夹下,这样脚本继承Button之后,新声明的public变量才能在Inspector面板显示出来。 using System.Collections; using System.Collections.Generic; using UnityEditor; using UnityEditor.UI; using UnityEngine; [CustomEditor(typeof(MyButton), true)] [CanEditMultipleObjects] public class MyButtonEditor : ButtonEditor { private SerializedProperty delayTime; protected override void OnEnable() { base.OnEnable(); delayTime = serializedObject.FindProperty("delayTime"); } public override void OnInspectorGUI() { base.OnInspectorGUI(); EditorGUILayout.Space(); serializedObject.Update(); EditorGUILayout.PropertyField(delayTime);

Unity \"Feature 'out variable declaration' cannot be used because it is not part of the C# 4.0\"

匿名 (未验证) 提交于 2019-12-02 23:56:01
Unity2017升级到2019后,脚本全都不可用,报错后半段部分内容为“Feature `out variable declaration' cannot be used because it is not part of the C# 4.0 language specification”。 在Unity选择【Edit】――【Project Settings】――【Player】――【Other Settings】――【Configuration】大项下的【Scripting Runtime Version】选项选择【.NET 4.x Equivalent】即可解决问题。 来源:博客园 作者: xiaofei01gm 链接:https://www.cnblogs.com/yxfcnbg/p/11433530.html

Unity中创建Mesh

匿名 (未验证) 提交于 2019-12-02 23:51:01
什么是Mesh? Mesh是指的模型的网格,3D模型是由多边形拼接而成,而多边形实际上又是由多个三角形拼接而成的。即一个3D模型的表面其实是由多个彼此相连的三角面构成。三维空间中,构成这些三角形的点和边的集合就是Mesh。 原理 即动态创建一个Mesh,设置三角形和顶点数据,然后赋值给MeshFilter(增加mesh属性),通过MeshRenderer(增加材质并渲染出Mesh)绘制出来 Mesh的组成部分 1.vertices(顶点数据数组Vector3[]) 2.triangles(三角形顶点索引数组,int[]) 3.normals(法线向量数组,Vector3[]) 4.uv(纹理坐标数组,Vector2[]) 顶点坐标 :顶点坐标数组存放Mesh的每个顶点的空间坐标,假设某mesh有n个顶点,则vertex的size为n 法线 :法线数组存放mesh每个顶点的法线,大小与顶点坐标对应,normal[i]对应顶点vertex[i]的法线 纹理坐标 :它定义了图片上每个点的位置的信息. 这些点与3D模型是相互联系的, 以决定表面纹理贴图的位置. UV就是将图像上每一个点精确对应到模型物体的表面. uv[i]对应vertex[i] 三角形序列 :每个mesh都由多个三角面组成,而三角面的三个点就是顶点坐标里的点,三角形的数组的size = 三角形个数 * 3 创建一个立方体