我一直在教自己,并在youtube上向Jimmy Vegas学习:https://www.youtube.com/channel/UCRMXHQ2rJ9_0CHS7mhL7erg
如果你还没有看到这些教程或者不想看,那么他所做的一件事就是创建一个小脚本,当玩家对撞机撞到它时会摧毁硬币,但我的并不是。工作。下面的代码(有点格式错误,抱歉,无法正确格式化):
function OnCollisionEnter (collision : Collision) {
if(collision.gameObject.tag == "coinCollect") {
Destroy(this.gameObject);
}
}
我将脚本应用到预制件上并在一个小区域周围放置了一堆硬币,另外,我在第一人称控制器上制作了一个胶囊对撞机标记了" coinCollect",并勾选了#34; Is触发"
另外,我试图制作一个传送器,将第一个人物角色从一个传送器传送到另一个传送器。代码如下:
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"分别和两个warp目标在代码中没有分配任何内容,而是通过将空对象拖放到脚本提供的序列化字段中来分配。两个垫都有胶囊碰撞器,其中有#34; Is Trigger"未经检查但它不会以任何方式工作,勾选或未选择。
谁能告诉我自己可能做错了什么?谢谢。
答案 0 :(得分:1)
脚本都是正确的,我的问题是我的父母" FPSController"对象没有应用Rigidbody,应该是应用脚本的唯一对象(与#34; 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;
}
}