位置: 编程技术 - 正文

Unity脚本C#参数相互传递(unity脚本调用)

编辑:rootadmin

推荐整理分享Unity脚本C#参数相互传递(unity脚本调用),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:unity脚本怎么用vs打开,unity常用的800个脚本,unity3d脚本语言c#,unity常用的800个脚本,unity脚本怎么用vs打开,unity c++脚本,unity3d脚本语言c#,unity c++脚本,内容如对您有帮助,希望把文章链接给更多的朋友!

转载自: 类名.参数 就可以调用。

发送消息

内容Component.SendMessage来实现跨脚本发送消息传递参数。下面发一个整理好的发消息脚本:

代码很简单。大家应该看一下就懂了。

using System;using System.Collections;using System.Collections.Generic;using UnityEngine; public class NotificationCenter : MonoBehaviour{ private static NotificationCenter mInstance; private Hashtable mHashtable; //单例 public static NotificationCenter GetInstance() { if (mInstance == null) { GameObject go = new GameObject("NotificationCenter"); mInstance = go.AddComponent<NotificationCenter>(); } return mInstance; } private NotificationCenter() { mHashtable = new Hashtable(); } public void AddSceneMessage(object observer, string name, object sender) { if (string.IsNullOrEmpty(name)) { Debug.LogError("传入名称错误"); return; } if (mHashtable[name] == null) { mHashtable[name] = new List<object>(); } List<object> listNotify = (List<object>)mHashtable[name]; if (listNotify.Contains(observer) == false) { listNotify.Add(observer); } } public void PostNotification(object aSender, string aName, object aData) { NotificationData ev = new NotificationData(aSender, aName, aData); if (string.IsNullOrEmpty(ev.name)) { return; } List<object> listNotify = (List<object>)mHashtable[ev.name]; if (listNotify != null) { List<object> listRemoveObserver = new List<object>(); for (int i = 0; i < listNotify.Count; i++) { object ob = listNotify[i]; MonoBehaviour observer = (MonoBehaviour)ob; if (!observer) { listRemoveObserver.Add(ob); } else { observer.SendMessage(ev.name, ev, SendMessageOptions.DontRequireReceiver); } } for (int i = 0; i < listRemoveObserver.Count; i++) { object ob = listRemoveObserver[i]; listNotify.Remove(ob); } } }}public class NotificationData{ public object sender; public string name; public object data; public NotificationData(object aSender, string aName, object aData) { sender = aSender; name = aName; data = aData; }}

用时。先注册下要发送到那个脚本,示例如下:

usingUnityEngine;usingSystem.Collections; publicclassN2:MonoBehaviour{ voidStart() { Debug.Log("n2 Start"); //注册消息 NotificationCenter.GetInstance().AddSceneMessage(this,"N2Test",null); //发送消息 NotificationCenter.GetInstance().PostNotification(this,"NTest","是N2调用的");} voidN2Test(NotificationDataev) { Debug.Log("调用了N2---"&#;(int)ev.data); }}

using UnityEngine;using System.Collections; public class N : MonoBehaviour { // Use this for initializationvoid Start () { NotificationCenter.GetInstance().AddSceneMessage(this, "NTest", null);} void NTest(NotificationData ev) { Debug.Log("调用了N---内容:"+(string)ev.data); NotificationCenter.GetInstance().PostNotification(this, "N2Test", ); }}

如上两个测试脚本。互相传递参数。有N2发消息到N。然后N在次发送到N2。 由于传递的是object。所以。可以发送任意类型的参数。

Unity脚本C#参数相互传递(unity脚本调用)

结果图:

委托

用delegate回调。如下。

usingUnityEngine;usingSystem.Collections; publicclassN3:MonoBehaviour{ voidStart() { Debug.Log("N3 start"); N.GetInstance().onPostData=N3Test; N.GetInstance().NTest();} voidN3Test(objectdata) { Debug.Log("N3 回调内容:"&#;(string)data); }}

usingUnityEngine;usingSystem.Collections; publicclassN:MonoBehaviour{ privatestaticNmInstance; //单例 publicstaticNGetInstance() { if(mInstance==null) { GameObjectgo=newGameObject("N"); mInstance=go.AddComponent<N>(); } returnmInstance; } publicdelegatevoidOnPostData(objectdata); publicOnPostDataonPostData; publicvoidNTest() { Debug.Log("N"); this.onPostData(""); }}

结果:

Unity3d 基于物理渲染Physically-Based Rendering之specular BRDF 在实时渲染中Physically-BasedRendering(PBR)中文为基于物理的渲染它能为渲染的物体带来更真实的效果,而且能量守恒稍微解释一下字母的意思,为对后文

Unity3D学习笔记之七创建自己的游戏场景 到现在为止我们已经拥有了比较完备的Prefab,已经可以创建宏大的游戏场景,并以第一人称视角在场景中漫游了。这里给大家做个小的示范,建一个小

Unity3d 基于物理渲染Physically-Based Rendering之实现 根据前文的例子

标签: unity脚本调用

本文链接地址:https://www.jiuchutong.com/biancheng/383571.html 转载请保留说明!

上一篇:学习shader之前必须知道的东西之计算机图形学(一)渲染管线(shader能做什么)

下一篇:Unity3d 基于物理渲染Physically-Based Rendering之specular BRDF(unity3d基于物理系统的2D平台跳跃游戏)

  • 自查补交以前年度增值税怎么做账
  • 小规模暂估入库的账务处理
  • 工程结算是含税还是不含税
  • 高新企业如何申报纳税
  • 中药材适用税率是多少
  • 小规模纳税人可以开1%的专票吗
  • 公司被扣货款怎么记账
  • 企业租入固定资产发生的改良支出计入什么科目
  • 一个工程项目多次收款怎样预交增值税
  • 免征土地增值税的有哪些
  • 已抵扣未入账的红字发票
  • 新注册的公司用不用开公户
  • 火车票飞机票进项税额怎么抵扣
  • 免征的税款每月几号申报
  • 冲回坏账准备是什么意思
  • 仓库收料作业指导书
  • 私营企业员工享受探亲假吗
  • 虚增利润
  • 需要税务部门解决的问题
  • 增值税税率调整差额怎么计算
  • 消防工程改造需要什么资质
  • MacOS Big Sur 11.3网页怎么设置时间限制?
  • EasyExcel使用与步骤
  • 分期收款销售商品纳税义务发生时间
  • 没报关的货物还需要开发票嘛
  • 小企业会计准则2023电子版
  • 小规模纳税人收入会计分录
  • 企业筹建期发生的费用有哪些
  • jsp课程设计含源代码
  • php获取位置
  • 软件开发企业如何核算成本
  • 推广费属于什么大类
  • 银行开出的承兑怎么兑现
  • php中定义常量的函数是什么
  • 固定资产清理借方表示什么意思
  • 小规模不动产租赁要交哪些税
  • 盈余公积提取是什么意思
  • 利润分配未分配利润是净利润吗
  • 计提贷款损失准备的意义
  • 支付技术研究开发费
  • 从农民个人手里取出钱
  • 收入分成的账务处理
  • 冲减实收资本是什么意思
  • 差旅费的进项税额需要转出吗
  • 基本户有什么用
  • 公司车子折旧相差多少
  • 发生额怎么计算
  • 公司增资怎么办理手续
  • Mysql主从同步Last_IO_Errno:1236错误解决方法
  • 电脑操作系统32位和62位怎么升级
  • xp系统打开浏览器没反应
  • xp磁盘检测命令
  • win7卸载软件提示停止工作
  • windows10电脑重置电脑
  • rosnmgr.exe - rosnmgr是什么进程 有什么用
  • frameworkservic.exe是什么进程 有什么作用 frameworkservic进程查询
  • win7系统点击桌面图标闪退
  • win7自动更新失败怎么删除更新启动
  • win8怎么调整屏幕分辨率
  • linux显示所有内容
  • python函数enumerate
  • js实现登录界面
  • JavaScript驾驭网页-获取网页元素
  • nodejs quic
  • Firefox window.close()的使用注意事项
  • dom操作中获取节点的方法有哪几种
  • jquery示例
  • jsonobject用法
  • Android Path和PathMeasure类的使用之获取圆弧上的坐标值
  • 河南城乡居民医疗保险缴费怎么交
  • 农机免税范围
  • 开票软件重置密码去哪里
  • 长春税务局电话举报
  • 临时税务登记纳税有区域限制吗为什么
  • 财税专家刘杨简历
  • 建筑业增值税纳税义务发生时间包括
  • 交通运输业包含哪些
  • 一般纳税人企业所得税5%还是25%
  • 杭州 国税
  • 云南2021高考改革
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设