zoukankan      html  css  js  c++  java
  • Unity3D脚本中文系列教程(二)

    原地址:http://dong2008hong.blog.163.com/blog/static/469688272014030347910/

    Unity3D脚本中文系列教程(一)
    
    3.根据名称或标签定位。
    
    你可以使用GameObject.FindWithTag和GameObject.FindGameObjectsWithTag搜索具有特定标签的游戏物体,使用GameObject.Find根据名称查找物体。
    
     
    function Start ()
    {
    // 按照名称
    var go = GameObject.Find(“SomeGuy”);
    go.transform.Translate(0, 1, 0);
    // 按照标签
    var player = GameObject.FindWithTag(“Player”);
    player.transform.Translate(0, 1, 0);
    }
      你可以在结果上使用GetComponent,在找到的游戏物体上得到任何脚本或组件。
    function Start ()
    {
    // 按名称
    var go = GameObject.Find(“SomeGuy”);
    go.GetComponent(OtherScript)。DoSomething();
    // 按标签
    var player = GameObject.FindWithTag(“Player”);
    player.GetComponent(OtherScript)。DoSomething();
    }
    一些特殊的物体有快捷方式,如主相机使用Camera.main。
    
    4.作为参数传递
    
    一些事件消息在事件包含详细信息。例如,触发器事件传递碰撞物体的Collider组件到处理函数。
    
    OnTriggerStay给我们一个到碰撞器的引用。从这个碰撞器我们可以获取附加到其上的刚体。
    
     
    function OnTriggerStay( other : Collider ) {
    // 如果另一个碰撞器也有一个刚体
    // 应用一个力到它上面
    if (other.rigidbody) {
    other.rigidbody.AddForce(0, 2, 0);
    }
    }
    或者我们可以通过碰撞器获取附加在同一个物体上的任何组件。
    
     
    function OnTriggerStay( other : Collider ) {
    // 如果另一个碰撞器附加了OtherScript
    // 调用它上面的DoSomething
    // 大多数时候碰撞器不会附加脚本
    // 所以我们需要首先检查以避免null引用异常
    if (other.GetComponent(OtherScript)) {
    other.GetComponent(OtherScript)。DoSomething();
    }
    }
    注意通过上述例子中的other变量,你可以访问碰撞物体中的任何组件。
    
    5.一种类型的所有脚本
    
    使用Object.FindObjectsOfType找到所有具有相同类或脚本名称的物体,或者使用Object.FindObjectOfType.找到这个类型的第一个物体。
    
     
    function Start ()
    {
    // 找到场景中附加了OtherScript的任意一个游戏物体
    var other : OtherScript = FindObjectOfType(OtherScript);
    other.DoSomething();
    }
    概览:向量
    
    unity使用Vector3类同一表示全体3d向量,3D向量的不同组件可以通过想x,y和z成员变量访问。
    
    var aPosition : Vector3;
    
    aPosition.x = 1;
    
    aPosition.y = 1;
    
    aPosition.z = 1;
    
    你也能够使用Vector3构造函数来同时初始化所有组件。
    
    var aPosition = Vector3(1, 1, 1);
    
    Vector3也定义了一些常用的变量值。
    
    var direction = Vector3.up; // 与 Vector3(0, 1, 0);相同
    
    单个向量上的操作可以使用下面的方式访问:
    
    someVector.Normalize();
    
    使用多个向量的操作可以使用Vector3类的数;
    
    theDistance = Vector3.Distance(oneVector, otherVector);
    
    (注意你必须在函数名之前写Vector3来告诉JavaScript在哪里找到这个函数,这适用于所有类函数)
    
    你也可以使用普通数学操作来操纵向量。
    
    combined = vector1 + vector2;
    
    查看Vector3类文档获取完整操纵和可用属性的列表。
    
    概览:成员变量 & 全局变量变量
    
    定义在任何函数之外的变量是一个成员变量。在Unity中这个变量可以通过检视面板来访问,任何保存在成员变量中的值也可以自动随工程保存。
    
    var memberVariable = 0.0;
    
    上面的变量将在检视面板中显示为名为“Member Variable”的数值属性。
    
    如果你设置变量的类型为一个组件类型(例如Transform, Rigidbody, Collider,任何脚本名称,等等)然后你可以在检视面板中通过拖动一个游戏物体来设置它们。
    
     
    var enemy : Transform;
    function Update()
    {
    if ( Vector3.Distance( enemy.position, transform.position ) < 10 );
    print(“I sense the enemy is near!”);
    }
    }
    你也可以创建私有成员变量。私有成员变量可以用来存储那些在该脚本之外不可见的状态。私有成员变量不会被保存到磁盘并且在检视面板中不能编辑。当它被设置为调试模式时,它们在检视面板中可见。这允许你就像一个实时更新的调试器一样使用私有变量。
    
     
    private var lastCollider : Collider;
    function OnCollisionEnter( collisionInfo : Collision ) {
    lastCollider = collisionInfo.other;
    }
    全局变量
    
    你也可以使用static关键字创建全局变量
    
    这创造了一个全局变量,名为someGlobal
    
     
    // 'TheScriptName.js‘中的一个静态变量
    static var someGlobal = 5;
    // 你可以在脚本内部像普通变量一样访问它
    print(someGlobal);
    someGlobal = 1;
    为了从另一个脚本访问它,你需要使用这个脚本的名称加上一个点和全局变量名。
    
     
    print(TheScriptName.someGlobal);
    TheScriptName.someGlobal = 10;
  • 相关阅读:
    点击文本变成输入框
    html代码片段
    node 开启Gzip压缩
    npm 安装与卸载
    console.dir()-----js中console.log()和console.dir()的区别
    javaScript学习笔记之-------this
    javaScript学习笔记之-------闭包
    从零搭建vue项目---VUE从无到有
    require.js扫盲版
    cross-env 解决跨平台设置的NODE_ENV的问题
  • 原文地址:https://www.cnblogs.com/123ing/p/3912056.html
Copyright © 2011-2022 走看看