位置: 编程技术 - 正文

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

  • 已抵扣的进项税额怎么转出
  • 收取违约金是否交税
  • 计提无形资产摊销额计入什么科目
  • 小规模纳税人可以开数电专票吗
  • 所得税季度预交税率是多少
  • 支付的检测费计入什么科目
  • 给退休工人发工资怎么入账
  • 企业所得有哪些税种
  • 取得运输部门开具的增值税专用发票
  • 工会费入账科目
  • 行政会计账务处理
  • 营改增后增值税专用发票抵扣规定
  • 开餐饮发票的经营范围是怎样的?
  • 冲减留抵税额
  • 董事监事的报酬包括哪些
  • 税务代开劳务费税点如何确定
  • 递延收益现金流量附表项目
  • 如何区分纳税调额和补税
  • 母公司对子公司的控股比例
  • 采用支票结算方式的基本业务处理程序
  • 装修费可以作为开办费吗
  • 押金算不算房租
  • PHP:oci_fetch_array()的用法_Oracle函数
  • php 上传
  • 股份支付如何缴纳个人所得税?
  • vue中使用echars
  • 增值税的计税依据包括契税吗
  • 用人单位未为劳动者缴纳社会保险费
  • 支付劳务费时是什么科目
  • php连接mysql数据库四步
  • thinkphp 模块
  • 商贸公司用什么名字最好
  • zgrep命令详解
  • 开了红字发票申请还要做进项税转出吗
  • Linux下MySQL数据库的主从同步复制配置
  • linux中mongodb启动
  • 承租方承担税费
  • 退预收款需要对账吗
  • 利润表中的本期金额和本年累计金额
  • 终止经营损益列报 举例
  • 实收资本何时入账
  • 疫情期间餐饮发票税点
  • 长期股权投资投资损益的确认
  • 筹建期间的开办费为什么不属于资产
  • 季度所得税申报表营业收入怎么填
  • 美容院收入怎么做会计分录
  • 企业商品报废如何处置
  • 个体户如何做账?
  • 公司为员工异地缴纳五险一金
  • 公司借钱不还怎么办
  • 发票优惠金额怎么开
  • 会计忘记申报税款会有什么影响
  • 如何填写出售固定资产表
  • 外来原始凭证丢了怎么办
  • 资本和资产的区别举例说明
  • mysql怎么修改用户名和密码
  • ubuntu系统如何安装
  • win7系统玩红色警戒怎么全屏设置
  • win10系统宽带连接错误解决方法
  • win10家庭版专业版教育版
  • win7系统怎么将新建资料保存到文件夹
  • cocos creator js教程
  • ghost详细说明
  • unity3d跨平台
  • 序列化为json
  • android怎么保存项目
  • android开发中遇到的问题
  • bat批处理执行cmd命令
  • unity3d改变物体坐标系
  • 基于nodejs的api框架
  • JavaScipt中Function()函数的使用教程
  • javascript详细介绍
  • javascript学习指南
  • 动态生成xml
  • 西安经开税务局电话号码
  • 江苏电子税务局客服电话
  • 残疾人保障金如何填报
  • 建筑工地临时板房验收规范最新
  • 消费税的纳税义务的发生时间是如何规定的
  • 税务审理工作总结
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设