【Unity 3D】学习笔记二十七:unity游戏脚本(七)

使用C#编写游戏脚本

在前面提到,unity支持三种语言编写脚本:js,C#,boo。入门的时候建议只用js,因为js比较简单易懂,语法也不是很严格。但后来晋级的时候推荐使用C#,因为它比较符合unity的编程思想,执行效率更高。下面总结下怎么使用C#编写脚本。

继承MonoBehaviour类

在unity中,任何一个脚本,包括上述三种语言都需要去继承MonoBehaviour这个类。为什么我们之前写JS代码的时候没有继承咧?因为在创建JS代码的时候,系统会将其类名与继承关系隐藏起来。

在project视图中创建一个JS脚本,打开会发现如下代码:

#pragma strict

function Start () {

}

function Update () {

}

系统自动的帮我们生成Update方法。在JS中是不存在void类型的方法的,需要使用function作为关键字。

创建一个C#代码,打开后:

using UnityEngine;
using System.Collections;

public class NewBehaviourScript : MonoBehaviour {

	// Use this for initialization
	void Start () {

	}

	// Update is called once per frame
	void Update () {

	}
}

在C#脚本中,系统已经帮我们生成对应的继承关系public class NewBehaviourScript : MonoBehaviour

在绑定C#脚本时,必须保证它的名称与项目资源视图中该脚本名称对应,不然无法绑定。

声明变量

在JS中,声明变量都需要使用var关键字,并在变量后面添加“ :”以及具体对象类型与数值。C#则使用对象类型加变量名的方式。

JS:

public var i : int = 0;

var name : String[ ] = ["test","test1","test2"];

var obj : GameObject;

C#:

public int  i = 0;

var String[ ]name = ["test","test1","test2"];

var  GameObject obj ;

调用方法

在编写代码的时候调用方法是非常常见的,因为不可能所有的代码都写在同一个方法中,这样的代码是非常不合理且不应该。JS和C#在调用方法上也有不同:

JS

text01.js:

//整型
var i : int;
//浮点型
var f : float;
//布尔型
var b : bool ;
//字符串
var str : string ;

	//设置整形
function setInt(int temp : int){
	i = temp;
}
	//设置浮点型
function setFloat(temp : float){
	f = temp;
}
	//设置布尔型
function  setBoolean(temp : bool){
	b = temp;
}
	//设置字符串
function  setString(temp : string){
	str = temp;
}
	//获取整形
function getInt() {
	return i;
}
	//获取浮点型
function getFloat(){
	return f;
}
	//获取布尔型
function getBoolean() {
		return b;
}
	//获取字符串
function getString() {
	return str;
}
	

main,js:

var obj : GameObject;

function Start(){
	obj = GameObject.find("cube");
	var script : text0 = obj.GetComponent("text0");

	script.setInt(100);
	script.setFloat(10.0f);
	script.setBoolean(true);
	script.setString("test");

	Debug.Log(script.getInt());
	Debug.Log(script.getFloat());
	Debug.Log(script.getBoolean());
	Debug.Log(script.getString());
}

C#:

text01,cs.

using UnityEngine;
using System.Collections;

public class Test1 : MonoBehaviour {
	//整型
	int  i;
	//浮点型
	float f;
	//布尔型
	bool b;
	//字符串
	string str;

	//设置整形
public void setInt(int temp){
	i = temp;
}
	//设置浮点型
public  void setFloat(float temp){
	f = temp;
}
	//设置布尔型
public void  setBoolean(bool temp){
	b = temp;
}
	//设置字符串
public void  setString(string temp){
	str = temp;
}
	//获取整形
public int getInt() {
	return i;
}
	//获取浮点型
public float getFloat(){
	return f;
}
	//获取布尔型
public bool getBoolean() {
		return b;
}
	//获取字符串
public string getString() {
	return str;
}

}

main,cs:

using UnityEngine;
using System.Collections;

public class Main : MonoBehaviour {
	//立方体对象
	GameObject obj ;
	// Use this for initialization
	void Start () {

	//获取立方体对象
	obj = GameObject.Find("Cube");
	//获取Test1脚本
	Test1 script = obj.GetComponent<Test1>();

	//设置整形
	script.setInt(100);
	//设置浮点型
	script.setFloat(10.0f);<pre name="code" class="javascript">
function OnGUI()
{
	if(GUI.Button(Rect(100,50,200,100),"JavaScript调用C#"))
	{
			//获取C#脚本对象
	 	    var cs = this.GetComponent("CS_test");
	    	//脚本C#脚本中方法
	    	cs.CallMe("我来自JavaScript");
	}

}

function CallMe(test : String)
{
	Debug.Log(test);
}

//设置布尔型script.setBoolean(true);//设置字符串script.setString("Test");//获取信息并且打印Debug.Log(script.getInt());Debug.Log(script.getFloat());Debug.Log(script.getBoolean());Debug.Log(script.getString());}}


其实细细品味下,JS和C#代码之间并没有非常大的变化,只是相关的关键字与格式有所不同而已。相信有JAVA学习的经验学习C#不是很难。记得老师曾经说过:计算机编程语言发展到现在,大部分的语言之间其实都是相互借鉴的,因此都是非常类似。只要你学好了里面的一种,其他的语言很容易就能上手。

JS与C#脚本之间的通信

在unity官方文档中,JS或者C#实现的脚本功能是完全相等的,不存在这个功能用JS实现比C#好这种说法。但在实际中,难免会遇见两种脚本来编写游戏。此时就需要他们之间进行通信了。

JS_test.js

function OnGUI()
{
	if(GUI.Button(Rect(100,50,200,100),"JavaScript调用C#"))
	{
			//获取C#脚本对象
	 	    var cs = this.GetComponent("CS_test");
	    	//脚本C#脚本中方法
	    	cs.CallMe("我来自JavaScript");
	}

}

function CallMe(test : String)
{
	Debug.Log(test);
}

CS_test.cs

using UnityEngine;
using System.Collections;

public class CS_test : MonoBehaviour {

	void OnGUI()
	{

		if(GUI.Button(new Rect(100,170,200,100),"C#调用JavaScript"))
		{
			 //获取JavaScript脚本对象
			 JS_test jsScript = (JS_test)GetComponent("JS_test");
	         //调用JavaScript脚本中方法
	         jsScript.CallMe("我来自C#");
		}

	}

	public void CallMe(string test)
	{
		Debug.Log(test);
	}
}

运行:

点击后:

本例得注意一点,得将JS_test和CS_test都绑定在摄像机上,而且JS脚本得放在新建的Standard Assets文件夹中,否则无法编译。

【Unity 3D】学习笔记二十七:unity游戏脚本(七)

时间: 2024-10-13 07:57:51

【Unity 3D】学习笔记二十七:unity游戏脚本(七)的相关文章

angular学习笔记(二十七)-$http(5)-使用$http构建RESTful架构

在angular中有一个特别为RESTful架构而定制的服务,是在$http的基础上进行了封装. 但是为了学习,我们先看看用直接$http是如何构建RESTful架构的: 假设有一个银行卡的列表.需要的功能有: 可以通过id来获取用户123的指定id的卡     'GET'  'card/user/123/id' 可以获取用户123的所有的银行卡             'GET'  'card/user/123' 可以更新用户123的指定id的卡                'POST' '

Android学习笔记二十七之ExpandableListView可折叠列表和StackView栈视图

Android学习笔记二十七之ExpandableListView可折叠列表和StackView栈视图 ExpandableListView可折叠列表 这一节我们介绍第三个用适配器的控件,ExpandableListView可折叠列表.这个控件可以实现我们在QQ中非常常见好友分组功能,ExpandableListView是ListView的子类,用法跟ListView差不多,下面我们来学习这个控件的基本使用: 常用属性: android:childDivider:指定各组内子类表项之间的分隔条,

Unity 3D学习笔记之一 界面介绍

因为学校的课程,本学期对Unity 3D有学习的要求,在博客中记录下自己的Unity学习之路(内容摘录自书本和视频,书本为Unity 4.x从入门到精通) 一.Unity界面介绍 首先进入Unity3D,在菜单栏,File中new project,选择自己的工作路径初始时我们先默认不引入任何的package. 进入Unity的界面中,先对界面进行一下简要的介绍.区域大致依次分为Hierarchy.Scene.Inspector.Project,和上方的菜单栏(Menu bar)和工具栏(Tool

[傅里叶变换及其应用学习笔记] 二十七. 高维傅里叶变换,复习

这节课主要讲傅里叶变换的计算,由于高维傅里叶变换有多个变量,多重积分,因此在计算时会有较大的困难.不过某些函数会有较为简捷的计算方式,下面来分析两类这样的函数. 可分离函数 有一类函数的高维傅里叶变换能通过计算一系列低维傅里叶变换来得到,这类函数被称为可分离函数.(There's an important class of functions for which you can compute a higher-dimensional transform by computing a serie

Linux学习笔记&lt;二十七&gt;——DNS服务器配置实例

配置规划:(vmware9下RHEL5.8系统实现) 在cqy.com域中,在192.168.0.0/24网段 ns服务器:192.168.0.150: www服务器:192.168.0.151,192.168.0.152 mail服务器:192.168.0.153 ftp服务器是www服务器的别名 配置主从服务器,从服务器IP:192.168.0.160 主服务器内授权一个子服务器,IP:192.168.0.170,并实现子服务器可以解析父域 注意:必须确保服务器防火墙不阻隔dns流量 # s

Java基础学习笔记二十七 DBUtils和连接池

DBUtils 如果只使用JDBC进行开发,我们会发现冗余代码过多,为了简化JDBC开发,本案例我们讲采用apache commons组件一个成员:DBUtils.DBUtils就是JDBC的简化开发工具包.需要项目导入commons-dbutils-1.6.jar才能够正常使用DBUtils工具. DBUtils是java编程中的数据库操作实用工具,小巧简单实用. DBUtils封装了对JDBC的操作,简化了JDBC操作,可以少写代码. Dbutils三个核心功能介绍 QueryRunner中

PHP学习笔记二十七【重写】

<?php // class Animal{ public $name; protected $price; function cry(){ echo "动物在叫....<br/>"; } } class Dog extends Animal { //重写父类方法 //当子类的方法和父类的方法同名参数也一样,可以让子类的方法覆盖父类的方法 //访问修饰符可以不一样,但是满足子类的访问范围大于等于父类的访问范围 function cry(){ echo "狗在

【Unity 3D】学习笔记二十六:unity游戏脚本(六)

在3D游戏世界中,任何一个游戏对象在创建的时候都会附带Transform(变换)组件,并且该组件是无法删除的,也不应该删除.在unity中,Transform面板一共有3个属性: Position  (位置) Rotation(旋转) Scale(缩放) 这三个值都是用来调整游戏对象在游戏界面中的位置,状态等相关参数. Position  (位置) 任何一个游戏对象的三维坐标都保存在Vector3容器中,该容器记录对象在X轴,Y轴,Z轴的坐标.一旦Vector33容器中的坐标发生变化,那么Sce

【Unity 3D】学习笔记二十九:游戏实例——简单小地图制作

任何的学习,光看不练是学不好的.所以这次就总结回顾下怎么制作MMROPG类游戏中的小地图.在MMROPG类游戏里,主角在游戏世界里走动时,一般在屏幕右上角都会有一个区域来显示当前游戏场景的小地图.主角在游戏世界里走动,小地图里代表着主角的小标记也会随之移动.那怎么实现咧? 首先需要确定两个贴图,第一个是右上角的小地图背景贴图,应该是从Y轴俯视向下截取主角所在的位置大地图.第二个就是主角的位置大贴图.在本例中,因为没有学习unity地图制作,所以地图用一个面对象代替,主角用立方体代替,使用GUI来