You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Unity报错CS1519:类/结构体成员声明含无效符号,新手求助C#代码兼容问题

解决你的Unity C#编译错误问题

嘿,我来帮你搞定这两个CS1519编译错误!问题其实出在变量声明和初始化的位置上,咱们一步步理清楚:

错误原因分析

  • 重复变量声明+非法初始化位置:你在类里先声明了private Vector3 offset;,紧接着又写了Vector3 offset = transform.position;——这不仅重复定义了同名变量,更关键的是:在类的成员字段级别,不能直接用transform.position来初始化变量。因为transform是对象的实例属性,在类字段初始化阶段,对象还没完成实例化,没法访问这些实例成员,编译器自然会抛出“无效符号”的错误。
  • 另外,你原本空着的Start方法,正好是放初始化逻辑的最佳位置。

修正后的代码

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

public class camera_controller : MonoBehaviour {
    public GameObject player;
    private Vector3 offset; // 只保留一次变量声明

    // Start is called before the first frame update
    void Start() {
        // 在这里初始化offset,此时对象已完成实例化,transform可以正常访问
        // 调整计算逻辑:相机初始位置 - 玩家初始位置,才能得到正确的相对偏移量
        offset = transform.position - player.transform.position;
    }

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

    void LateUpdate () {
        transform.position = player.transform.position + offset;
    }
}

额外小提示

我特意调整了offset的计算方式:如果直接取相机初始位置,后续跟着玩家位置加这个值会导致相机直接跳到“玩家位置+相机初始世界坐标”的位置,这显然不是你要的跟随效果。正确的相对偏移应该是相机初始位置减去玩家初始位置,这样玩家移动时,相机位置=玩家位置+偏移量,就能始终保持和玩家的相对位置不变啦。

内容的提问来源于stack exchange,提问作者Alex T.

火山引擎 最新活动