位置: 编程技术 - 正文

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

  • 预缴增值税的账务
  • 小规模纳税人代扣代缴个人所得税
  • 企业前期开办费怎么入账
  • 去参加博览会的英文
  • 办理个体户营业执照需要什么条件
  • 代订机票服务费可以抵扣进项吗
  • 个体户电子发票怎么作废
  • 关于年底双薪和分红问题的处理
  • 增值税税收返还政策
  • 虚开费用发票入账
  • 销售商品确认收入的时间
  • 个人取得投资收益是否缴纳个税
  • 资本公积与实收资本和盈余公积有什么区别?
  • 一个订单只能申请一次退款吗
  • 需不需要交企业所得税看报表的哪个地方?
  • 车辆购置税是否计入固定资产
  • 怎样预交增值税
  • 红字发票不小心点了暂存怎么办
  • 工会经费电子税务局找不见了
  • 公司收境外汇款
  • 销售净利润率是综合反映企业成本效益的重要指标
  • 年报中包括处置资金吗
  • 单位自办食堂为单位职工提供餐饮服务要交增值税吗
  • 怎么进行现金流量分析
  • 转出以前年度成本怎么做账
  • 小微企业行业划分标准 工信部
  • 工会资助贫困大学生
  • 怎么进入登录
  • 坏账会计处理方法
  • 员工报销款应该挂什么科目
  • 房地产开发企业增值税怎么算
  • 支持h5浏览器
  • php怎么定义全局变量
  • 财政发票可以报销吗
  • 电子税务局已申报信息查询
  • 微信账单可以打清单吗
  • notion all in one
  • web应用程序的主要组成部分
  • 借管理费用贷应交税费个人所得税
  • 命令行查看git版本
  • 建筑工程价款结算
  • 简易记账和复式记账
  • html友情链接模板
  • 非正常户是黑名单吗
  • sql server操作教程
  • sqlserver2012完全卸载
  • 企业所得税期初余额什么意思
  • 物业 收电费
  • 税局代开专票对方隔月退回重开如何做账务处理呢?
  • 给客户的回扣如何处理
  • 百分百控股代表着什么
  • 劳务公司开出发票没有收到钱,怎么做成本
  • 总账会计工作流程表
  • 年初建账考虑要点
  • 新公司建立 需要先做哪行
  • 关于读书的名言名句
  • mysql数据库随机取数据
  • centos server
  • fedora iso
  • ubuntu15.04安装教程
  • win7检测有错误怎么办
  • hptasks.exe是病毒吗 是什么进程 hptasks进程说明
  • win7更改ip地址后有网络无法上网
  • javascript详解
  • 表格高级使用技巧视频
  • css onclick
  • 将字符串小写转换成大写
  • Emeditor与dos(cmd)经典使用技巧之批量生成网页
  • bash脚本语法
  • javascript中的107个基础知识收集整理 推荐
  • jQuery实现的指纹扫描效果实例(附演示与demo源码下载)
  • jq中attr用法
  • jquery简单吗
  • android基础教程第三版电子版
  • javascript如何禁用
  • eclipse自动生成
  • 河北省国家税务局电子税务局
  • 注册会计师和注册建造师哪个难考
  • 增值税进项发票如何做账
  • 车船税收费标准表
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设