Как изменить особенность капсульного коллайдера в единстве

Я надеюсь, что мой вопрос не повторяется. Мне нужно изменить функцию капсульного коллайдера во время выполнения моего кода:

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`

ошибка. Пожалуйста, помогите мне.

1 ответ

CapsuleCollider.center является Vector3, Вы не можете изменить свойство Vector3 это объявлено как auto-свойство в другом классе. Сделайте копию этого, измените ось 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;
Другие вопросы по тегам