Как изменить особенность капсульного коллайдера в единстве
Я надеюсь, что мой вопрос не повторяется. Мне нужно изменить функцию капсульного коллайдера во время выполнения моего кода:
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;