2016-08-12 2 views
0

Я пытаюсь запрограммировать очень простую игру FPS, и я достиг точки, где мне нужно создать систему оружия пикапа. Для того, чтобы закончить эту систему, я застрял на месте, где мне нужно AddComponent("Rigidbody") и AddComponent("BoxCollider") и Unity3D бросает эту ошибку:AddComponent («Rigidbody») или другой компонент не работает

'AddComponent is not a member of 'WeaponPickUp'

Где WeaponPickUp мой файл сценария Javascript.

Ниже мой код:

#pragma strict 

var pickup = false; 
var check = 2; 

function Update() { 
    if (Input.GetButtonDown("pickup") && check % 2 == 0){ 
     GetObject(); 
     pickup = true; 
     check = check + 1; 
    } 
    else if (Input.GetButtonDown("pickup") && (check % 2 == 1)){ 
     pickup = false; 
     check = check - 1; 
     this.AddComponent("Rigidbody") as Rigidbody; 
     this.AddComponent("BoxCollider") as BoxCollider; 
     this.GetComponent(BoxCollider).enabled = true; 
    } 
} 

function GetObject(){ 
    var position : GameObject = GameObject.Find("weaponPosition"); 
    this.transform.position = position.transform.position; 
    Destroy(GetComponent(Rigidbody)); 
    Destroy(GetComponent(BoxCollider)); 
    this.transform.parent = GameObject.Find("FPSController").transform; 
    this.transform.parent = GameObject.Find("FirstPersonCharacter").transform; 
    // this.transform.parentposition 
} 

Я понятия не имею, почему это происходит. Любой, кто хочет помочь мне, я буду признателен, как всегда!

+0

Когда Unity выдает ошибку, он приходит с номером строки, какая линия дает вам ошибку? – Okomikeruko

ответ

1

Это

this.AddComponent("Rigidbody") as Rigidbody; 
this.AddComponent("BoxCollider") as BoxCollider; 
this.GetComponent(BoxCollider).enabled = true; 

должен быть

gameObject.AddComponent("Rigidbody") as Rigidbody; 
gameObject.AddComponent("BoxCollider") as BoxCollider; 
gameObject.GetComponent(BoxCollider).enabled = true; 

же для Destroy линий

AddComponent является частью GameObject, а не ваш WeaponPickUp

+0

AddComponent и GetComponent используют общие типы. Не должно быть 'gameObject.GetComponent ()' – Okomikeruko

+0

@Okomikeruko 'GetComponent()'/'AddComponent()' имеет как версию общего типа, так и одну, которая принимает имя строки в качестве параметра. Любая версия в порядке. – Serlite

+0

Ах. Понимаю. Я никогда не пробовал строчную версию. – Okomikeruko

0

Удалить this ключевое слово ш Ith gameObject затем удалить as Rigidbody и as BoxCollider

Это то, что он должен выглядеть следующим образом:

gameObject.AddComponent("Rigidbody"); 
gameObject.AddComponent("BoxCollider"); 
gameObject.GetComponent("BoxCollider").enabled = true; 

Синтаксис выше должен работал, но она устарела. Он изменился в Unity 5. Вы получите ошибку, если вы сделаете это так. Ниже приведен новый синтаксис и правильный способ сделать это сейчас.

GetComponent.<Rigidbody>(); 
GetComponent.<BoxCollider>(); 
GetComponent.<BoxCollider>().enabled = true; 

весь Ваш код:

#pragma strict 

var pickup = false; 
var check = 2; 

function Update() { 
    if (Input.GetButtonDown("pickup") && check % 2 == 0){ 
     GetObject(); 
     pickup = true; 
     check = check + 1; 
    } 
    else if (Input.GetButtonDown("pickup") && (check % 2 == 1)){ 
     pickup = false; 
     check = check - 1; 
     GetComponent.<Rigidbody>(); 
     GetComponent.<BoxCollider>(); 
     GetComponent.<BoxCollider>().enabled = true; 
    } 
} 

function GetObject(){ 
    var position : GameObject = GameObject.Find("weaponPosition"); 
    this.transform.position = position.transform.position; 
    Destroy(GetComponent(Rigidbody)); 
    Destroy(GetComponent(BoxCollider)); 
    this.transform.parent = GameObject.Find("FPSController").transform; 
    this.transform.parent = GameObject.Find("FirstPersonCharacter").transform; 
    // this.transform.parentposition 
} 
Смежные вопросы