U3D常用方法

一、创建物体
1.首先,定义物体类型 GameObject go;
  然后,再在Start方法中获取new一个对象
void Start () {
        go = new GameObject("123");
}
二、获取物体对象
1.若脚本挂载在要获取的本物体对象上
(1)首先,定一个类型 Light light;
(2)void Start () {
        light = GetComponent<Light>();
        light.color = Color.red;
}
2.若脚本挂载在其它的物体上
方法一:(1)首先,定义一个类型,public Light light;
(2)再将场景的Light物体拖到定义的Light类型中
(3)void Start () {
light.color = Color.red;
}
方法二:(1)首先,定义一个GameObject goLight;
  Light light;  //非public类型
(2)然后,先获取该物体的GameObject对象 goLight = GameObject.Find("Light"); //GameObject.Find方法将整个Hierarchy层级遍历一遍
若是,Hierarchy层级中有相同的物体名称,则优先获取第一个物体;若想获取第二个物体时,则需要输入全路径获取。
(3)最后,通过GameObject对象的GetComponent方法获取 light = goLight.GetComponent<Light>();


三、实例化预制体
1.方法一:public GameObject goBullet;//将所制作好的预制体拖入其中
void Start()
{
Instantiate(goBullet); 
}
若将其生成在指定的子物体上
public GameObject goBullet;
private GameObject bullet;

void Start()
{
bullet = Instantiate(goBullet);
bullet.transform.parent = this.transform; //该预制体,就出现在脚本挂载物体下方
}
### U3D 中扩展方法的用法与实现 在 Unity 3D (U3D) 开发过程中,C# 提供了一种强大的特性——**扩展方法**,它允许开发者向现有的类添加新方法而无需修改其源代码。这种机制特别适用于增强第三方库的功能或简化常用操作。 #### 扩展方法的基础概念 扩展方法是一种静态方法,但它可以通过实例调用来使用。要定义一个扩展方法,需满足以下几个条件[^1]: - 方法必须位于一个 `static` 类中。 - 方法本身也必须是 `static` 的。 - 第一个参数前需要加上关键字 `this`,表示该方法作用于哪个类型的对象上。 以下是创建和使用扩展方法的一个简单例子: ```csharp using UnityEngine; public static class GameObjectExtensions { public static void SetActiveIfNotNull(this GameObject obj, bool isActive) { if (obj != null) obj.SetActive(isActive); } } ``` 在这个例子中,我们为 `GameObject` 添加了一个名为 `SetActiveIfNotNull` 的扩展方法。如果目标游戏对象不为空,则设置它的活动状态。通过这种方式,可以在任何地方像原生方法一样调用这个函数: ```csharp void Example(GameObject myObject) { myObject.SetActiveIfNotNull(true); // 调用了扩展方法 } ``` #### 应用于实际开发中的场景 扩展方法不仅限于基础数据结构,在复杂的引擎环境中同样适用。比如结合 EventTrigger 插件[^3],可以轻松封装一些常用的交互逻辑;或者利用 SQLite 数据存储插件时[^2],也可以设计一系列便捷的数据访问接口来减少重复编码工作量。 另外值得注意的是,当涉及到 UI 字体批量调整这样的需求时[^4],借助扩展方法能够极大提升脚本可读性和维护效率。例如下面展示如何针对 Text 组件构建统一的文字样式管理方案: ```csharp using UnityEngine; using TMPro; // 如果使用的是 TextMeshPro public static class UITextExtensions { /// <summary> /// 设置指定颜色并返回当前实例以便链式调用. /// </summary> public static TMP_Text SetColor(this TMP_Text text, Color color) { text.color = color; return text; } /// <summary> /// 修改字体大小同时保持其他属性不变. /// </summary> public static TMP_Text ResizeFontTo(this TMP_Text text, int fontSize) { var style = text.fontStyle; text.fontSize = fontSize; text.fontStyle = style; // 确保风格一致 return text; } } // 使用示例 someTMPText.ResizeFontTo(20).SetColor(Color.red); ``` 上述代码片段展示了两个实用的扩展方法:一个是改变文字的颜色,另一个则是动态调节字号的同时保留原有字形特征。 --- ### 注意事项 尽管扩展方法非常方便,但在引入它们之前应该考虑以下几点: - **命名冲突**: 当多个程序集提供相同名称的扩展方法给同一类型时会发生编译错误。 - **性能开销**: 尽管语法看起来像是成员方法调用,但实际上每次都会执行一次额外的方法查找过程。 因此建议仅对那些确实频繁使用的功能点实施此类优化措施。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值