unity3d学习体会——适合新手(虽然是新人发帖但还是想申精)
unity3d吧
全部回复
仅看楼主
level 11
狮子Bowen 楼主
学习U3D也有一段时间了,个人在学习的时候喜欢做一些笔记,写一些心得体会,回过头来看的时候才发现由于当时是从零开始的,所以写的比较细致,希望能对还在门槛阶段的U3D新手有一些帮助~
2014年06月26日 18点06分 1
level 11
狮子Bowen 楼主
怎么艾特吧主,是这样吗?@mayaxiaoan
2014年06月26日 18点06分 3
嘿嘿,, 楼主 ,你这边很逗啊...[哈哈]
2014年11月04日 03点11分
[哈哈]
2014年11月04日 03点11分
支持
2015年12月25日 02点12分
借楼 unity 2D交流群 219429865
2016年04月28日 08点04分
level 11
狮子Bowen 楼主
如果对大家有帮助一定要顶起来让更多的人看到哦~
2014年06月26日 18点06分 5
顶个111111111111111
2014年07月19日 14点07分

2015年07月28日 08点07分
level 11
狮子Bowen 楼主
Unity3D学习03
一:控制灯光的脚本:
Public Light aLight;
aLight = GameObject.Find("有灯光的一个物体名字").GetComponent<Light>();
//以上代码可以将代码信息传递给这个物体的光组件。
aLight.light.intensity = 一个小于8的float数;//这样就可以控制灯组件的亮度了。
注意,这样写完以后,在Inspector面板的选项处就不能为aLight设置目标了,否则会报错;
二:定时器:
Public float Max =10.0f;//定义一个最大的时间
Void Update()//在每一帧检测
{
if(max > 0.0f)
{
Max -= Time.deltaTime;
}
Else
{
Max=10.0f;
…………
}
}//每隔max时间执行else中代码;
2014年06月26日 18点06分 6
这个可以这么写: if(max >10){ …… max=0; }
2014年06月28日 12点06分
回复 thzy236 :对对,这个更好~
2014年06月28日 13点06分
楼主好人,求发文档,[email protected]
2014年07月03日 08点07分
回复 vachh :没有文档啊~
2014年07月03日 09点07分
level 11
狮子Bowen 楼主
Unity3D学习06
一:GUIText的添加
新建一个空物体,给它添加组件GUIText,然后设置一些基本参数。
在脚本中,通过:
GUIText text01;
text01 = GameObject.Find("空物体的名字").GetComponent<GUIText>();
text01.text = "你想显示的字"+一个数等等;
2014年06月26日 18点06分 10
回复 649471384 :广告请自己开帖谢谢
2015年07月07日 01点07分
level 11
狮子Bowen 楼主
NGUI学习01
一:Panel面板
1.分层,NGUI中每层可有多个空件
2.创建Panel:
NGUI->Open->UI Wizard->在Layer选项中选择层,在Camera选项中选择摄像机,创建成功
3.为Panel添加脚本:
新建空的物体放到panel下,为空物体添加panel脚本组件即可
然后就可以在这个panel下添加控件了
二:Label文本栏
1.在panel中添加Label控件
2.在属性面板调节相应属性
三:消息机制
1.直接将脚本附在按钮上,如button按钮,在脚本中实现OnClick()即可响应单击事件
2.使用SendMassage,为按钮添加Button Massage组件,设置Target,Function Name,Trigger,Include Children即可响应trigger事件,然后调用Target对象的Function方法。
3.使用UIListener,为按钮添加Event Listener组件。然后再任何一个脚本中即可得到该按钮的点击事件,得到方法为:
Void Awake()
{
GameObject button = GameObject.Find("这个按钮");
UIEventListener.Get(button).OnClick = 你想调用的方法名字,假如说为a;
}
Void a(GameObject button)
{
………
}
2014年06月26日 18点06分 11
其实我现在使用NGUI插件都是比较偷懒的,就是直接在Project面板的搜索栏搜索Control然后会出现一堆NGUI预制好的UI,直接拖入场景修修改改就可以用了,普通按钮简单的消息机制我使用的是为按钮添加UIButtonMessage组件然后设置Target和函数名就可以了~
2014年06月27日 04点06分
回复 狮子Bowen :能否举个例子 这个怎么加事件? [疑问] 美工表示看不懂 前边方法跟你一样 直接把按钮拖进去的
2014年07月03日 09点07分
回复 丿KingLee :1.为button添加组件UIButtonMessage 2.Target选项:将你要调的函数所在脚本所附物体拖入,函数必须是public型的,而且不带参数 3.Function Name选项:所调函数名,比如你要掉一个函数 public void show(){...} 这里就写show就好。 4.Trigger选项:可以选择事件类型
2014年07月03日 09点07分
回复 狮子Bowen :添加组件里没有UIButtonMessage 我用的是NGUI 3.5.7,你也是么? button本身有个UIbutton(script)组件它第一个属性就是 TWeen Target;二.没有Function name这个选项。 而且Trigger选项在UIPlay Sound组件下。。。。 感觉ngui的不同版本差别好大啊、 能不能加个QQ指导下?
2014年07月03日 10点07分
level 11
狮子Bowen 楼主
这个是跟同学做一个U3D的项目的时候当时设计的系统构架,现在看看,属于半吊子水平
2014年06月26日 18点06分 12
卧槽 什么梗 看到这里突然爆炸
2015年07月19日 09点07分
level 11
狮子Bowen 楼主
今天先发到这里吧,后面还有,希望可以和大家多多交流,有交流才有进步嘛~
最后还要@mayaxiaoan,全部是原创,全部是干货,跪求加精~
2014年06月26日 18点06分 13
2014年06月26日 19点06分
level 10
谢谢楼主,顶起。。
2014年06月26日 19点06分 14
level 10
谢谢分享,请问有网络部分吗?
2014年06月27日 00点06分 16
通信我在做项目的时候只用到了socket,其他的还没有涉及,最近准备做一个有关网络的软件,所以可能后续会有网络部分的心得哦~
2014年06月27日 04点06分
level 11
[哈哈]
2014年06月27日 01点06分 17
level 14
Substance Designer官网下载材质浏览器
楼主请问材质浏览器是那个啊
2014年06月27日 01点06分 18
这个说实话我不太清楚,之前学习的时候看到了所以先记下来还没有开始研究,目前材质的话我都是用PS做一些简单的贴图然后在在U3D里用的,还有下载一些材质包直接导入U3D然后用的~
2014年06月27日 04点06分
本来第一次装了Substance Designer可以导进去U3D~~后来重装了之后怎么弄都导不进去~~不知道是怎么回事~~纠结~~我看视频感觉Substance Designer的效果比在U3D里面做出来的好
2014年06月27日 04点06分
那是肯定的,U3D毕竟只是一个游戏引擎而不是专业的美工软件,所以很多东西需要借助第三方专业的美工软件来实现~
2014年06月27日 04点06分
你好,已经安装好player了,但是打开它后它让我加载一个(substance engine).dll)请问怎么处理
2014年10月28日 08点10分
level 11
狮子Bowen 楼主
刚刚起床,接着再更~
KGFMapSystem插件学习(小地图制作)
一:必需新建一个叫作mapsystem 的 layer
二:找到kolmich/KGFMapsystem/prefabs中KGFMapSystem这个预设,拖进工程
(这个插件比较好学,当时也没有写太多东西,不过功能真的很强大,很酷很炫,在做实景模拟项目的时候做出来的效果客户那边很是满意~)
2014年06月27日 04点06分 19
level 11
狮子Bowen 楼主
Unity学习07
一:绘制线段:
为物体添加linerendenerer组件,在脚本中获得该组件的引用后,增加position数组大小,设置position数组数值即可绘制折线。
在脚本中获取了Linerenderer组件后,可以使用
linerenderer.SetVertexCount (int numberOfPosition);
方法动态的为position的size赋值,
然后使用
linerenderer.SetPosition (int index, vector3 newPosition));
方法为第index个position赋值 ,达到扩展线条的效果。
二:脚本拷贝物体(prefab与instantiate)
1.获得要拷贝prefab的引用
GameObject wuti = GameObject.Find("要拷贝的预组件");
2.用instantiate拷贝
Instantiate(wuti, position, rotation);//将wuti拷贝到position位置,角度为rotation
3.使用局部坐标实现对较为规则的物体的描边
2014年06月27日 04点06分 20
回复 菩提小花归来 :没有试过
2014年12月04日 10点12分
level 11
狮子Bowen 楼主
Unity3D学习08
一:unity3d调用windows的资源管理器:
1.项目Assets文件夹新建Plugins文件夹,放入System.Windows.Forms.dll文件
2.脚本中using System.Windows.Forms;
3.代码如下:
public voidLoadMap()
{
WWWwww_map;
OpenFileDialogchoiceWindow = new OpenFileDialog ();
choiceWindow.Title = "请选择载入地图";
choiceWindow.Filter = "图片文件(*.jpg,*.png,*.bmp)|*.jpg;*.png;*.bmp";
choiceWindow.InitialDirectory= UnityEngine.Application.dataPath + @"/map";
choiceWindow.RestoreDirectory= true;
if(choiceWindow.ShowDialog()== DialogResult.OK)
{
www_map= new WWW("file://" + choiceWindow.FileName);
gameObject.renderer.materials[0].SetTexture(0,www_map.texture);
}
}
代码功能:打开资源管理器窗口,选中一副图片,并将图片作为gameobject的材质贴图。
2014年06月27日 04点06分 21
level 11
狮子Bowen 楼主
求精啊吧主@mayaxiaoan
2014年06月27日 04点06分 22
不好意思刚刚看到消息~~~ 这种好文当然必须精品~~
2014年06月27日 05点06分
多谢吧主大人,叩谢吧主大人,有了吧主大人的鼓励我后续放一些项目源码和大家交流交流吧~
2014年06月27日 05点06分
@mayaxiaoan 感觉吧主萌萌哒啊[哈哈]
2015年01月20日 03点01分
楼主建议一下什么书适合初学着
2015年04月24日 19点04分
level 11
狮子Bowen 楼主
Unity3D学习09
一:鼠标射线
1.Ray clickRay;//Ray代表发出的射线
RaycastHitclickHit;//RaycastHit储存一系列射线与物体碰撞的信息
clickRay =Camera.main.ScreenPointToRay(Input.mousePosition);
//指定发射射线的摄像机为主摄像机,获取当前鼠标屏幕坐标并将其转换成射线。
Physics.Raycast(clickRay, out clickHit);
//将clickRay的信息储存到clickHit中。
//也可当做判断条件是否发生碰撞如:if(Physics.Raycast(clickRay,out clickHit)){…}
以下是当时在网上淘的鼠标射线的知识,很有用处,先贴在这里让大家分享~
射线:射线是3D世界中一个点向一个方向发射的一条无终点的线,在发射轨迹中与其他物体发生碰撞时,它将停止发射 。
用途:射线应用范围比较广, 多用于碰撞检测(如:子弹飞行是否击中目标)、角色移动等 等。
相关API:
1、Ray Camera.main.ScreenPointToRay(Vector3 pos) 返回一条射线Ray从摄像机到屏幕指定一个点
2、Ray Camera.main.ViewportPointToRay(Vector3 pos) 返回一条射线Ray从摄像机到视口(视口之外无效)指定一个点
3、Ray 射线类
4、RaycastHit 光线投射碰撞信息
5、bool Physics.Raycast(Vector3 origin, Vector3 direction, float distance, int layerMask)
当光线投射与任何碰撞器交叉时为真,否则为假。
bool Physics.Raycast(Ray ray, Vector3 direction, RaycastHit out hit, float distance, int layerMask)
在场景中投下可与所有碰撞器碰撞的一条光线,并返回碰撞的细节信息()。
bool Physics.Raycast(Ray ray, float distance, int layerMask)
当光线投射与任何碰撞器交叉时为真,否则为假。
bool Physics.Raycast(Vector3 origin, Vector3 direction, RaycastHit out hit,float distance, int layerMask)
当光线投射与任何碰撞器交叉时为真,否则为假。
注意:如果从一个球型体的内部到外部用光线投射,返回为假。
参数理解:
origin : 在世界坐标中射线的起始点
direction: 射线的方向
distance: 射线的长度
hit: 使用c#中out关键字传入一个空的碰撞信息类,然后碰撞后赋值。可以得到碰撞物体的transform,rigidbody,point等信息。
layerMask: 只选定Layermask层内的碰撞器,其它层内碰撞器忽略。 选择性的碰撞
6、RaycastHit[] RaycastAll(Ray ray, float distance, int layerMask)
投射一条光线并返回所有碰撞,也就是投射光线并返回一个RaycastHit[]结构体。
2014年06月27日 04点06分 23
求教Screen与Viewport的区别
2014年08月14日 08点08分
level 15
已精、希望能持续更新
2014年06月27日 05点06分 24
3Q~[爱心]
2014年06月27日 05点06分
level 13
已收藏
2014年06月27日 05点06分 25
1 2 3 4 5 6 尾页