Unity Error CS1061

本文关键字:CS1061 Error Unity | 更新日期: 2023-09-27 18:28:44

好吧,我从Unity引擎收到了这个错误,我不确定如何修复它。我一直在努力寻找解决方案,但一无所获。我是一个脚本的初学者,因为我以前从未编写过脚本。我的脚本看起来像这样:

using UnityEngine;
using System.Collections;
[System.Serializable]
public class Boundary
{
    public float xMin, xMax, zMin, zMax;
}
public class PlayerBullet : MonoBehaviour
{
    public float speed;
    void FixedUpdate()
    {
        float moveHorizontal = Input.GetAxis ("Horizontal");
        float moveVertical = Input.GetAxis ("Vertical");
        var movement = new Vector3 (moveHorizontal, 0.0f, moveVertical);
        var rigidbody = GetComponent<Rigidbody> ();
        rigidbody.velocity = movement * speed;
        object boundary = null;
        rigidbody.position = new Vector3
            (
             Mathf.Clamp (rigidbody.position.x, boundary.xMin, boundary.xMax),
            0.0f,
            Mathf.Clamp (rigidbody.position.z, boundary.zMin, boundary.zMax)
            );
    }
}

我可以得到一些关于如何解决这个问题的帮助吗?它说我的xMin、xMax、zMin和zMax有问题。这应该是一个子弹地狱,防止球员出界,但如果我不能设置边界,这就不起作用。我正在学习本教程:https://www.youtube.com/watch?v=zJHRkdRq4BQ(这都是用C#编写的)

如果有什么帮助的话,我可以再找一个好的教程吗?

Unity Error CS1061

来自文档:

"type"不包含"member"的定义,也没有扩展名找不到接受"type"类型的第一个参数的方法"name"(是否缺少using指令或程序集引用?)。这尝试调用方法或访问类成员时出错这是不存在的。

你的问题就在这里:

object boundary = null;
rigidbody.position = new Vector3
    (
        Mathf.Clamp (rigidbody.position.x, boundary.xMin, boundary.xMax),
        0.0f,
        Mathf.Clamp (rigidbody.position.z, boundary.zMin, boundary.zMax)
    );

问题是boundary的类型是object,而object不包含xMinxMax的定义等。为了实现这一点,boundary需要是Boundary类型,如下所示:

Boundary boundary = null;
rigidbody.position = new Vector3
    (
        Mathf.Clamp (rigidbody.position.x, boundary.xMin, boundary.xMax),
        0.0f,
        Mathf.Clamp (rigidbody.position.z, boundary.zMin, boundary.zMax)
    );

然而,这反过来会给您一个NullReferenceException,因为您正试图使用从未创建过的对象的属性。你可以这样做来解决这个问题:

Boundary boundary = new Boundary
{
    xMin = 134.0f;
    xMax = 146.0f;
    zMin = 112.0f;
    zMax = 153.0f;
}; // assign some values otherwise it will all default to 0.0f
rigidbody.position = new Vector3
    (
        Mathf.Clamp (rigidbody.position.x, boundary.xMin, boundary.xMax),
        0.0f,
        Mathf.Clamp (rigidbody.position.z, boundary.zMin, boundary.zMax)
    );