0
学校私は小さな戦艦ゲームを作りたいと思っています。 OnMouseEnterイベントでセルを移動したいが何も起こらず、イベントが呼び出されない。Unity Battleships - GameObjectの色を変更する
コードを3つのスクリプト、データ、コントローラ、ビューに分けました。
マイデータは、情報を保持します:
public class CellCommonData : MonoBehaviour // Datastore
{
public bool IsShipCell { get; set; } // is a ship there?
public bool WasActivated { get; set; } // cell already clicked
[SerializeField]
private Color defaultColor; // default Color -> light blue
public Color DefaultColor { get { return defaultColor; } }
[SerializeField]
private Color mouseOverColor; // hover Color -> dark blue
public Color MouseOverColor { get { return defaultColor; } }
[SerializeField]
private Color hitColor; // hit Color -> green
public Color HitColor { get { return defaultColor; } }
[SerializeField]
private Color noHitColor; // no Hit -> red
public Color NoHitColor { get { return defaultColor; } }
private void Start()
{
WasActivated = false; // the cell is not clicked on Start
}
}
私のコントローラは、プレイヤーのアクション処理します:
public class CellCommonController : MonoBehaviour
{
private CellCommonData cellData;
private CellCommonView cellView;
private void Start()
{
cellData = GetComponent<CellCommonData>();
cellView = GetComponent<CellCommonView>();
}
private void OnMouseDown() // Cell clicked
{
if (!cellData.WasActivated) // Cell was not clicked before
{
if (cellData.IsShipCell) // ship hit?
{
cellView.SetCellColor(cellData.HitColor);
}
else // No ship there
{
cellView.SetCellColor(cellData.NoHitColor);
}
cellData.WasActivated = true; // Cell got clicked
}
}
}
とビューは、セルの "見える" 扱い:
public class CellCommonView : MonoBehaviour
{
private CellCommonData cellData;
private Renderer cellRenderer;
private void Start()
{
cellData = GetComponent<CellCommonData>();
cellRenderer = GetComponent<Renderer>();
SetCellColor(cellData.DefaultColor); // colorize the cell with the default Color
}
public void SetCellColor(Color color) // Change the cells color
{
cellRenderer.material.SetColor("_Color", color);
}
private void OnMouseEnter() // cell got hovered
{
if (!cellData.WasActivated) // not clicked
{
SetCellColor(cellData.MouseOverColor);
}
}
private void OnMouseExit() // leave the cell
{
if (!cellData.WasActivated) // not clicked
{
SetCellColor(cellData.DefaultColor);
}
}
}
私の唯一の問題は、イベントOnMouseEnter()
とOnMouseExit()
がne verが呼び出されました。しかし、私はそこに何が間違っている、取得しないでください。ここで
はそれの写真です:
あなたはあなたがそのメソッドを呼び出しているときに何かにマウスが乗っていない場合は、マウスの上にマウスを置いてください。 –
Debug.LogをOnMouseEnter()とOnMouseExit()の両方に入れてから、と呼ばれる。 – Programmer
モデルクラスをMonoBehaviourにする理由は何ですか?そして、あなたの問題は、このゲームオブジェクト上の3次元コライダーコンポーネントがない可能性が最も高いです。 –