#c# #unity3d
Вопрос:
Вот мой код, он должен заставить врага двигаться назад, и когда он попадает в коробчатый коллайдер, он уничтожает его и добавляет очко к счету.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class forward : MonoBehaviour
{
float score;
public Text text;
private void FixedUpdate()
{
GetComponent<Rigidbody>().AddForce(Vector3.back * 5);
text.text = "score: " score;
print("test");
}
private void OnCollisionEnter(Collision collision)
{
if(collision.gameObject.tag == "Finish")
{
Destroy(gameObject);
score = score = 1;
}
}
}
Комментарии:
1. Распечатывается ли «тест»? Если нет,
FixedUpdate()
то вообще не вызывается.2. Просто несвязанное примечание: Интересно, что класс, называемый » вперед «, постоянно добавляет силу, указывающую назад ^^
Ответ №1:
Я точно не знаю, почему это происходит, но GetComponent не должен вызываться в обновлении. Кроме того, я думаю, что вы не должны иметь приватности перед FixedUpdate. В этом может быть проблема. Это должно выглядеть так.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class forward : MonoBehaviour
{
float score;
public Text text;
private Rigidbody rb;
void Start(){
rb = this.GetComponent<Rigidbody>();
}
void FixedUpdate()
{
rb.AddForce(Vector3.back * 5);
text.text = "score: " score;
print("test");
}
private void OnCollisionEnter(Collision collision)
{
if(collision.gameObject.tag == "Finish")
{
Destroy(gameObject);
score = score = 1;
}
}
}
Комментарии:
1. что это значит. означать
2. «это» может быть излишним, но в основном это то же самое, если вы его удалите. Обычно вы говорите gameobject.GetComponent<…> (), и поэтому вы можете указать игровой объект как «это», который является просто игровым объектом, к которому прикреплен этот скрипт.
3. Я согласен с Калебом Садлером в том, что он не использовал GetComponent в обновлении, это была (вероятно, все еще остается) дорогостоящая операция. Но этот ответ не решит вашу проблему (по крайней мере, я почти уверен).
4. поможет ли частный void FixedUpdate аннулировать FixedUpdate?
5. @CalebSadler нет! Это не имеет абсолютно никакого значения. Без определенной доступности во
c#
всем, что находится внутри классаprivate
, в любом случае по умолчанию. Вы можете создавать эти методы сообщенийprivate
public
илиprotected
сколько угодно .. это не имеет никакого значения