脚本

vince 的头像

Unity脚本入门,向新手们推荐一个很有帮助的入门级文档

 Unity脚本入门,向新手们推荐一个很有帮助的入门级文档。

出于分享精神,就不设置回复可见了。

lyj19810816 的头像

unity3d角色暂停效果脚本

  1. var playName = "None";
     
  2. static var currentControl ;
     
  3.  
  4. function Update() {
     
  5.  
  6. if( currentControl)
     
  7. return;//当有任何输入框被点击时屏蔽之后的内容
     
  8.  
  9. if (Input.GetKey(KeyCode.UpArrow)||Input.GetKey(KeyCode.W)){
     
  10. transform.Translate(Vector3.forward*0.5);
     
  11. }
     
vrman 的头像

Unity3d 脚本代码初探

1 打开场景,从菜单 Assets->Create->Javascript创建一个js代码文件,代码文件会自动创建在 Project 面板中,打开代码,里面有自动生成的一个Update () {}方法,在方法内下如输入:

function Update () {
   transform.Translate(Input.GetAxis("Horizontal"), 0.01, Input.GetAxis("Vertical"));
}

2 然后,选择菜单file->save,会发现刚刚输入的代码已经直接出现在unity3d窗口中刚被创建的代码文件中。将文件拖至Hierarchy面板中的模型名上(任意),会发现Inspector面板中相应模型的参数组最下方,多出一个 脚本文件名(script),这说明刚才的脚本内容已经可以直接影响到模型上了。

3 点击摄像机视图左下方的“play”键,就可以看到场景中相应模型的位置变化了。

tttt01 的头像

WEB调用U3D函数

如同大家所知道的U3D WEB播放器插件和ActiveX空件都有SendMessage()函数,它用于从web上调用U3D WEB播放器内部的内容函数,这个和U3D里的GameObject.SendMessage函数类似 从WEB上调用的时候,传递一个物体名称,一个函数名和一个单一参数,SendMessage()将在指定游戏物体上调用给定的数据.
为了调用U3D WEB播放器的SendMessage()函数必须先给正在显示的U3D WEB播放器内容引用.可以用JS的document和它的getElementById()函数获取对象.这有个帮助上的例子 JS函数在U3D WEB播放器内容上执行函数获取对象,物体/嵌入标签ID值为UnityContent:然后SendMessage()调用名为MyObejct物体上函数MyFunction,并且传递一段字符传数据

那么在U3DWEB播放器内容内部,就需要一个脚本名为MyObject的游戏物体 并且在该游戏物体上的有一个MyFunction的函数;(-_-!)没有我就没办法了...

如:
function MyFunction(text:String)
Debug.Log(text);
使用SendMessage()时,一个字符串,整形或者浮点型参数必须被传递,该参与在调用方是必须的.如果你不需要,那么仅仅传递一个零值或者直接却省,并且在U3D里忽略它.还有就指定的游戏物体可以路径名给出 如/MyObjcet/SomeChild这里SomeChild必须是MyObject的子,而且呢MyObject必须在根级上,因为'/'名称在前

还有在发布WEB播放器内容的时候生成的默认HTML文件包含了对象和嵌入标签以便使用内用所在的浏览器适当的加载,为了允许基于浏览器的JS能分辨2个标签,它门每个都使用不同的ID UnityObject用于对象标签,UnityEmbed用于嵌入标签.因此,却省的HTML也包含一个JS函数,GetUnity(),它执行简单的浏览检测并返回一个使用标签元素引用.这有个帮助的例子

好了WEB调用U3D 教程到此为止
参考资料 U3D帮助文档

tttt01 的头像

u3d常用代码小集合

01、基本碰撞检测代码

function OnCollisionEnter(theCollision : Collision){

if(theCollision.gameObject.name == "Floor"){

Debug.Log("Hit the floor");

}else if(theCollision.gameObject.name == "Wall"){

Debug.Log("Hit the wall");

}

}

02、检测输入

function Update () {

if(Input.GetButtonUp("Jump")){

Debug.Log("We Have Hit the Space Bar!");

}

}

03、销毁对象

function Start () {

Destroy(gameObject.Find("Box"), 3);

}

04、实例来创建对象

//Simple Instantiation of a Prefab at Start

var thePrefab : GameObject;

function Start () {

var instance : GameObject = Instantiate(thePrefab, transform.position, transform.rotation);

}

建立JAVA,把代码拖入到空GameJect上,然后把Prefab拖入到公共变量上,就可以了

05、简易定时器

var myTimer : float = 5.0;

function Update () {

if(myTimer > 0){

myTimer -= Time.deltaTime;

}

if(myTimer <= 0){

Debug.Log("GAME OVER");

}

}

06、物体在屏幕上移动

var speed : float = 5.0;

function Update () {

transform.Translate(Vector3(0,0,speed) * Time.deltaTime);

}

07、钢体向目标处移动

//Basic force to move a rigidbody object

var power : float = 500.0;

function Start () {

rigidbody.AddForce(Vector3(0,0,power));

}

08、碰撞然后转到下一场景

function OnCollisionEnter (myCollision : Collision) {

if(myCollision.gameObject.name == "Floor"){

Application.LoadLevel(myLevel);

}

}

floor---被动碰撞的的纲体

把代码拉到主动纲体上

然后

场景设置:file----build seting----对话框,然后把当前场景拖里,然后把下一场景拖里,测试OK
转自互联网,原作者看到请留名!

unityfit 的头像

Unity3d批量修改贴图导入设置工具脚本

这个脚本我一直再用,它小巧,但是威力大.特别针对大批量贴图要调整尺寸等等的时候作用尤为明显.

在菜单中添加"Custom→Texture"的方式来批量改变所选的贴图导入设置.Unity本身只能一次打开一张图片进行导入设置,目前这个脚本可以批量更改贴图格式,是否开启MipMap,调整纹理最大尺寸,是否可读等等.

用法是把脚本放在你项目的资源目录的Editor文件夹下.然后选择你要批处理的纹理.到菜单中选择要处理的类型就可以了.

ChangeTextureImportSettings.cs for Unity2.x

代码: using UnityEngine; using UnityEditor;
cgjch 的头像

一个用于过场控制的脚本文件(含演示scene)

一个用于过场控制的脚本文件(含演示scene)

可以扩展为片头的动画控制和RPG游戏的中间情节过渡和控制

有演示scene,照着做就行了

jasmino22 的头像

个人改良的行为控制脚本

之前,曾经有朋友反映过,有时这个脚本会发生“自动旋转视角”的现象,经测试发现如果在开始,默认的角度为非零时,运行时就会发生上面的问题,根据这个原因,对代码进行了修改后,此BUG已经清除。

使用方式:

新建一个C#的脚本文件,然后将下面的代码灌入其中,将官方提供的那个First Person Controller中的所有脚本删除,再链入这个脚本即可。

经过测试,在IE和火狐中都可以正常使用

using UnityEngine;

using System.Collections;

public class FPSWalker_edit02 : MonoBehaviour

{

/// <summary>

/// 类似于VRML的控制方式

/// ↑前进 ↓后退 →右转 ←左转

fallang 的头像

距离判断触发事件脚本


using UnityEngine;
using System.Collections;

public class test: MonoBehaviour {

public Transform end ;
// Use this for initialization
void Start () {
if(end == null)
end = GameObject.FindWithTag("Finish").transform;//终点目标,可以指定,也可以标记tag为Finish。

}

// Update is called once per frame
void Update () {
if(Vector3.Distance(transform.position ,end.position)<2){
print("我已经到达终点");
}

}
}

cartoonboy 的头像

关于Terrain.activeTerrain的提问??

我把var terrainHeights = Terrain.activeTerrain.terrainData.GetHeights( 0, 0, xPolyDivision, zPolyDivision);

改为var terrainHeights = GetComponent(Terrain).terrainData.GetHeights( 0, 0, xPolyDivision, zPolyDivision);

这句报错:terrainHeights[i,j] = hit.point.y/Terrain.activeTerrain.terrainData.size.y;

不明白是什么原因。为什么用activeTerrain就可以呢?? 当我在场景中创建一个Terrain时,还不都是指向同一个Terrain吗??请高手指教!!