登录 用户中心() [退出] 后台管理 注册
   
您的位置: 首页 >> SoftHub关联区 >> 主题: [u3d]创建光源需要使用特殊的方法     [回主站]     [分站链接]
[u3d]创建光源需要使用特殊的方法
clq
浏览(531) - 2020-01-28 16:52:36 发表 编辑

关键字: u3d

[u3d]创建光源需要使用特殊的方法

非常的意外。没想到一个普通的点光源,其实 u3d 编辑器中的一个小动作其实是由很多代码和多个对象/组件来组成的。

//--------------------------------------------------
关键信息有两个:
1.光源不能直接创建,要先建立一个空物体,再用 addcom... 方法加入。
2.光晕不是光源本身的属性,是另外的控件加入实现的,而且默认光源没有加入,想用的话要手工加入。

另外这种光晕的做法应该是对所有物体都起作用的。在菜单 "Component -> Effects -> Halo"。
不过对高版本的 u3d 似乎另外有一种,参考 https://jingyan.baidu.com/article/eb9f7b6d293444869364e812.html

//--------------------------------------------------


关于unity的AddComponent(string)提示已过时的解决方法
转载 weixin_30292843 最后发布于2019-06-27 17:31:00 阅读数 277 收藏
展开

由于之前的AddComponent(string name)过时了,听说是性能方面的问题,所以被废弃了,但是我可以使用AddComponent(System.Type t)。下面上代码

Type t = Type.GetType(“CustomClassName”);
/*这个type如果是使用我们自己的类,那么直接这么用好了。
但是如果是系统的类的话,比如Button什么的,
那么直接用类名可能是找不到的,要带上命名空间,但是系统函数的命名空间分的很细,不好找,所以请用下面这个方式获取名字:
string className = typeof(Button).AssemblyQualifiedName;
*/
gameObject.AddComponent(t);



转载于:https://www.cnblogs.com/Transmuter/p/11098443.html

//--------------------------------------------------

//--------------------------------------------------

//创建一个发光的炮弹,可以用粒子系统,不过ypwhj用一个点光源//重点是光源的 Draw Halo绘制光晕,没有光晕的话它只能照亮别人
//Range范围 光能照多远 //单位应该是米
//Intensity强度 -- 在光照范围内从最强减少到0 //点光源/聚光灯 默认值是1。方向光源 默认值是0.5
/*
Point
点光源从一个位置向四面八方发出光线,影响其范围(Range)内的所有对象,类似灯泡的照明效果。
* 点光源的阴影是较耗费图像处理器资源的光源类型。
* 点光源可以想象是在3D空间里一个对着所有方向发射光线的点,很适合用来制作像是灯泡、武器发光或是从物体发射出来的爆炸效果,
* 点光源的亮度从中心最强一直到范围属性(Range)设定的距离递减到0为止,光的强度从光源到距离成反比,这是所谓的”平方反比 定律”,
* 类似光在现实世界的行为。点光源从它的位置对四面八方射出光线,球形的小图示代表光的”范围”,光线到达此范围是会”衰减”到0,
* 但如果有间接光源或反射光则会继续投射。 点光源开启阴影运算是很耗效能的,因此必须谨慎使用,
* 点光源的阴影为了要给六个不同的世界方向会运算六次,在比较差的硬件开启此功能会造成较大的效能负担。
* 当在场景中加入点光源时要注意,目前它们不支持阴影的间接反射,这代表由点光源产生的光线,
* 只要在距离内有可能会穿过对象反射到另外一面,这可能会导致墙壁或地板”漏 光”,因此放置点光源要格外注意,
* 然而如果是采用Backed GI的话,就不会有这类的问题产生。
————————————————
https://blog.csdn.net/qq_38061677/article/details/81543070
*/
//public static GameObject CreateFire()
//创建光源,不能直接
//光源在 u3d 中不是 gameobject
//所以在创建灯光组件时要把灯光组件附到光源对象上才可以正常使用
//默认应该就是点光源
public static GameObject CreateLight(string name)
{
//不能用 new
//https://blog.csdn.net/fostudio/article/details/42870351
//MonoBehaviour不能New实例化 所以先创建空GameObject后在添加脚本即可

//GameObject tGO = new GameObject("tGO");
//tGO.AddComponent();
//----
//https://blog.csdn.net/ahtodayedu/article/details/54908714 中有更详细的说明

GameObject tGO = new GameObject(name);
//tGO.AddComponent();
tGO.AddComponent();

Light light = tGO.GetComponent();

//l = light;
//l.color = create_object.rgb(200, 0, 0);
//l.color = create_object.rgb(0, 0, 200);

return tGO;
}//

//点光源//showSelf -- 灯光自己是否显示,其实就是是否有光晕 (Draw Halo)
public static GameObject CreateLight_Point(string name, bool showSelf)
{
GameObject lightObj = create_object.CreateLight(name);
//l.color = create_object.rgb(200, 0, 0);
//l.color = create_object.rgb(0, 0, 200);

Light light = lightObj.GetComponent();

light.type = LightType.Point;

//light.cullingMask = false;

//----
//光晕似乎没有直接的代码可控制
//https://forum.unity.com/threads/scripting-to-switch-draw-halo-on-off.4404/
//介绍了一个,不过似乎 2017.3 版本才支持
//似乎是因为 using UnityEditor; 的原因,运行时不能用?
/*
SerializedObject halo = new SerializedObject(gameObject.GetComponent());

halo.FindProperty("m_DrawHalo").boolValue = true;

halo.ApplyModifiedProperties();
* */
//--
//另一个方法
//https://stackoverflow.com/questions/40756019/how-can-i-change-the-value-of-draw-halo-inside-point-light-unity3d
//lightObj.AddComponentExt("Halo");
drawHalo(light, true);

return lightObj;
}//

//使用这个之前必须调用 tGO.AddComponent("Halo");//u3d 4.2 下可用
//参考 https://stackoverflow.com/questions/40756019/how-can-i-change-the-value-of-draw-halo-inside-point-light-unity3d
//关于 "Halo" 这样的控件有非常多的知识
public static void drawHalo(Light light, bool value)
{
//Get Halo Component
object halo = light.GetComponent("Halo");
//Get Enable Halo property
var haloInfo = halo.GetType().GetProperty("enabled");
//Enable/Disable Halo
haloInfo.SetValue(halo, value, null);
}

//取光源物体中的光对象,这样才能设置属性
public static Light GetLight(GameObject lightObj)
{


Light light = lightObj.GetComponent();

//light = lightObj.light; //这个应该也可以

//light.type = LightType.Point;

//light.

return light;
}//



总数:0 页次:1/0 首页 尾页  
总数:0 页次:1/0 首页 尾页  


所在合集/目录
u3d光晕 更多



发表评论:
文本/html模式切换 插入图片 文本/html模式切换


附件:



NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.

Copyright © 2005-2020 clq, All Rights Reserved
版权所有
桂ICP备15002303号-1