好吧,我从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#编写的)
如果有什么帮助的话,我可以再找一个好的教程吗?
来自文档:
"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
不包含xMin
和xMax
的定义等。为了实现这一点,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)
);