u3d的脚本 被哪个u3d prefabb应用

U3D用C#作为脚本,它用C#最多的是哪个?面对类型吗?前辈_unity3d吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:66,322贴子:
U3D用C#作为脚本,它用C#最多的是哪个?面对类型吗?前辈收藏
火星时代作为专业unity3d研发培训机构,依靠多年游戏教学实力,让您快速成为u3d工程师.毕业月薪&12000起&.详情请点击&&&
"面对类型"是什么意思?我孤陋寡闻了吗用C#做unity大多是因为C#比JS普及,有基础好上手,不是说C#比JS多强,官方推荐的是JS,理论上,都精通的话,用哪个都能实现需要的功能,习惯而已个人感觉C#比较系统规范,JS简洁,开发迅速
因为unity里的c# script 就是c#的语法 而unityscript(javascript)的语法跟web的javascript还是有些差异
用作类,继承了u3d的行为基类,当你定义一个c#文件时,其实就是定义了一个类,它继承了u3d的功能,所以你只需要改写那些所继承来的成员函数和变量属性即可。
了解了很多信息,努力啃C#中。
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或扫一扫,访问微社区
后使用快捷导航没有帐号?
签到成功!您今天第{todayrank}个签到,签到排名竞争激烈,记得每天都来签到哦!已连续签到:{constant}天,累计签到:{days}天
关注:1613
当前位置: &
__________________________________________________________________________________
开发者干货区版块规则:
  1、文章必须是图文形式。(至少2幅图)
& && &2、文章字数必须保持在1500字节以上。(编辑器右下角有字数检查)
& && &3、本版块只支持在游戏蛮牛原创首发,不支持转载。
& && &4、本版块回复不得无意义,如:顶、呵呵、不错......【真的会扣分的哦】
& && &5、......
__________________________________________________________________________________
查看: 1897|回复: 15
Unity3D之Prefab不挂脚本保存数据
9排名<font color="#FF昨日变化5主题帖子积分
蛮牛币4872
在线时间64 小时
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
才可以下载或查看,没有帐号?
今天和同事一起发现了一个新科技,我们想在Editor下不给Prefab挂脚本,但是又想保存一些信息到Prefab上。
通过AssetImporter可以把数据保存在userData上,它是get set属性。
[C#] 纯文本查看 复制代码
[MenuItem(&1/1&)]
static public void Test()
string path = AssetDatabase.GetAssetPath(Selection.activeObject);
AssetImporter
import = AssetImporter.GetAtPath(path);
import.userData = &xuanyusong : MOMO!!!!&;
import.SaveAndReimport();
这样最终数据会记录在Prefab对应的.meta上。
5.png (96.11 KB, 下载次数: 0)
14:28 上传
雨松大大萌萌哒!
每日推荐:
4454/500排名<font color="#FF昨日变化4主题帖子积分
四处流浪, 积分 454, 距离下一级还需 46 积分
四处流浪, 积分 454, 距离下一级还需 46 积分
蛮牛币1242
在线时间170 小时
好方法,学习之,写楼主
每日推荐:
5760/1000排名<font color="#FF昨日变化16主题帖子积分
熟悉之中, 积分 760, 距离下一级还需 240 积分
熟悉之中, 积分 760, 距离下一级还需 240 积分
蛮牛币3586
在线时间201 小时
楼主 给写个应用例子吧~~
每日推荐:
3226/300排名<font color="#FF昨日变化1主题帖子积分
偶尔光临, 积分 226, 距离下一级还需 74 积分
偶尔光临, 积分 226, 距离下一级还需 74 积分
在线时间74 小时
但是这个在项目中的作用会大概有那些用呢?用来资源验证更新吗?大概照着试了下,应该是只有预制件才有这个信息,实例上还不清除怎么访问,望指教
每日推荐:
头像被屏蔽
0排名<font color="#FF昨日变化25主题帖子积分
在线时间9 小时
提示: 作者被禁止或删除 内容自动屏蔽
每日推荐:
61234/1500排名<font color="#FF昨日变化6主题帖子积分
蛮牛粉丝, 积分 1234, 距离下一级还需 266 积分
蛮牛粉丝, 积分 1234, 距离下一级还需 266 积分
蛮牛币1955
在线时间396 小时
不知道怎么用
[]: 就问你怕不怕 发帖时在路边捡到 1
蛮牛币,偷偷放进了口袋.
每日推荐:
285/150排名<font color="#FF昨日变化51主题帖子积分
初来乍到, 积分 85, 距离下一级还需 65 积分
初来乍到, 积分 85, 距离下一级还需 65 积分
在线时间66 小时
楼主经常写东西不写全,点到为止,不适合新手啊
每日推荐:
5874/1000排名<font color="#FF昨日变化14主题帖子积分
熟悉之中, 积分 874, 距离下一级还需 126 积分
熟悉之中, 积分 874, 距离下一级还需 126 积分
蛮牛币2178
在线时间274 小时
前排,学习一下
每日推荐:
61383/1500排名<font color="#FF昨日变化4主题帖子积分
蛮牛粉丝, 积分 1383, 距离下一级还需 117 积分
蛮牛粉丝, 积分 1383, 距离下一级还需 117 积分
蛮牛币1764
在线时间350 小时
不太懂,先留个印象
每日推荐:
9排名<font color="#FF昨日变化1主题帖子积分
蛮牛币2903
在线时间571 小时
每日推荐:
5673/1000排名<font color="#FF昨日变化3主题帖子积分
熟悉之中, 积分 673, 距离下一级还需 327 积分
熟悉之中, 积分 673, 距离下一级还需 327 积分
在线时间328 小时
不太懂,先留个印象
每日推荐:
61139/1500排名<font color="#FF昨日变化3主题帖子积分
蛮牛粉丝, 积分 1139, 距离下一级还需 361 积分
蛮牛粉丝, 积分 1139, 距离下一级还需 361 积分
蛮牛币1677
在线时间367 小时
每日推荐:
275/150排名<font color="#FF昨日变化22主题帖子积分
初来乍到, 积分 75, 距离下一级还需 75 积分
初来乍到, 积分 75, 距离下一级还需 75 积分
在线时间25 小时
如何获取这些参数!~
每日推荐:
61013/1500排名<font color="#FF昨日变化13主题帖子积分
蛮牛粉丝, 积分 1013, 距离下一级还需 487 积分
蛮牛粉丝, 积分 1013, 距离下一级还需 487 积分
蛮牛币1589
在线时间366 小时
真的哎,通过这个可以记录数据到 .meta文件, 好好玩,学习啦.
每日推荐:
5561/1000排名<font color="#FF昨日变化23主题帖子积分
熟悉之中, 积分 561, 距离下一级还需 439 积分
熟悉之中, 积分 561, 距离下一级还需 439 积分
在线时间86 小时
前排,学习一下
[]: 一个袋子砸在了 东坡肘子2010 头上,东坡肘子2010 赚了 1
每日推荐:
游戏蛮牛给予质量较高、影响力较大的unity相关技术开发者的荣誉称号
经过游戏蛮牛认证的蛮牛小翻译
连续签到30天
七夕浪漫情人
2015年蛮牛社区浪漫七夕 最美情话活动获奖者程序写累了,就来玩玩酷跑小游戏吧,嘿嘿。
雨松MOMO送你一首歌曲,嘿嘿。
Unity3D研究院之在开始学习拓展编辑器(一)
Unity3D研究院之在开始学习拓展编辑器(一)
围观55437次
编辑日期: 字体:
Unity拥有非常丰富的拓展编辑器接口,如果是在网上下载过别人写的插件,你会发现为什么它的监测面板视图和普通的不一样?其实是他通过代码自己绘制的监测面板,这篇博文MOMO带大家来学习编辑器。如下图所示,这是我通过代码拓展的面板视图。
下一条简单的脚本,绑定挂在摄像机上。
using UnityEngine;using System.Collections;&public class Test : MonoBehaviour{&&&&public Rect mRectValue ; public Texture texture;}
如图所示,在监测面板视图中它是一个很普通的结构。
下面我们需要在代码中动态的编辑它。请在你的Project视图中创建一个Editor文件夹,如果有的话就不用创建。把脚本MyEditor放进Editor文件夹中。
MyEditor.cs
1234567891011121314151617181920212223
using UnityEditor;using UnityEngine;&//自定义Tset脚本[CustomEditor(typeof(Test))] //在编辑模式下执行脚本,这里用处不大可以删除。[ExecuteInEditMode]//请继承Editorpublic class MyEditor : Editor { //在这里方法中就可以绘制面板。&&&&public override void OnInspectorGUI()
//得到Test对象&&&&&&&&Test test = (Test) target;
//绘制一个窗口
test.mRectValue = EditorGUILayout.RectField("窗口坐标",
test.mRectValue);
//绘制一个贴图槽
test.texture =&&EditorGUILayout.ObjectField("增加一个贴图",test.texture,typeof(Texture),true) as Texture;& }}
编辑器的用法非常简单,OnInspectorGUI()方法中可以绘制控件,EditorGUI和EditorGUILayout可创建编辑器控件,和GUI的用法非常相像。如图所示,在回到Test的面板中,新的面板已经映入眼帘。对于其它控件的使用,大家可以自行去API中查阅,。原理都差不多。
值得一提的是C#语言提供了一个非常赞的方法,它可以让你的数据更加的安全,并且可以在Get Set方法中监听到你获取与赋值的操作,推荐使用这种方法。简单的改一下Test.cs
123456789101112131415161718192021222324252627282930313233
using UnityEngine;using System.Collections;&public class Test : MonoBehaviour{& [HideInInspector][SerializeField] Rect pRectValue ;&&&&public Rect mRectValue
{&&&&&&&&get
return pRectValue;
}&&&&&&&&set
{&&&&&&&&&&&&pRectValue = value;&&&&&&&&}&&&&}& [HideInInspector][SerializeField] Texture pTexture ;&&&&public Texture texture
{&&&&&&&&get
return pTexture;
}&&&&&&&&set
{&&&&&&&&&&&&pTexture = value;&&&&&&&&}&&&&}&}
举例说明一下 [HideInInspector][SerializeField] 隐藏数据在面板,并且序列化。它可以帮我们永久保存数据,如果不加的话数值就会重置。就好比我先添加了一个贴图,一运行游戏刚刚添加的贴图就变成null了。
还是以texture为例,当我们使用texture对象的时候,它会进入get板块快获取私有变量pTexture的值。当编辑器更改texture的时候,会进入set版块,将数值保存在pTexture中。这样你的数据会更加安全,因为这里操作的是当前类中的一个私有变量。也可以在get/set版块中加入一些特殊的代码。
最后在update()或者OnGUI中就可以直接用texture 对象了。当然也可以是你定义的任意对象。
最后是本文的下载
欢迎大家踊跃留言,一起讨论学习。
本文固定链接:
转载请注明:
雨松MOMO提醒您:亲,如果您觉得本文不错,快快将这篇文章分享出去吧 。另外请点击网站顶部彩色广告或者捐赠支持本站发展,谢谢!
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
如果您愿意花10块钱请我喝一杯咖啡的话,请用手机扫描二维码即可通过支付宝直接向我捐款哦。
您可能还会对这些文章感兴趣!程序写累了,就来玩玩酷跑小游戏吧,嘿嘿。
雨松MOMO送你一首歌曲,嘿嘿。
Unity3D研究院之Prefab里面的Prefab关联问题
Unity3D研究院之Prefab里面的Prefab关联问题
围观33519次
编辑日期: 字体:
最近造了个轮子可以批量替换prefab里的prefab,欢迎大家测试~
最近在做UI部分中遇到了这样的问题,就是Prefab里面预制了Prefab。可是在Unity里面一旦Prefab预制了Prefab那么内部的Prefab就失去关联。导致与如果要改内部的Prefab需要把所有引用的地方全部改一遍。今天在逛国外网站看到了一个老外的思路,原文在这里
下面直接上代码
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
using UnityEngine;#if UNITY_EDITORusing UnityEditor;using UnityEditor.Callbacks;#endifusing System.Collections.Generic;&[ExecuteInEditMode]public class PrefabInstance : MonoBehaviour{ public GameObject prefab;&#if UNITY_EDITOR
// Struct of all components. Used for edit-time visualization and gizmo drawing public struct Thingy {
public Mesh mesh;
public Matrix4x4 matrix;
public List&Material& materials; }& [System.NonSerializedAttribute] public List&Thingy& things = new List&Thingy& ();& void OnValidate () {
things.Clear();
if (enabled)
Rebuild (prefab, Matrix4x4.identity); }& void OnEnable () {
things.Clear();
if (enabled)
Rebuild (prefab, Matrix4x4.identity); }& void Rebuild (GameObject source, Matrix4x4 inMatrix) {
if (!source)
Matrix4x4 baseMat = inMatrix * Matrix4x4.TRS (-source.transform.position, Quaternion.identity, Vector3.one);
foreach (MeshRenderer mr in source.GetComponentsInChildren(typeof (Renderer), true))
things.Add(new Thingy () {
mesh = mr.GetComponent&MeshFilter&().sharedMesh,
matrix = baseMat * mr.transform.localToWorldMatrix,
materials = new List&Material& (mr.sharedMaterials)
foreach (PrefabInstance pi in source.GetComponentsInChildren(typeof (PrefabInstance), true))
if (pi.enabled && pi.gameObject.activeSelf)
Rebuild (pi.prefab, baseMat * pi.transform.localToWorldMatrix);
}& // Editor-time-only update: Draw the meshes so we can see the objects in the scene view void Update () {
if (EditorApplication.isPlaying)
Matrix4x4 mat = transform.localToWorldMatrix;
foreach (Thingy t in things)
for (int i = 0; i & t.materials.Count; i++)
Graphics.DrawMesh (t.mesh, mat * t.matrix, t.materials[i], gameObject.layer, null, i); }& // Picking logic: Since we don't have gizmos.drawmesh, draw a bounding cube around each thingy void OnDrawGizmos () { DrawGizmos (new Color (0,0,0,0)); } void OnDrawGizmosSelected () { DrawGizmos (new Color (0,0,1,.2f)); } void DrawGizmos (Color col) {
if (EditorApplication.isPlaying)
Gizmos.color = col;
Matrix4x4 mat = transform.localToWorldMatrix;
foreach (Thingy t in things)
Gizmos.matrix = mat * t.matrix;
Gizmos.DrawCube(t.mesh.bounds.center, t.mesh.bounds.size);
}& // Baking stuff: Copy in all the referenced objects into the scene on play or build [PostProcessScene(-2)] public static void OnPostprocessScene() {
foreach (PrefabInstance pi in UnityEngine.Object.FindObjectsOfType (typeof (PrefabInstance))) &&&& BakeInstance (pi); }& public static void BakeInstance (PrefabInstance pi) {
if(!pi.prefab || !pi.enabled)
pi.enabled = false;
GameObject go = PrefabUtility.InstantiatePrefab(pi.prefab) as GameObject;
Quaternion rot = go.transform.localRotation;
Vector3 scale = go.transform.localScale;
go.transform.parent = pi.transform;
go.transform.localPosition = Vector3.zero;
go.transform.localScale = scale;
go.transform.localRotation = rot;
pi.prefab = null;
foreach (PrefabInstance childPi in go.GetComponentsInChildren&PrefabInstance&())
BakeInstance (childPi); }&#endif}
用法比较简单,比如我有两个Prefab,inside嵌入在Big里面。如下图所示,把PrefabInstance脚本挂在Big上,然后把inside拖入下方。
OK 无论怎么修改inside这个Prefab,当实例化Big的时候都能得到最新修改的Inside这个Prefab。
持续思考:
界面预览问题,就是我在布界面的时候,我需要把子集Prefab界面控件拖进来预览效果。如果用上述思路UI的Prefab就必须通过脚本自动生成。一份是预览用的也就是不需要脚本的,一份是只带脚本运行时动态生成的。在处理自动生成UIPrefab的时候可以利用tag 比如像这种需要内嵌的Prefab标记一个特殊的tag,在Editor下完成Prefab的导出。另外布界面的时候不需要绑定脚本,而上述脚本的绑定也应该由Editor导出Prefab的时候完成。
总之一切布界面的时候只操作Prefab不操作脚本。
最近造了个轮子可以批量替换prefab里的prefab,欢迎大家测试~
如果有更好的方法欢迎各位朋友在下面给我留言,谢谢。
本文固定链接:
转载请注明:
雨松MOMO提醒您:亲,如果您觉得本文不错,快快将这篇文章分享出去吧 。另外请点击网站顶部彩色广告或者捐赠支持本站发展,谢谢!
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
如果您愿意花10块钱请我喝一杯咖啡的话,请用手机扫描二维码即可通过支付宝直接向我捐款哦。
您可能还会对这些文章感兴趣!

我要回帖

更多关于 u3d prefab 关联丢失 的文章

 

随机推荐