2015-10-11 293 views
1

我试图从启动时访问附加到我的mainPlayer对象的ThirdPersonCharacter脚本(具体地说是isPoweredUp变量)。从另一个对象访问变量

目标是当玩家碰撞加电,因为它标记isPoweredUp,然后摧毁通电对象。

这是我迄今所做的:

using UnityEngine; 
using System.Collections; 

public class pickUp: MonoBehaviour 
{ 

    public GameObject mainPlayer; 
    public GameObject pickupPrize; 
    public GameObject playerScript; 

    private ThirdPersonCharacter thirdPersonCharacter; 

    void Awake() { 
     mainPlayer = GameObject.FindGameObjectWithTag("Player"); 
    } 

    void Start() 
    { 

     pickupPrize = GameObject.FindGameObjectWithTag("Pickup"); 
     thirdPersonCharacter = mainPlayer.GetComponent<ThirdPersonCharacter>(); 

    } 

    void OnTriggerStay(Collider thePlayer){ 

     { 
      thirdPersonCharacter.isPoweredUp = true; 
      Destroy(pickupPrize); 


     } 
    } 
} 

在我mainPlayer对象,我有一个名为isPoweredUp公共变量,当前设置为false

当我尝试运行此我得到以下错误:

The type or namespace name ThirdPersonCharacter could not be found 

我在做什么错在这里?

编辑:

这是attatched我mainPlayer游戏对象的脚本ThirdPersonCharacter:

Using UnityEngine; 

namespace UnityStandardAssets.Characters.ThirdPerson 
{ 
    [RequireComponent(typeof(Rigidbody))] 
    [RequireComponent(typeof(CapsuleCollider))] 
    [RequireComponent(typeof(Animator))] 

    public class ThirdPersonCharacter : MonoBehaviour 
    { 
     [SerializeField] float m_MovingTurnSpeed = 360; 
     [SerializeField] float m_StationaryTurnSpeed = 180; 
     [SerializeField] float m_JumpPower = 12f; 
     [Range(1f, 4f)][SerializeField] float m_GravityMultiplier = 2f; 
     [SerializeField] float m_RunCycleLegOffset = 0.2f; 6 
     [SerializeField] float m_MoveSpeedMultiplier = 1f; 
     [SerializeField] float m_AnimSpeedMultiplier = 1f; 
     [SerializeField] float m_GroundCheckDistance = 0.1f; 

     Rigidbody m_Rigidbody; 
     Animator m_Animator; 
     bool m_IsGrounded; 
     float m_OrigGroundCheckDistance; 
     const float k_Half = 0.5f; 
     float m_TurnAmount; 
     float m_ForwardAmount; 
     Vector3 m_GroundNormal; 
     float m_CapsuleHeight; 
     Vector3 m_CapsuleCenter; 
     CapsuleCollider m_Capsule; 
     bool m_Crouching; 
     public bool isPoweredUp; 
     ... 
    } 
} 
+0

_“在我的mainPlayer对象上,我有一个名为isPoweredUp的公共变量” - 您发布的代码似乎与该声明相矛盾。在任何情况下,您引用的错误消息通常会带有后半部分:_“(您是否缺少使用指令或程序集引用?)”_。你也是?该类型在哪里定义?你为什么认为你使用它的代码应该知道这种类型? –

+0

我添加了我尝试引用的代码,附加到我的mainPlayer对象 –

+0

准确地说(当然这很重要!)*“在我的mainPlayer对象上,我有一个名为'isPoweredUp'的公共变量”* is错:从代码中看起来像你理解的,但要确保这句话应该是*“在我的mainPlayer'对象上,我有一个名为”ThirdPersonCharacter“的组件,名为isPoweredUp”*。 – 31eee384

回答

1

的命名空间是与试图搞乱参考。通过删除它,我能够得到它的工作。

所以我只是删除

namespace UnityStandardAssets.Characters.ThirdPerson 
{ 
[RequireComponent(typeof(Rigidbody))] 
[RequireComponent(typeof(CapsuleCollider))] 
[RequireComponent(typeof(Animator))] 

,现在它的工作。

+1

您需要删除的唯一行是'namespace'。不过,通常情况下,Unity组件不使用名称空间。 – 31eee384