Итак, моя цель - обнаружить, когда pacman ест гранулу, однако метод OnCollisionEnter2D никогда не вызывается. Я новичок в Unity, поэтому извините, если это простое исправление. Единственный «улов» в том, что все динамически генерируется, поэтому это может быть причиной проблемы.OnCollisionEnter2D никогда не назывался
public class World : MonoBehavior
{
GameObject pacman;
List<GameObject> pellets;
// Use this for initialization
void Start()
{
pellets = new List<GameObject>();
pacman = new GameObject();
pacman.AddComponent("PacmanController");
pacman.AddComponent<SpriteRenderer>();
pacman.GetComponent<PacmanController>().Setup(eastSprite, new Vector3((y - width/2)*scale.x, -(x - height/2) * scale.y, 0), new Vector3(2, 2, 0));
pacman.AddComponent<Rigidbody2D>();
pacman.GetComponent<Rigidbody2D>().gravityScale = 0;
for(...)
{
GameObject go = new GameObject();
go.transform.position = new Vector3((y - width/2) * scale.x, -(x - height/2) * scale.y, 0);
go.AddComponent<SpriteRenderer>();
go.GetComponent<SpriteRenderer>().sprite = pelletSprite;
go.transform.localScale = new Vector3(2, 2, 0);
go.name = "pellet";// +y + "," + x;
pellets.Add(go);
}
}
}
Класс pacman: не
using UnityEngine;
using System.Collections;
public class PacmanController : MonoBehaviour {
// Use this for initialization
void Start() {
}
bool aDown;
bool wDown;
bool dDown;
bool sDown;
void Update() {
Vector3 scale = new Vector3(.4f, .4f, 0);
if (Input.GetKeyDown(KeyCode.A)) aDown = true;
else if (Input.GetKeyUp(KeyCode.A)) aDown = false;
if (Input.GetKeyDown(KeyCode.W)) wDown = true;
else if (Input.GetKeyUp(KeyCode.W)) wDown = false;
if (Input.GetKeyDown(KeyCode.S)) sDown = true;
else if (Input.GetKeyUp(KeyCode.S)) sDown = false;
if (Input.GetKeyDown(KeyCode.D)) dDown = true;
else if (Input.GetKeyUp(KeyCode.D)) dDown = false;
Vector3 vel = new Vector3();
if (dDown) vel = new Vector3(1, 0, 0);
else if (aDown) vel = new Vector3(-1, 0, 0);
else if (wDown) vel = new Vector3(0, 1, 0);
else if (sDown) vel = new Vector3(0, -1, 0);
this.transform.position += vel * Time.deltaTime;
}
public void Setup(Sprite sprite, Vector3 position, Vector3 scale)
{
this.GetComponent<SpriteRenderer>().sprite = sprite;
this.transform.position = position;
this.transform.localScale = scale;
}
void OnCollisionEnter2D(Collision2D coll)
{
Debug.Log("Collision Detected!");
if (coll.gameObject.name == "pellet")
{
coll.gameObject.SetActive(false);
}
}
}
Любые идеи, почему OnCollisionEnter2D (...) не вызывается?
Возможно, этот ответ? http://stackoverflow.com/a/20567948/359157 – TyCobb
Не похоже, извините. – Colton
Удалил мой ответ, потому что преждевременно ответил. Позвольте мне спросить вас об этом: имеет ли ваш объект pacman жесткий компонент? – SirBraneDamuj