如何统一引用玩家

时间:2019-12-05 10:13:46

标签: c# unity3d

代码(GameObject参考)没有显示,所以我需要一种不同的方式来引用玩家。我还没有尝试太多。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CamaraBehaviour : MonoBehaviour {
    public Object Player;
    public float yOffset = 3.0f;
    public float zOffset = 10.0f;
    Vector3 newPos = Player.transform.position;
    // Use this for initialization
    void Start () {
    }

    // Update is called once per frame
    void Update () {
        newPos.y = newPos.y + yOffset;
        newPos.z = newPos.z + zOffset;
        transform.position = newPos;
        transform.LookAt(player.transform);
    }
}

这是我的相机固定码。这就是为什么我首先需要参考的原因。 我感谢您的帮助(请不要写任何其他字眼,请学校阻止该单词,这样如果您回答这个单词,我将无法访问该网站。)

2 个答案:

答案 0 :(得分:1)

Player不会出现在检查器中,因为它的类型为Object,不可序列化。您想对Unity对象使用GameObject

public GameObject Player;

此代码中还有其他一些错误。

  1. 您不能使用对方法外部的另一个对象的引用来设置newPos。而是在Update()中执行此操作。

    Vector3 newPos;
    
    // Update is called once per frame
    void Update () {
        newPos = Player.transform.position;
        // your other code
    }
    
  2. 更新的最后一行有一个错字,Player中的P必须为大写(这就是您命名的变量)。

    transform.LookAt(Player.transform);
    

编辑:但是,由于无论如何您似乎都只使用Player.transform,因此不妨继续引用该转换组件。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CamaraBehaviour : MonoBehaviour {
    public Transform Player;
    public float yOffset = 3.0f;
    public float zOffset = 10.0f;
    Vector3 newPos;

    // Update is called once per frame
    void Update () {
        newPos = Player.position;
        newPos.y = newPos.y + yOffset;
        newPos.z = newPos.z + zOffset;
        transform.position = newPos;
        transform.LookAt(Player.position);
    }
}

答案 1 :(得分:0)

如果脚本已附加到播放器,则可以执行以下操作:

private GameObject player;

void Start()
{
    player = GetComponent<GameObject>();
}

但是,您可以设置一个公共变量,如Marcus的另一个答案所示。

但是...如果您想在运行时找到游戏对象,也可以这样做:

private GameObject player;

void Start()
{
    player = GameObject.FindWithTag("Player");
}

您只需要确定相应地标记播放器即可。