unity3dsprit 2d 如何禁用除了transform 和spritRenderer以外的所有脚本呀?

程序写累了,就来玩玩酷跑小游戏吧,嘿嘿。
雨松MOMO送你一首歌曲,嘿嘿。
NGUI研究院之UISprite和UITexture浅谈(十二)
NGUI研究院之UISprite和UITexture浅谈(十二)
围观74031次
编辑日期: 字体:
NGUI的三大组件,UILabel、UISprite、UITexture,它们三个同时都继承UIWidget。先回到一个很郁闷的话题上,到底是优化DrawCall还是优化内存。
UISprite :
NGUI引入图集的概念,不考虑ABA叠层的情况下,一个图集内的图片用UISprite,那么它就是一个DrawCall。但是如果你做了一个图集是的。此时你的界面上只用了图集中的一张很小的图,那么很抱歉这张大图都需要载入你的内存里面,1024就是4M的内存,如果你做了10个1024的图集,你的界面上刚好都只用了每个图集里面的一张小图,那么再次抱歉你的内存直接飙40M。另外生成出来的Atlas我记得默认会打开mipMap的选项,mipMap是摄像机离得远近用不同的图片,用来减少渲染,可是UI绝对不会出现远近之分,mipMap会让你的包占更大的容量,因为是两张图。
如下图所示,Atlas图集生成完以后,选择Advanced,不要勾选Generate Mip Maps ,也不要勾选Read/Write Enabled ,不然1024在内存里就不4M了将变成8M。。
那么NGUI的内存怎么施放呢?我建议最好不要手动施放,因为Unity有一套非常完善自动施放内存的方法。如果你的项目不变态,切场景的时候就用异步切换场景。
yield return Application.LoadLevelAsync(name);
我发现很多人喜欢切场景的时候,在调用一下Resources.unloadunnsedAssets,这是多此一举的。
Resources.UnloadUnusedAssets ();
当场景切换完毕后,Unity会自动施放没有被引用的内存。 我记得NGUI3.X某一个版本是存在内存泄漏的问题,后来我们专门升级了新版本,扯远了,回到正题!
UITexture:它完全没有图集的概念,使用起来非常的灵活,只需要把图片挂上去就行了。这样内存里只会占用你这一张图的大小,内存虽然小了但是DrawCall就上去了。因为每一张UITexture就是一次DrawCall。如果你发现你的UITexture图片大小不对了,是因为图片拖进Unity默认图片的格式会设置成Texture,它的NonPower of2 是默认打开的,所以他会缩放你的图片成2的幂次方,所以你可以把图片格式改成GUI。
图片格式: NGUI生成的图集的图片格式是PNG,但是无论是什么格式的图片,Unity都会自己搞一套格式,并且打包的时候也不会用你文件夹下图片的格式,而是Unity自己的格式。如果你用UITexture你可以真对每一张图来修改它的格式,比如一些颜色数比较少的图片,你可以直接用16bit,如果你的图片没有用到透明,你可以用pvr或者etc,这样你的图片会更小。可是UISprite就不行,只要其中有一张小图用了透明,你就得用RGBA32,不然UI就会很难看,你可以自己试试。
除了UITexture 和 Atlas的图片没办法以外(因为必须有透明),不是建议是必须,你的贴图无论如何都必须是2的幂次方。因为只有2的幂次方图片 并且没有透明通道才会被压缩,IOS会压缩成pvr格式,Android会压缩成ETC格式,压缩以后图片会小很多的,好几倍的小。
人物贴图、场景贴图、特效贴图、一定要2的幂次方!切记!!如下图所示,同样的贴图大小。
RGBA 32 大小 1M
Android ETC 大小170.7KB
IOS PVR 大小 170.8 KB
我觉得界面中那些重复性比较高的图片最好打成图集,而一些原画,或者背景图建议直接使用UITexture。还有NGUI的图集其实很占用内存,也很占用空间,为了优化效率尽量让策划拖妥协让UI尽可能的复用。
所以做项目初期就要好好的管理自己的图集,这也是个很郁闷的话题,因为需求一直都在变所以你很难规划你的图集,你不知道美术会设计出来什么样的图,你也不知道策划会设计出来什么样的界面,所以你很难去确定你的公共图集 还有 界面特有图集该如何来规划。因为一不小心你的图集就会超过1024,你也不知道那些资源复用性最高。。这也是我觉得NGUI最郁闷的一点。。如果那一天做UI不用自己去规划图集而是运行时系统最优选择,那该多好呀!!!
本文固定链接:
转载请注明:
雨松MOMO提醒您:亲,如果您觉得本文不错,快快将这篇文章分享出去吧 。另外请点击网站顶部彩色广告或者捐赠支持本站发展,谢谢!
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
如果您愿意花10块钱请我喝一杯咖啡的话,请用手机扫描二维码即可通过支付宝直接向我捐款哦。
您可能还会对这些文章感兴趣!【新人求助】关于NGUI里Tween组件的问题~【unity3d吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:88,388贴子:
【新人求助】关于NGUI里Tween组件的问题~收藏
啊,大家好。我设计了两个界面sprit3和sprit4用来测试界面切换的动画效果,两个界面上各有一个按钮来控制对方显示,在sprit3界面上利用Tween Alpha控件设置了Alpha值从0到1的渐显,播放时间为1S,但是用sprit4上的按钮(已经添加了UIPlay Tween脚本)来使其逆向播放实现渐隐效果的时候,播放动画有错误,sprit3直接显示出来,没有1s的动画效果,想问下大家是不是遇到过我这个错误,有什么解决的方法吗?如图 Play direction 已经设置为Reverse:
来这里在线学习Unity!
同样的问题
搁置很久了
每次播放完成gameObject.GetComponent&UITween&().Reset();,就行了,在播放时候就激活一下enable=true就行了
在播放的时候,加上 gameObject.GetComponent&UITween&().Reset();比如 gameObject.GetComponent&UITween&().enable= gameObject.GetComponent&UITween&().Reset();然后播放的时候 gameObject.GetComponent&UITween&().enable= gameObject.GetComponent&UITween&().Reset();
NGUI里面有很多tween脚本,比如TweenPosition、TweenColor、TweenAlpha等等,每个脚本都有一个begin方法,可以直接从代码里面设置动画,参数包括初始值、结束值、持续时间等等。熟悉代码的话很方便,一句话就解决了,不需要在界面上添加各种脚本、各种参数。
可以。begin指令是可以多次使用的,每次都可以使用新的值。比如位移,使用TweenPosition.Begin (游戏物体 , 持续时间 , 目标点vector3坐标);指令即可。NGUI的tween还是很方便的,有很多种指令。
这是我写的测试用的代码,不知道为何不行。。。求解答一下
登录百度帐号官方文档:
Unity支持三种shader:
1) Surface Shaders: 主要处理光照和阴影,利用了Unity的光照流水线,是一种较高层次的抽象。如果不使用光照则不要使用这种shader,因为会有不必要的性能消耗。使用Cg/HLSL编写shader代码,但最终的shader是需要编译生成的。
2)Vertex and Fragment Shaders: 这个就是一般话的shader了,可以实现任意效果,当然也要处理所有的事情,并且不能利用Unity的光照系统了。同样也使用Cg/HLSL编写。
3)Fixed Function Shaders: 固定功能,只能实现简单效果,且某些平台支持不好,因此已经不推荐使用了,完全使用ShaderLab编写。
ShaderLab:
以上三种shader都需要使用ShaderLab格式封装。基本的结构是:
Shader “MyShader” {
Properties {
_MyTexture (“My Texture”, 2D) = “white” { }
// other properties like colors or vectors go here as well
SubShader {
// here goes the ‘meat’ of your
// - surface shader or
// - vertex and fragment shader or
// - fixed function shader
SubShader {
// here goes a simpler version of the SubShader above that
// can run on older graphics cards
核心内容写在SubShader中,根据不同平台从上往下找到可以支持的执行。
代码中动态切换shader:
var sprite_renderer = FooObject.GetComponent ();
sprite_renderer.material.shader = Shader.Find (“Custom/MyNBEffect”);
注意:Shader.Find会去创建Shader,某些平台可能会卡一下,最好把shader预先创建好。方法是在Project Setting/Graphics里面,把自定义shader加入到“Always Included Shaders”里面。
ps:共享一个实用的shader, sprite变灰:
Shader "Custom/SpriteGray"
Properties
[PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {}
_Color ("Tint", Color) = (1,1,1,1)
[MaterialToggle] PixelSnap ("Pixel snap", Float) = 0
"Queue"="Transparent"
"IgnoreProjector"="True"
"RenderType"="Transparent"
"PreviewType"="Plane"
"CanUseSpriteAtlas"="True"
Lighting Off
ZWrite Off
Fog { Mode Off }
Blend One OneMinusSrcAlpha
#pragma vertex vert
#pragma fragment frag
#pragma multi_compile DUMMY PIXELSNAP_ON
#include "UnityCG.cginc"
struct appdata_t
float4 vertex
: POSITION
float4 color
float2 texcoord : TEXCOORD0
struct v2f
float4 vertex
: SV_POSITION
fixed4 color
half2 texcoord
: TEXCOORD0
fixed4 _Color
v2f vert(appdata_t IN)
OUT.vertex = mul(UNITY_MATRIX_MVP, IN.vertex)
OUT.texcoord = IN.texcoord
OUT.color = IN.color * _Color
#ifdef PIXELSNAP_ON
OUT.vertex = UnityPixelSnap (OUT.vertex)
return OUT
sampler2D _MainTex
fixed4 frag(v2f IN) : SV_Target
fixed4 c = tex2D(_MainTex, IN.texcoord) * IN.color
c.rgb *= c.a
float gray = dot(c.xyz, float3(0.299, 0.587, 0.114))
c.xyz = float3(gray, gray, gray)
扫码向博主提问
非学,无以致疑;非问,无以广识
擅长领域:
其中核心代码就是Shader抠图和移动端的交互功能了 , 这里我把功能剥离开来 , 将工程打了包上传了 , 有感兴趣的友友欢迎交流 .Shader:Shader &Sprites/Mine&...
// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'
Shader &UI/Unlit...
前言还在苦于自己写的shader不能被sprite使用吗?
对,这个问题也困扰过我,所以我将它解决了。
然后顺便实现了简单抠图。。。。真的是简单抠图。。。正文按照习惯,首先放图,放代码。
没有更多推荐了,using UnityE
using System.Cusing UnityEngine.SceneM
public class API_07Vector : MonoBehaviour {//Vector2
v = Input.mouseP //
--像素是一个长度单位,,一个位置// 结构体,---使用, Vector 2 // 修改位置, // 值类型, 没有对象的啊啊啊
不能对象点 字段啊啊啊//transform.position
= new Vector3 (0,0,0);
//dui //transform.position.x
// 对象 cuo //---------------------------------- 不能通过对象赋值, 但可以通过结构体,给赋值// Vector3 pos = transform.
// pos.x = 10;
// ????????? 这为啥可??????????????????????????
// transform.position =// Use this for initialization// Stream Assest ---资源不会压缩,其他会压缩,路径啥都不会改变
音频视屏 AssestBudoule // 资源不会合并,public Tpublic Tvoid Start () {
// Vector3 a = new Vector3 (0,0,1);
// Vector3 b = new Vector3 (0,0,4);
// Vector3 c = new Vector3 (1,1,1);
// float m
// Vector3 n = a.
// float A =
Vector3.Angle (a, b);
// Vector3.Cross (a, b);
// Vector3.Project (c, a);
// Vector3 F = Vector3.// Vector3.Lerp (a, b, 0.1f);
// Vector3.Slerp (a, b, 0.1f);
// Vector3.MoveTowards (a, b, 0.1f);
// Vector3.SqrMagnitude (a);// ------------------------//Random.InitSate(0);//float AA = Random. // 0-1随即数字//print (System.DateTime.Now.Ticks);//当前时间 -???//transform.position = Random.insideUnitCircle*5; // 长度1 *5 的圆形,随即再圆形的坐标
在 X Y 平面上, Z是0 的 ;//transform.position = Random.insideUnitSphere*10 ;// 球体内随机 //-----------------------------------//四元素的旋转//transform.rotation = Quaternion.Euler(new Vector3(0,0,0)); //四元素旋转的 ;// 欧拉角
类型//transform.eulerAngles = new Vector3(0,0,0);
// 方便人设置的//Debug.Log (transform.rotation); // 0001 //Vector3 dir = enemy.position - p.// 望向敌人
/, 一个旋转---- 前方的
//p.transform.rotation = Quaternion.LookRotation (dir);print (Application.installMode);print (Application.isEditor); print (Application.isPlaying);print (Application.companyName);//当前问件
定 print (Application.dataPath);
//C:/Users/12967/Documents/New Unity Project Aniamtioions/Assets// 自己建的
不定print (Application.persistentDataPath);
//C:/Users/12967/AppData/LocalLow/DefaultCompany/New Unity Project Aniamtioions// 流, 不压缩,只读
定 print (Application.streamingAssetsPath);
//C:/Users/12967/Documents/New Unity Project Aniamtioions/Assets/StreamingAssetsApplication.OpenURL ("file:///D:/Unity/一期项目资源/C#课件/第十三讲:委托/_book/chapter3/2.html");Application.CaptureScreenshot ("截图");Application.Quit ();
// 编辑不能用print(
Application.isPlaying );
}// Update is called once per framevoid Update () {//print (Random.Range (4, 10));
// 为随机数--不能取到10 整数//print (Random.Range (4, 5.5f));
// 小数字Vector3 dir = enemy.position - p.dir.y = 0;Quaternion targtrt = Quaternion.LookRotation (dir);p.rotation = Quaternion.Slerp (p.rotation ,targtrt, Time.deltaTime);
// Vector3 pp = p.
// Vector3 pos = Vector3.Lerp (enemy.position, pp, Time.deltaTime);
// p.position =//p.rotation = Quaternion.Lerp (enemy.position, p.rotation, 0.1f);if(Input.GetKeyDown(KeyCode.A)){UnityEditor.EditorApplication.isPlaying = // 退出 模式
SceneManager.LoadScene("aaa");SceneManager.LoadScene ("AA", LoadSceneMode.Additive); // 默认是Singe
销毁当前,加载下个,
这个是不销毁的意思;AsyncOperation OP = SceneManager.LoadSceneAsync ("dd");
// OP.progress }}
//=====================================================================
using UnityE
using System.C
public class API02_Time : MonoBehaviour {public int runCount = 10000;// Use this for initializationvoid Start () {// 性能测试, 测试方法的运行时间; 执行100万次--- 0.0几秒;贼几把快float time1 = Time.realtimeSinceSfor (int i = 0; i & runC i++) {Mth1 ();}float time2 = Time.realtimeSinceSDebug.Log (time2-time1);for (int i = 0; i & runC i++) {Mth2 ();}float time3 = Time.realtimeSinceSDebug.Log (time3-time2);}// Update is called once per framevoid Update () {//想这个方向移动,且移动这个方向的距离//transform.Translate (Vector3.forward*100);// 每帧1米,// transform.Translate (Vector3.forward);// 每帧之间的时间间隔
Time.deltaTime
俩次Update 的时间间隔;// 每帧--运行距离--- Vector3.forward*Time.deltaTime// 假设这帧是1秒, 1米// 假设这帧是0.5秒 1此就是半米
// 假设0.02 也就是50帧 ,
1* 50/1 // 每帧数移动的距离的和
---得到一秒内游戏运动的物体 // 1秒3 ---执行3次Update ---1S距离--0.3Vector3.forward+0.3Vector3.forward+0.3Vector3.forward// 1秒2帧---1帧时间--距离---1S距离--0.2Vector3.forward+0.2Vector3.forward。。。。transform.Translate (Vector3.forward*Time.deltaTime);//游戏运行时间,受暂停影响
//Debug.Log (Time.time);//游戏运行时间,受暂停影响//Debug.Log (Time.fixedTime + "Time.fixedTime");//每帧之间 游戏影响,//Debug.Log (Time.deltaTime+"Time.deltaTime");// Editor progectSeting
-- Time ---FixedTimeStep
----1 秒执行50帧数 // 固定//Debug.Log (Time.fixedDeltaTime+"fixedDeltaTime");//是Time.delateTime 的平滑的时间//Debug.Log (Time.smoothDeltaTime + "smoothDeltaTime");//游戏开始到现在运行 帧数//Debug.Log (Time.frameCount + "frameCount");//游戏运行时间, 游戏暂停,时间还会一直增加//Debug.Log (Time.realtimeSinceStartup + "realtimeSinceStartup");//游戏运行时间, 游戏暂停,时间还会一直增加//Debug.Log (Time.unscaledTime + "Time.unscaledTime ");// 场景为单位,计算游戏运行时间//Debug.Log (Time.timeSinceLevelLoad + "timeSinceLevelLoad");// 0 暂停
time.DlateTime 会
乘以 Time.timeScale
所有使用这个移动的物体会暂停 // 1 正常 设置时间的比例//Debug.Log (Time.timeScale + "Time.timeScale ");}void Mth1(){int i = 1 + 2;}void Mth2(){int j = 1 * 2;}
================================================================
using UnityE
using System.C
/// &summary&
/// &/summary&
public class API01 : MonoBehaviour {
// public Vector3 _P
// public Vector3 _R
// public Vector3 _S
// // Editor 模式能运行,发布后无论啥品台都会,不执行 ---不运行项目时候可以执行,运行后就不执行了
// // 1,点击组件这个组件后,点击右边设置,然后Reset重置数据
// // 2,当被附件,即添加组件后会,执行该方法,
// // 可以推出---组件的数据重置---写在这里面
// void Reset()
// Debug.Log ("hahahh");
// _Position = Vector3.
// _Rotation = Vector3.
// _Scale = Vector3.
// // 当物体被隐藏---这三个都不执行 Awake()
Start () OnEnable()
// // 1 当场景运行时候
// // 2 物体实例化后调用
// // 3 只一次---脚本激活不激活只要有脚本都会调用void Awake(){
Debug.Log ("Awake");}
// // 1 只一次,脚本不激活,不会被调用
// // 2, awake 和enable 之后执行
// // Use this for initializationvoid Start () {Debug.Log ("Start");}
// // 1 启用的时候,物体被激活的时候,
// // 2 多次执行void OnEnable(){Debug.Log (" OnEnable(");}
// // Update is called once per frame
// //和游戏设备有关系,如果 运算多了,实际每秒运行了20次,也就是20帧;
// void Update () {
// Debug.Log ("Update");
// // 固定的update 每秒60次和游戏的性能没关系,CF的子弹,
// // 但是FixedUpdate 是固定的60秒;
// void FixedUpdate()
// Debug.Log (" FixedUpdate");
// // 在每update 之后的一帧后执行;
// void LateUpdate()
// Debug.Log ("LateUpdate");
// 取消激活的时候// 多次执行void OnDisable(){Debug.Log (" OnDisable");}
// 【渲染的指令】#region//-----------------------------------------// 刚出现在屏幕, 不再输出,出现输出
// void OnWillRenderObject()
// Debug.Log (" OnWillRenderObject");
// Debug.Log ("AHAHAH");
// void OnPreCull()
// Debug.Log ("
OnPreCull");
// void OnBecameVisible()
// Debug.Log (" OnBecameVisible");
// void OnBecameInvisible()
// Debug.Log ("OnBecameInvisible");
// void OnPreRender()
// Debug.Log (" OnPreRender");
// }//再场景中,无论看见看不见
// void OnRenderObject()
// Debug.Log (" OnRenderObject");
// void OnPostRender()
// Debug.Log (" OnPostRender()");
//// void OnRenderImage()
//// Debug.Log (" OnRenderImage");
'#endregion
// // 1 编辑模式下使用----绘制物体矩阵的// 2 gimas --scece 视图中是有这个选项的void OnDrawGizmos(){}//2ci
// void OnGUI()
开始一次,??暂停不运行
// void OnApplicationPause()
// Debug.Log (" OnApplicationPause");
删除物体// 2
删除该脚本void OnDestroy(){Debug.Log (" OnDestroy()");
=======================================================================
using UnityE
using System.C
using UnityEngine.UI;
using S // 异常引入空间
public class API03_GameObject : MonoBehaviour {public GameObject prefab1; public GameObject Cube1;public Sprite sprit2;public Tpublic Ipublic RawImage rawIprivate GameOpublic GameO// Use this for initializationvoid Start () {//GameObject #region// 没有物体的// new Object ();
// 1 第一种创建方法//常场景多了一个空物体 ,,卧槽// new GameObject ();//空物体,名字叫cube // new GameObject ("Cube");
// 预制体的或场景中的游戏物体去克隆
特效游戏角色等//new GameObject(prefab);
错//GameObject.Instantiate(prefab1);//GameObject.Instantiate (Cube1);//创建原始的图形
,给物体添加组建//GameObject.CreatePrimitive (PrimitiveType.Plane);//GameObject go=GameObject.CreatePrimitive (PrimitiveType.Sphere);//go.AddComponent&Rigidbody& ();//自己定义,也是一样添加//go.AddComponent&API01& (); // 确定游戏物体是否激活//bool
isActive = go.activeInH//Debug.Log (isActive);// 不需要渲染,不运行UPdate ,但是还是占用内存的 //go.SetActive (false);//Debug.Log (go.activeInHierarchy);// ------------// 游戏-场景- 物体(GameObject )--组建(
自己的脚本 )// System.Object
UnityEngine.Object // 继承关系
GameObject
// inherited 继承 // 输出物体的名字 //Debug.Log(go.name);//Debug.Log(go.GetComponent&Transform&().name); // 继承来的属性// 得到的是这个组建的对象--- 销毁这个对象-----组建就被销毁了????????、
//!!!!! 可以认为这个组件 是一个实例化的对象吗????//Destroy(go.GetComponent&Rigidbody&());//Destroy(go); //推荐 在场景中不存在,但还是在一个垃圾池子中,//DestroyImmediate(go); // 不推荐// 不销毁 //DontDestroyOnLoad(transform.gameObject);// 只找到第一个就返回// 静态方法
类// 不查找未激活物体的//Light light
= Object.FindObjectOfType&Light&();//light.enabled = // 不能通过对象调用 gameObject. 出不来// 相当于在自己的脚本中调用自己的方法 ---继承//Transform [] trans = FindObjectsOfType&Transform&();//foreach (var item in trans) {//Debug.Log(item.name);//}//------------------------------------------// sprite HE texture 区别// 图片放入场景中---就是gameObject
---- 场景中的物体都是GameObject ---再拖入文件就是预制体了// 1 sprit 一般做UI的可以←图集--优化DrawCall ,但Texture 也行,Texture 做大的背景 一个DrawCall, 但是2的N次方再Andriod 和IOS 品上占资源很小 // 2 sprit 可以做动画,但是Texture 是不行的// 3 sprit Render 组件可以让物体 sptite 直接拖入场景中
,Texture 不能 拖入场景// 4 大的纹理底纹就使用Textture ,一般模型贴图,Sprit UI 的
// Sprite go1 =
Instantiate&Sprite&(sprit2);
// go1.name = "sprite";
// image.sprite = go1;// 报个小错误
// Texture t = Instantiate&Texture&(tex);
// t.name = "texture";
// rawImage.texture =//-------------------------------------// 不能找影藏,
// try catch
// cube = GameObject.Find("Cube");
// cube.SetActive(false);
// //小异常
// catch( NullReferenceException
excepiton )
// Debug.Log("没有啊");
// // 返回第一个
// }//所有异常
// catch( Exception
// Debug.Log("all 异常");
// }//都执行
// finally
// Debug.Log("找倒找不到执行---");
// GameObject camera = GameObject.FindGameObjectWithTag("MainCamera");
// camera.SetActive(false);
// //数组//GameObject[] c = GameObject.FindGameObjectsWithTag("MainCamera");//GameObject cam = GameObject.FindWithTag("MainCamera");///-----------------------------------------------------------/// ///对象方法//1 组件类// 得到自身的一个组件,多个只找第一个 Transform trans = GetComponent&Transform& ();// 多个组件 Transform [] transs =
GetComponents&Transform&();//孩子和自己的组件 --同类型的
Transform [] t =
GetComponentsInChildren&Transform&();// 父亲物体的组件和自己的组件---同类型的 Transform [] t2 = GetComponentsInParent&Transform&();//2 Message 类// 1
自身+子物体
广播方法, 不需要接收谁接收 只要 自己和孩子有这个方法名字都被调用
----拿到组件的引用也能发消息,可以减少耦合性,高了不好//
SendMessageOptions.DontRequireReceiver-- 不一定需要,由就传每酒算了,
还有一个必须由接收者// target.BroadcastMessage("Attack","Hellow",SendMessageOptions.RequireReceiver);// 2
对一个物体上所有脚本中有这个名字的方法,,发送消息; 只自己// target.SendMessage("Attack","Hellow",SendMessageOptions.RequireReceiver);// 3
向上发送消息,每级数是只能有一个父亲物体的 // target.SendMessageUpwards("Attack","hehe",SendMessageOptions.DontRequireReceiver);#endregion
}// Update is called once per framevoid Update () {}
=================================================
//using UnityE
//using System.C
//// 不点开始再编辑模式下会运行
// //[ExecuteInEditMode]
///// &summary&
MOnobehiever
多个组件,拖拽,创建多个inspector 面板
///// &/summary&
//public class API04_Monobehiever : MonoBehaviour {
// public GameO
// // Use this for initialization
// void Start () {
// //基本属性
// #region
//// Debug.Log (this.isActiveAndEnabled);
// true 这个脚本 自身是否被激活
//// Debug.Log (this.enabled);
// true 自身是否被激活
//// enabled =
//// //禁用自己都能使用??????
//// //但是Update 不能用了,会把start 方法执行完
//// Debug.Log (name);
//// Debug.Log (tag);
//untagged
//// Debug.Log (gameObject);
//// Debug.Log (transform);
//// Debug.Log (@" /\
/_ _ _ _ \
// #endregion
// //Invoke
5秒后调用一次啊 ,
调用可以由返回值但是不能由参数----所以才会由协成啊
// //Invoke ("GetName",5f);
// //Invoke ("Add",10f); // 没有
// //InvokeRepeating("GetAge",3,0.5f);
// //----------------------------------
// //Coroutines
// //IEnumerator
// private IE
// // 脚本没由Update方法就没有禁用的选项
// // Update is called once per frame
// void Update () {
//---改变场景输出
// // Debug.Log ("不点开始再编辑模式下会运行");
// //不继承MOno 是不能使用额啊
// //print ("Monebehiever的静态方法");
// //--------------------------
// //添加倒掉用队列中,调用完后会为没掉用时True
// //bool res =IsInvoking("GetName");
// //Debug.Log (res);
//开启协成---1 方法名子
2 方法调用
// StartCoroutine(Add(12,23,12)); //47
// if (Input.GetKeyDown (KeyCode.A))
// ie = ChangeColor ();
// StartCoroutine (ie);
// //通过名字只能传递一个参数
// StartCoroutine ("ChangeColor");
// //停止协成
// if (Input.GetKeyDown (KeyCode.S))
// StopCoroutine(ie);
// StopCoroutine("ChangeColor");
// public int GetName()
// Debug.Log ("GetName()。被5秒后调用");
// return 5;
// public int Add (int x , int y ){
// int z = x +
// public int GetAge()
// Debug.Log ("GetAge(),1秒几次");
// return 1;
// //--------------------------------------------------
// // 方法迪调用----顺序执行,先指执行完方法再执行下一个;
// // 协成方法 -- 不会再等协程执方法行完,就继续向下执行--执行下面的方法;
// // 返回值是---是IEnmerator
不能由返回值???卧槽
// IEnumerator Add (int x ,int y,int z ){
// int m = x + y+z;
// print ("11");
// yield return new WaitForSeconds (2f);
// Debug.Log (m);
// IEnumerator ChangeColor()
// for (float i = 0; i & 1; i += 0.1f)
cube.GetComponent&MeshRenderer& ().material.color = new Color (i,i,i,i);
//// // 必须由这个返回值
//// // 每次都会等一秒,所以会有是//10个阶段;
//// yield return new WaitForSeconds (1f);
///--------------------------------------------
// //死循环
// for(;;)
// //color 值类型的啊
// Color color = cube.GetComponent&MeshRenderer& ().material.
// cube.GetComponent&MeshRenderer& ().material.color = Color.Lerp (color, Color.red, 0.02f);
// //cube.GetComponent&MeshRenderer& ().material.color= color_;
// yield return new WaitForSeconds (0.1f);
// if (Mathf.Abs(Color.red.g - color.g)&=0.1f)
// /// &/summary&----
// /// 有碰撞器,射线识别的
// /// 没有是触发器,找倒物理射线点击的
// void OnMouseEnter(){
// Debug.Log ("OnMouseEnter()");
// void OnMouseExit(){
// Debug.Log ("OnMouseExit");
// void OnMouseOver(){
// Debug.Log ("o");
// void OnMouseDown(){
// Debug.Log ("d");
// void OnMouseUp(){
// Debug.Log ("u");
// void OnMouseDrag(){
// Debug.Log ("ddd");
// //按下了,但是有不想触发了----手移走了。。。没执行
// void OnMouseUpAsButton()
// Debug.Log ("OnMouseUpAsButton()");
==========================================================
using UnityE
using System.C
using UnityEngine.UI;
public class API05_delgateTest : MonoBehaviour {private int cc = 0;public
T// 自己又定义了一个,没干系的事件;// event
不能用对象调用// 委托定义再里面。 类字段定义使方法方法对象public event API05_Mathf.IndexD
//委托定义再外面 ,直接定义事件对象//public event IndexDprivate API05_Mathf API05_M; // Use this for initializationvoid Start () {t.text = 1.ToString ();a += Aa;// 单例子模式API05_Mathf._instance.indexEvent += BB;//}// Update is called once per framevoid Update () {}//public void Aa(int a ){cc =t.text = Convert.ToString (cc);}//
a 是指传入的值。传入的数值范围,会变化比比较后的范围大1 ;public void BB(int a ){cc =t.text = Convert.ToString (cc);}public void BtnCClick(){a (50);// API05_Mathf._instance.indexEvent (500);// 错的啊。事件不但能对像调用。}
========================================================
using UnityE
using System.C
using UnityEngine.UI;
//public delegate void IndexDelegate( int a) // 对的
//public event
IndexDelegate indexE 错
public class API05_Mathf : MonoBehaviour {public delegate void IndexDelegate( int a) ;public static API05_Mathf _//public delegate void IndexDelegate( int a)public event
IndexDelegate indexE// 结构体,Mathf 静态工具类 -----不用实例化去平凡调用方法// Use this for initializationpublic Text _private int _public
GameOvoid Awake(){_instance = }public int Index{set{indexEvent (value);}get{return _}}public void OnIndexChanged( int a ){
//_index = Mathf.Clamp (a, 1, 5);//----传入的值if (a &=1) {a= 1;} else if (a &=5) {a = 5; } _index =_text.text = _index.ToString ();}public void Onleftdown(){Index--;
}public void Onrightdown(){Index++;}void Start () {indexEvent += OnIndexC_text.text= 1.ToString ();//Mathf#region
// // 静态字段
//// //度数变弧度
是一个数值 0.017
// print (Mathf.Deg2Rad);
// //弧度变度数,乘以即可
是一个数值 380/PI*2
// print (Mathf.Rad2Deg);
// //表示一个无穷小的数
// print (Mathf.Epsilon);
// //无线大的数字
// print (Mathf.Infinity);
// //无线小的数字
// print (Mathf.NegativeInfinity);
// print (Mathf.Ceil(10.2f));
// print (Mathf.CeilToInt(10.2f));
// print (Mathf.Floor(-10.2f)); // -11
// print(Mathf.FloorToInt(10.2F));
// print (Mathf.Round(10.2f));
// //限制一个数字,再这个范围;
// // hp = Mathf.Clap(0.100);
// float a = Mathf.Clamp(Time.time,1,10);
// Debug.Log (a);
// // 最小角度
// Debug.Log (Mathf.DeltaAngle (370,10));
// Debug.Log (Mathf.Max (12,13));
// Debug.Log (Mathf.Pow(2,3));
//2 的3 次方
// Debug.Log(Mathf.Sqrt(2));
//2的平法根
// Debug.Log(Mathf.ClosestPowerOfTwo(20));//16 和2的平方最接近的数字#endregion}// Update is called once per framevoid Update () { float x = cube.transform.position.x;//float newx = Mathf.Lerp (x, 10, 0.1f);//差值//float newx = Mathf.Lerp (x, 10,Time.deltaTime);//匀速 ,没次0.02 米50帧1米, 10 米--
当前值 + 后面值,但是不会超过float newx =
Mathf.MoveTowards(x,10,0.02f);//cube.transform.position.x =
错, 不能没帧修改 float newxx = Mathf.LerpAngle(10,350,0.1f);
//t = 0 ,t 是速度,再0-10 变化float tf = 0;float newxxx = Mathf.PingPong(tf,10);//cube.transform.position = new Vector3 (newx, 0, 0);// 来回运动 cube.transform.position = new Vector3 (Mathf.PingPong(Time.time,10), 0, 0);Debug.Log (newxx);}
========================================================================
using UnityE
using System.C
public class API06_Input : MonoBehaviour {// Use this for initializationvoid Start () {}// Update is called once per framevoid Update () {if (Input.GetKeyDown (KeyCode.A)) {//按下的一帧执行Debug.Log("GetKeyDown");}if (Input.GetKeyUp(KeyCode.A)) {//松开的一帧执行Debug.Log("GetKeyUp");}if (Input.GetKey(KeyCode.A)) {//按下后----一值执行 ---抬起来不执行Debug.Log("GetKey(KeyCode.A)");}if (Input.GetMouseButton(0)) {//按下后----一值执行 ---抬起来不执行Debug.Log("GetMouseButton(0)");}if (Input.GetMouseButtonDown(1)) {//按下后----一值执行 ---抬起来不执行Debug.Log("GetMouseButtonDown(1");}if (Input.GetMouseButtonUp(2)) {//按下后----一值执行 ---抬起来不执行Debug.Log("GetMouseButtonUp(2");}//多个按键,触发同一个,事件,//形象,好懂if (Input.GetButtonDown ("Fire1")) {Debug.Log ("Fire1");}if (Input.GetButtonUp ("Fire1")) {Debug.Log ("Fire222");}if (Input.GetButton("Fire1")) {Debug.Log ("Fire133333");}Debug.Log(Input.GetAxis("Horizontal"));}
================================
using UnityE
using System.C
public class LOAD : MonoBehaviour {private GameOprivate GameO// Use this for initializationvoid Start () {
a = (GameObject)Resources.Load ("GameObject");go = Instantiate (a);
//go.SetActive (true);}// Update is called once per framevoid Update () {// go = Instantiate (a);}
============================================
using UnityE
using System.C
public class Target : MonoBehaviour {public Target (string namee){}// Use this for initializationvoid Start () {}// Update is called once per framevoid Update () {}void Attack (string a ){
Target t = new Target (a){ };Debug.Log (t.namee);Debug.Log (aaa+a);}
Unity3D中生命周期函数的应用
//今天的生命周期函数是Unity3D中比较常用的,在理解的基础上我们一定要会默写这些单词,包括大小写的区别。
Reset(在编辑状态下脚本被挂到游戏对象上的时候被调用,例如不运行程序,...
Unity3D基础案例-见缝插针
引言:人生无处不代码,无代码处不人生。小生作为U3D学习之旅中的一员,将基础案例主要开发流程记录下来,与共同兴趣的你分享。开发版本:unity 5.3.5f适合人群:初学Unity者源文件链接请见文末...
Unity常用API学习
因为公司是使用Unity3D做游戏的,因为以前学过点C#于是开始研究研究Unity3D怎么玩耍的~,有理解不对的欢迎指责批评
Start()方法只执行一次
Update()会每帧执行一次...
Unity3D-C#脚本
生成的脚本中,生成的Start()方法,进行游戏初始化,只执行一次。Update()方法,会重复执行,可以监听用户动作或者游戏状态。
打印Log的两种方法:1.print(), 2.Debug.log...
【Unity3D】常用API学习笔记
【Unity3D】常用API学习笔记
1、MonoBehaviour类(UnityEngine命名空间中定义):
Awake:最开始调用,做一些初始化工作。建议少用,此刻物体可能还没有实例化出来,会影...
常用API(重点)
介绍: 应用程序编程接口,是一些预先定义的函数
Unity引擎提供了丰富的组件和类库,为开发者提供了非常大的便利,苏联从、掌握和使用这些API对于游戏开发效率提高很重要
...
记录并解析unity中经常用到的API1.Camera1.pixelRectpixelRect属性:摄像机渲染区间
此属性用于设置camera被渲染到屏幕中间的坐标位置。pixelRect属性...
OpenCV for unity是一套支持unity游戏引擎的程序,可以协助我们在Unity内部开发Opencv。(1)下载地址:https://download.csdn.net/download/...
一、事件函数执行的先后顺序FixedUpdate每秒执行固定次数,应该将处理跟物理相关的运动的代码放在FixedUpdate中。Update和LateUpdate跟硬件和代码性能有关,每秒执行次数不固...
没有更多推荐了,

我要回帖

更多关于 transformunity 的文章

 

随机推荐