【问题标题】:[Unity][Javascript] Why are these simple js scripts not working in Unity?[Unity][Javascript] 为什么这些简单的 js 脚本在 Unity 中不起作用?
【发布时间】:2015-11-18 14:23:23
【问题描述】:

我一直在自学并在 youtube 上向 Jimmy Vegas 学习:https://www.youtube.com/channel/UCRMXHQ2rJ9_0CHS7mhL7erg

如果您还没有看过这些教程或不想看,他所做的其中一件事是创建一个小脚本,当玩家对撞机击中硬币时将其摧毁,但我的不起作用。下面的代码(格式有点错误,抱歉,无法正确格式化):

function OnCollisionEnter (collision : Collision) {
  if(collision.gameObject.tag == "coinCollect") {
    Destroy(this.gameObject);
  } 
}

我将脚本应用到一个预制件上并在一个小区域周围放置了一堆硬币,此外,我在标记为“coinCollect”的第一人称控制器中制作了一个胶囊对撞机,并勾选了“Is Trigger”

另外,我正在尝试制作一个传送器,将第一人称角色从一个传送器传送到另一个传送器。代码如下:

var warptarget001 : GameObject;
var warptarget002 : GameObject;
function OnTriggerEnter (col : Collider) {
  if (col.gameObject.tag == "warp001") {
    this.transform.position = warptarget002.position;
  } else if (col.gameObject.tag == "warp002") {
    this.transform.position = warptarget001.position;
  }
}

我在这里有四个对象,两个经线垫和两个经线目标。两个变形垫分别标记为“warp001”和“warp002”,两个变形目标在代码中没有分配任何内容,而是通过将一个空对象拖放到脚本提供的序列化字段中来分配。两个垫子都有胶囊碰撞器未勾选“Is Trigger”,但无论是勾选还是未勾选,它都不起作用。

谁能告诉我我做错了什么?谢谢。

【问题讨论】:

  • 技术说明:在 JavaScript 中,== 用于强制相等,=== 用于类型相等。但是,您显示的似乎不是 JavaScript,因为 JavaScript 没有明确的类型。这是 TypeScript、ActionScript 还是其他变体?因为用正确的语言标签标记你的问题会让你得到更好的答案。
  • 我复制了 youtuber 的内容,warp 脚本可以在这里找到:weebly.com/uploads/4/7/6/0/47606749/warp_script.txt
  • @Mike'Pomax'Kamermans Javascript 是正确的标签。这是 Unity3d 的变体。 Unity3D 在其所有资源中都将其称为 javascript。
  • 你试过没有IsTrigger打勾的硬币吗?
  • @Reasurria:通常称为unityscript,这也是stackoverflow标签的名称。

标签: unity3d unityscript


【解决方案1】:

脚本都是正确的,我的问题是我的父“FPSController”对象没有应用刚体,应该是唯一的对象(与我嵌套在其中的“FirstPersonCharacter”对象相反)脚本应用到。这似乎解决了问题。

正确的代码是:

/* coincollect.cs */
using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class coincollect : MonoBehaviour {

private int _score;

[SerializeField]
private Text _text;

void  OnTriggerEnter ( Collider collision  ){

    if(collision.gameObject.tag == "coin"){

        Destroy(collision.gameObject);
        _score++;

        _text.text = "Score: " + _score;

    }   
  }
} 

和:

/* warp.js */
var warptarget001 : GameObject;
var warptarget002 : GameObject;

function OnTriggerEnter (col : Collider) {

if (col.gameObject.tag == "warp001") {
    this.transform.position = warptarget002.transform.position;
    }

if (col.gameObject.tag == "warp002") {
    this.transform.position = warptarget001.transform.position;
    }
}

【讨论】:

    【解决方案2】:

    对于您的第一个问题,我唯一能想到的是它不需要勾选 IsTrigger。除此之外,听起来它应该可以工作(除非我遗漏了什么)。

    对于您遇到的第二个问题(使用扭曲),我认为您不能通过将对象拖放到字段中来使用 warptarget001。原因是您拖入该字段的内容与 inworld 中的对象实例不同。

    您应该通过代码(最好在 Start 方法中)分配它们的值,例如使用 GameObject.Find("name")。这样,warptarget001 对应于 inworld 游戏对象。

    【讨论】:

      猜你喜欢
      • 2018-05-11
      • 1970-01-01
      • 1970-01-01
      • 2015-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多