【发布时间】:2015-05-06 10:02:17
【问题描述】:
我正在使用 Unity 5 个人版。我正在尝试将浮点数从一个脚本传递到另一个脚本,但出现此错误:
Assets/CameraTracksPlayer.cs(15,36):错误 CS1061:类型
ClimberMovement' does not contain a definition forstopCamera' 和 没有扩展方法stopCamera' of typeClimberMovement' 可能是 找到(您是否缺少 using 指令或程序集引用?)
我不知道我做错了什么。
这是我的代码:
using UnityEngine;
using System.Collections;
public class CameraTracksPlayer : MonoBehaviour {
Transform player;
float isDead;
float offsetY;
// Use this for initialization
void Start () {
GameObject go = GameObject.Find ("MainCamera");
ClimberMovement dying = go.GetComponent <ClimberMovement> ();
float died = dying.stopCamera; //this line gets error!
isDead = died;
GameObject player_go = GameObject.FindGameObjectsWithTag("Player")[0];
if (player_go == null) {
Debug.LogError("Ne dela ker ni taga Player");
return;
}
player = player_go.transform;
offsetY = transform.position.y - player.position.y;
}
// Update is called once per frame
void Update () {
if (player != null && isDead == 1) {
Vector3 pos = transform.position;
}
else if (player != null) {
Vector3 pos = transform.position;
pos.y = player.position.y + offsetY;
transform.position = pos;
}
}
}
这是我试图从中传递变量的脚本代码:
using UnityEngine;
using System.Collections;
public class ClimberMovement : MonoBehaviour {
Vector3 velocity = Vector3.zero;
public Vector3 gravity;
public Vector3 climbVelocity;
public Vector3 climbVelocityJump;
public float maxSpeed = 5f;
public bool stopCamera = false;
bool didClimb = false;
bool didJump = false;
bool jumping = false;
bool jumping2 = false;
Animator animator;
bool dead = false;
// Use this for initialization
void Start () {
animator = transform.GetComponentInChildren<Animator> ();
animator.SetTrigger("DoClimb");
}
//do gfx input update here
void Update () {
if(Input.GetMouseButtonDown(0)){
didClimb = true;
//didJump = true;
}
if (Input.GetMouseButtonUp(0)) {
jumping2 = true;
}
}
// do physics engine update here
void FixedUpdate () {
velocity += gravity * Time.deltaTime;
if(didClimb == true){
didClimb = false;
jumping = true;
velocity += climbVelocity;
}
else if (jumping2 == true && dead == false) {
jumping = false;
jumping2 = false;
velocity += climbVelocityJump;
}
velocity = Vector3.ClampMagnitude(velocity, maxSpeed);
transform.position += velocity * Time.deltaTime;
if (transform.position.x <= -3.9f) {
transform.position = new Vector3 (-3.9f, transform.position.y, transform.position.z);
if (transform.position.x == -3.9f) {
dead = true;
stopCamera = true;
animator.SetTrigger ("Death");
velocity.y = -5f;
velocity.x = -5f;
}
} else if (transform.position.x >= -1f) {
transform.position = new Vector3 (-1f, transform.position.y, transform.position.z);
}
}
}
【问题讨论】:
-
奇怪,当前形式的这段代码应该可以工作。你确定你是照原样复制的吗?
-
另外,请不要在未阅读标签说明的情况下使用标签。
unity标签与 Unity 游戏引擎无关。 -
顺便说一句——你似乎使用
float类型的isDead来保存一个布尔值。 C#(以及几乎所有其他现代语言)对此有一个特殊的类型,bool。 -
只需在我自己的统一场景中测试您的代码,它运行良好。你能给我们你的整个登山者运动脚本吗?
-
@Fisheroid 如果脚本不在游戏对象中,你应该在 getComponent 行有一个 nullReferenceException