Unity错误CS0236:字段初始化器无法引用非静态字段,方法或属性'UnitySampleAssets._2D.Camera2DFollow.Characters'

问题描述 投票:-1回答:2

我意识到有数百页与此错误有关。但是,我已经研究了其中的许多问题,并且无法找到与我的特定问题有关的问题,因此,如果这是重复的主题,我会表示歉意。我正在尝试修改unity提供的2D摄像机脚本,以将其“目标”(其跟随的游戏对象)选择为用户选择的任何角色。我是C#的新手,所以我不太了解如何处理此错误。我发布了整个代码,以防万一,但应该在前10行左右找到错误

using UnityEngine;

namespace UnitySampleAssets._2D
{

    public class Camera2DFollow : MonoBehaviour
    {
        private string character = PlayerPrefs.GetString("Character")
        public Transform target = Transform.Find(character);
        public float damping = 1;
        public float lookAheadFactor = 3;
        public float lookAheadReturnSpeed = 0.5f;
        public float lookAheadMoveThreshold = 0.1f;

        private float offsetZ;
        private Vector3 lastTargetPosition;
        private Vector3 currentVelocity;
        private Vector3 lookAheadPos;

        // Use this for initialization
        private void Start()
        {
            lastTargetPosition = target.position;
            offsetZ = (transform.position - target.position).z;
            transform.parent = null;
        }

        // Update is called once per frame
        private void Update()
        {

            // only update lookahead pos if accelerating or changed direction
            float xMoveDelta = (target.position - lastTargetPosition).x;

            bool updateLookAheadTarget = Mathf.Abs(xMoveDelta) >                    lookAheadMoveThreshold;

            if (updateLookAheadTarget)
            {
                lookAheadPos =       lookAheadFactor*Vector3.right*Mathf.Sign(xMoveDelta);
            }
            else
            {
                lookAheadPos = Vector3.MoveTowards(lookAheadPos, Vector3.zero, Time.deltaTime*lookAheadReturnSpeed);
            }

            Vector3 aheadTargetPos = target.position + lookAheadPos + Vector3.forward*offsetZ;
            Vector3 newPos = Vector3.SmoothDamp(transform.position, aheadTargetPos, ref currentVelocity, damping);

            transform.position = newPos;

            lastTargetPosition = target.position;
        }
    }
}
c#
2个回答
1
投票

您不能使用另一个变量初始化变量

private string character = PlayerPrefs.GetString("Character")
public Transform target = Transform.Find(character); // <---- Trying to access 'character' which is a variable

而不是放在Start()方法中

private void Start()
{
    target = Transform.Find(character); // <---- here
    lastTargetPosition = target.position;
    offsetZ = (transform.position - target.position).z;
    transform.parent = null;
}

0
投票

谢谢,我每个人都设法使用了您的所有建议并使它正常工作!它花费了比原本应该花费的时间更长的时间,但是多亏了大家,我终于可以继续这一部分并接受下一个挑战:库存。谢谢朋友!

© www.soinside.com 2019 - 2024. All rights reserved.