0

我希望我的问题不重复。我需要在运行时更改胶囊对撞机的功能我的代码:

Game_Controller.Database [m, n].Nute_M.AddComponent(typeof(CapsuleCollider));
Game_Controller.Database [m, n].Nute_M.GetComponent<CapsuleCollider> ().center.y = 0.17f;Game_Controller.Database [m, n].Nute_M.GetComponent<CapsuleCollider> ().radius = 0.72f;
Game_Controller.Database [m, n].Nute_M.GetComponent<CapsuleCollider> ().height = 0.64;
Game_Controller.Database [m, n].Nute_M.GetComponent<CapsuleCollider> ().direction = 2;

但我明白了

`Cannot modify a value type return value of `UnityEngine.CapsuleCollider.center'. Consider storing the value in a temporary variable`

错误。请帮我 。

4

1 回答 1

0

CapsuleCollider.centerVector3。您不能修改Vector3在另一个类中声明为自动属性的属性。复制它,修改 y 轴,然后将其分配回CapsuleCollider.center.

此外,CapsuleCollider>().height它是一个浮点数,您需要f在 0.64f 的末尾添加以进行编译。

//Make a copy
Vector3 center = Game_Controller.Database [m, n].Nute_M.GetComponent<CapsuleCollider> ().center;
//Modify the copy's y axis
center.y = 0.17f;
//Apply to the target object
Game_Controller.Database [m, n].Nute_M.GetComponent<CapsuleCollider> ().center = center;

Game_Controller.Database [m, n].Nute_M.GetComponent<CapsuleCollider> ().radius = 0.72f;
Game_Controller.Database [m, n].Nute_M.GetComponent<CapsuleCollider> ().height = 0.64f;
Game_Controller.Database [m, n].Nute_M.GetComponent<CapsuleCollider> ().direction = 2;

不需要GetComponent每次都使用,因此您可以缓存它,CapsuleCollider因为它是一个类,它将存储引用:

//Get CapsuleCollider collider
CapsuleCollider cCollider = Game_Controller.Database [m, n].Nute_M.GetComponent<CapsuleCollider> ();
//Make a copy
Vector3 center = cCollider.center;
//Modify the copy's y axis
center.y = 0.17f;
//Apply to the target object
cCollider.center = center;

cCollider.radius = 0.72f;
cCollider.height = 0.64f;
cCollider.direction = 2;
于 2017-10-03T17:33:34.713 回答