位置: 编程技术 - 正文

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平台跳跃游戏)

  • 支付给派遣员工的工资计入应付职工薪酬吗
  • 息税前利润含义
  • 企业代扣代缴个人所得税
  • 专票要写开户行和账号
  • 个人接私活需要缴税吗
  • 增值税发票的品名与报关单不一致
  • 企业员工的高铁票进项税如何申报
  • 直接支付和授权支付方式的区别与联系
  • 明明申报了为什么显示没有申报
  • 知识产权局专利审查协作中心
  • 建筑企业异地预交税款如何处理
  • 有形动产租赁服务
  • 网上平台服务年费应该计入什么费用?
  • 建筑企业未开票收入增值税申报表怎么填写
  • 货物运输政策
  • 增值税和消费税申报对比不符怎么处理
  • 补记以前年度收入在报表中怎么处理
  • 长期待摊费用账户按用途和结构分类应属于
  • 车船税为什么没有优惠
  • 维修服务费税率是多少?
  • 勾选认证售票状态可以改吗
  • 商场 折扣
  • 收益性支出包括哪些科目
  • 安全生产费用包含哪些
  • 审计调账后企业怎么处理
  • 年度终了,会计部门都要将旧账编造清册
  • 对整个产品的零件退回的财务会计处理?
  • 单位车辆车船税缴纳
  • 代理进口增值税客户不抵扣,进出口公司可以抵扣吗
  • 企业所得税的罚款比例
  • 在windows7中用来存放硬盘中被删除的文件或文件夹的是
  • PHP:oci_bind_by_name()的用法_Oracle函数
  • PHP:pg_lo_open()的用法_PostgreSQL函数
  • 排污费应计入什么会计科
  • 工程审计需要什么条件
  • win7家庭组怎么用
  • 购入材料的实际成本
  • 资产负债表的编制依据是会计恒等式
  • 本部借给分公司的钱用交印花税吗
  • 如何检查路由器防火墙设置
  • yii框架教程
  • php如何实现分页功能
  • 应收借方表示什么
  • vue的ref怎么用
  • pwcorr_a命令
  • 往来款项清查账务处理
  • 成本费用利润率越高越好吗
  • 企业季度所得税申报流程
  • 印花税是按照开票金额还是当月收入
  • SQL Server通过重建方式还原master数据库
  • PostgreSQL 安装和简单使用第1/2页
  • 入库库存商品
  • 稳岗补贴操作
  • 红字冲销怎么做账
  • 医生规培补助
  • 计提员工工资是什么意思
  • 应收票据和应收账款减少说明什么
  • 材料采购办法
  • 会计一般用什么软件
  • 公司的三证合一是什么
  • mybatis怎么搭建
  • windows安装orthofinder
  • win7卸载KB2952664/KB3035583补丁的详细图文教程
  • centos7.5切换图形界面
  • 网卡被禁用一启动就死机
  • cocos2d-x 3.4 windows 环境配置
  • xcode怎么新建项目
  • node-js
  • Android网络(4):HttpClient必经之路----使用线程安全的单例模式HttpClient,及HttpClient和Application的融合
  • js验证正整数
  • 广州税务局怎么开发票
  • 北京市税务局 案件
  • 餐饮发票真伪查询系统
  • 北京国税app
  • 湖南省地方税务局
  • 如何给局长送点礼品
  • 税控盘版开票软件打不开是什么原因
  • 印花税核定依据填写什么
  • 小规模纳税人开专票需要交税吗
  • 中国经济行业排名
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设