GameObject 'не содержит определения для AddForce ||Unity3D - PullRequest
0 голосов
/ 28 сентября 2019

У меня ошибка:

'GameObject' does not contain a definition for 'AddForce' and no accessible extension method
'AddForce' accepting a first argument of type 'GameObject' could be found (are you missing a using directive or an assembly reference?)

Код:

public float power = 500.0f;
GameObject var;

void OnCollisionEnter(Collision myCollision) {
if (myCollision.gameObject.name == "Cube") {
    var = GameObject.Find("Cube");
    var.AddForce(new Vector3(0.0f, 0.0f, power));
  }
}

Я хочу изменить координаты текущего объекта при столкновении с другими объектами.

1 Ответ

0 голосов
/ 28 сентября 2019

Исходя из того, что вы пытаетесь, я предполагаю, что вы пытаетесь добавить силу к объекту, с которым он столкнулся.

Прежде всего, вы сделали:

if (myCollision.gameObject.name == "Cube")
  {
    var = GameObject.Find("Cube");
    var.AddForce(new Vector3(0.0f, 0.0f, power));
  }

Старайтесь избегать GameObject.Find(string) метода, так как это дорогой вызов.
На самом деле вам даже не нужно этого делать, поскольку у вас уже есть игровой объект, с которым вы уже сталкиваетесь, это то, чтоmyCollision для.

Вы можете сделать это вместо этого:

if (myCollision.gameObject.name == "Cube")
  {
    var = myCollision.gameObject; // Aka the gameobject you have collided with.
    var.AddForce(new Vector3(0.0f, 0.0f, power));
  }

Возвращаясь к вопросу , вы пытались добавить силу ктвердое тело, но, однако, var имеет тип GameObject, а не RigidBody.

Что вам нужно сделать, это получить компонент RigidBody из GameObject, например, так:

var.GetComponent<Rigidbody>().AddForce(...

Обратите внимание, что исключение нулевой ссылки возникает, если к GameObject не подключен компонент Rigidbody.
Убедитесь, что куб, с которым вы сталкиваетесь, имеет компонент RigidBody в Инспекторе Unity.

Также вы можете заметить, что повторные вызовы GetComponent() могут быть дорогими.Вы можете рассмотреть возможность кэширования, если это возможно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...