一、脚本编写

1.1、同一类型的方法JS和C#的书写方式却不一样主要还是语法,在工程中创建一个Cube 分别把JSTest.js和CSharp.cs 添加到Cube中

JSTest.js

#pragma strict

private var i:int;

private var f:float;
function Start () { } function Update () { } function SetInt(_i:int)
{
i=_i;
}
function SetFloat(_f:float)
{
f=_f;
} function GetInt():int
{
return i;
} function GetFloat():float
{
return f;
}

CSharp.cs

using UnityEngine;
using System.Collections; public class CSharpTest : MonoBehaviour { // Use this for initialization
void Start () { } // Update is called once per frame
void Update () { } int i;
float f; public void SetInt(int i)
{
this.i = i;
}
public void SetFloat(float f)
{
this.f = f;
} public int GetInt()
{
return i;
} public float GetFloat()
{
return f;
}
}

1.2、JS,C#调用方法赋给Main Camera

MainJS.js

#pragma strict

var obj:GameObject;
function Start () {
obj=GameObject.Find("Cube"); var js:JSTest=obj.GetComponent(JSTest); js.SetInt(1);
js.SetFloat(1.1); print("JS GetInt :"+js.GetInt()); print("JS GetFloat:"+js.GetFloat());
} function Update () { }

MainCharp.cs

using UnityEngine;
using System.Collections; public class MainCSharp : MonoBehaviour { GameObject obj;
// Use this for initialization
void Start () {
obj = GameObject.Find ("Cube");
CSharpTest cs = obj.GetComponent<CSharpTest> ();
cs.SetInt ();
cs.SetFloat (11.11f); Debug.Log ("C# GetInt "+cs.GetInt()); Debug.Log ("C# GetFloat "+cs.GetFloat ());
} // Update is called once per frame
void Update () { }
}

1.3、看看结果

结果有点意外:JS应该先执行,为什么出来的顺序是这个?

"Standard Assets"、 "Pro Standard Assets" 和 "Plugins" 这三个目录里的脚本被最先编译,"Editor"目录里的稍后编译,其他的脚本最后编译。

二、物体间通信

  2.1、

  GameObject.SendMessage:向自身的脚本中发送消息
  GameObject.BroadcastMessage:向自身及子物体的脚本中发送消息
  GameObject.SendMessageUpwards:向自身及父物体中发送消息(先发给自己在发送给其他物体)

例如:子类Sphere对应脚本sendMessage.cs 父类Cube对应脚本receiveMessage.cs

sendMessage.cs

using UnityEngine;
using System.Collections; public class sendMessage : MonoBehaviour { // Use this for initialization
void Start () {
gameObject.SendMessageUpwards("SendMsgParent", "Hello 来自子类Sphere");
} // Update is called once per frame
void Update () { } void SendMsgParent(string msg)
{
Debug.Log("我是子类Sphere,子类发来的消息:" + msg);
}
}

receiveMessage.cs

using UnityEngine;
using System.Collections; public class receiveMessage : MonoBehaviour
{ // Use this for initialization
void Start()
{ } // Update is called once per frame
void Update()
{ } void SendMsgParent(string msg)
{
Debug.Log("我是父类Cube,子类发来的消息:" + msg);
}
}

最终结果

发送消息:先发送给自己在发送给其他物体

2.2、上面有个缺陷就是必须是继承关系 方可传递消息

  解决方案:可以用C# 委托和事件机制来改变,可以实现不同物体间的进行消息传递

步骤:新建两个GameObject :EventCube、ListenCube 做事件和监听。对应分别的cs文件EventCube.cs、ListenCube.cs

EventCube.cs

using UnityEngine;
using System.Collections; public class EventCube : MonoBehaviour { public delegate void EventHandle(GameObject e); public event EventHandle MouseOver; void OnMouseOver()
{
if (MouseOver != null)
{
MouseOver(gameObject);
} }
// Use this for initialization
void Start () { } // Update is called once per frame
void Update () { }
}

ListenCube.cs

using UnityEngine;
using System.Collections; public class ListenCube : MonoBehaviour
{ // Use this for initialization
void Start()
{
EventCube ev = GameObject.Find("EventCube").GetComponent<EventCube>();//EventCube 事件物体
ev.MouseOver += new EventCube.EventHandle(ev_MouseOver);//监听函数
//ev.MouseOver += ev_MouseOver;
} void ev_MouseOver(GameObject e)
{
this.transform.Rotate(, , );
Debug.Log("旋转 :" + e);
//throw new System.NotImplementedException();
} void Listening(GameObject e)
{ } // Update is called once per frame
void Update()
{ }
}

效果:

Unity3D笔记 英保通三 脚本编写 、物体间通信的更多相关文章

  1. Unity3D笔记 英保通八 关节、 布料、粒子系统

    一.关节1.1..链条关节 Hinge joint :他可以模拟两个物体间用一根链条连接在一起的情况,能保持两个物体在一个固定距离内部相互移动而不产生作用力,但是达到固定距离后就会产生拉力 1.2.. ...

  2. Unity3D笔记 英保通四 虚拟轴应用及键盘事件

    Input: 1.使用这个类能够读取输入管理器设置的按键,以及访问移动设备的多点触控或加速感应数据.想要读取轴向使用Input.GetAxis方法获取下列默认轴: "Horizontal&q ...

  3. Unity3D笔记 英保通一

    一.材质和着色器 1.材质和着色器紧密的联系,其中材质相当于是一个框架,而着色器就是框架中中的内容.在材质框架中可以选择不同的Shader并调节不同的 属性 Material和Physic Mater ...

  4. Unity3D笔记 英保通二

    一.访问另一个物体 1.代码中定义一个public的物体 例如:var target:Transform; 在面板上直接拖拽一个物体赋值给target 2.通过GameObject.Find(&quo ...

  5. Unity3D笔记 英保通十 射线碰撞器检测

    射线碰撞检测可以用来检测方向和距离: 通过Physics.RayCast光线投射来实现:常用于射击利用发射的射线来判断.还有对战中刀剑交战中.. 一.要涉及到RayCast和RayCastHit 1. ...

  6. Unity3D笔记 英保通九 创建数

    Unity中创建树:可以直接通过程序自动来创建树木还可以手动创建树木(本质上在我看来就是给程序自动创建的树动动”小手术“) 一.程序自动创建树木 3.1.层次视图中创建:一个平行光.摄像机.地.数并且 ...

  7. Unity3D笔记 英保通七 物理引擎

    给球体添加刚体RigidBody和球体碰撞器Sphere Collider 效果: OnTriggerEnter() 代码 using UnityEngine; using System.Collec ...

  8. Unity3D笔记 英保通六 角色控制器

    一.角色控制器 U3D有两种角色控制方式:Rigidbody刚体.角色控制器组件(胶囊体组件) 面试的题目中经常会遇到这个问题: CharacterController和Rigidbody的区别? 这 ...

  9. Unity3D笔记 英保通五 鼠标事件与GUI系统双击检测

    一.如何使用GUI事件来检测鼠标是否按下的事件: 获取当前事件:var e:Event=Event.current: using UnityEngine; using System.Collectio ...

随机推荐

  1. 本地文件到通过flume到kafka

    配置文件 cd /usr/app/flume1.6/conf vi flume-dirKakfa.properties #agent1 name agent1.sources=source1 agen ...

  2. koa-route模块

    const Koa = require('koa'); const route = require('koa-route'); const app = new Koa(); const about = ...

  3. Git使用教程,从入门到上瘾

    Git 是什么? Git 是一个分布式的代码管理容器,本地和远端都保有一份相同的代码. Git 仓库主要是由是三部分组成:本地代码,缓存区,提交历史,这几乎是所有操作的本质,但是为了文章更加简单易懂, ...

  4. 简要介绍DES、RSA MD5 sha1 四种加密算法的优缺点,以及使用场合

    美国数据加密标准(DES)是对称密码算法,就是加密密钥能够从解密密钥中推算出来,反过来也成立.密钥较短,加密处理简单,加解密速度快,适用于加密大量数据的场合.RSA是非对称算法,加密密钥和解密密钥是不 ...

  5. Python函数相关

    Python中的函数也是一种对象,而且函数还是一等公民.函数能作为参数,也能作为返回值,这使得Python中的函数变得很灵活.想想前面两篇中介绍的通过内嵌函数实现的装饰器和闭包. 下面就介绍一下Pyt ...

  6. grid简单布局

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. Linux进程作业的查看和杀死

    引入进程 进程 线程 PS命令.TOP命令.其他查看进程命令 进程的优先级 作业控制机制 kill命令 一.引入进程 1.内存划分为:用户空间和内核空间 1.在用户空间里运行的进程,就是用户进程,所属 ...

  8. beautifulsoup4 安装教程

    下载beautifulsoup, 下载地址:https://www.crummy.com/software/BeautifulSoup/bs4/download/ 下载完成之后,解压到一个文件夹,用c ...

  9. 配置Django框架为生产环境的注意事项(DEBUG=False)

    问题描述: Django1.10版本中框架中settings.py配置文件 配置文件settings.py配置了下面两项: DEBUG= False ALLOWED_HOSTS = ['*'] #这样 ...

  10. 给TextView加上多彩效果:改变部分字体的大小和颜色

    转载请注明出处:http://blog.csdn.net/singwhatiwanna/article/details/18363899 前言 在实际使用中,有时候会遇到特殊需求,比如pm突发奇想,想 ...