как изменить функцию капсульного коллайдера в единстве

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

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`

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


person ali karimifard    schedule 03.10.2017    source источник
comment
Я очень любитель в unity3d... извините.   -  person ali karimifard    schedule 03.10.2017


Ответы (1)


CapsuleCollider.center это Vector3. Вы не можете изменить свойство 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;
person Programmer    schedule 03.10.2017