【发布时间】:2018-02-05 09:39:30
【问题描述】:
我正在尝试实例化一些平面以用作我的地形,并给它们OnMouseOver() 将它们更改为某种颜色,并给它们OnMouseExit() 将它们更改回原始颜色。
我将一个平面实例化脚本附加到主摄像机以生成平面预制件,并将鼠标事件脚本附加到平面prefab。我将它们全部实例化并将事件传递给它们,但在游戏中,鼠标事件被应用于长条平面、整个象限或不在鼠标光标位置的随机单个平面。
我制作了一种新材质并将其应用到该位置,然后将其变成预制件,以替换创建平面时设置的标准材质。
我已经开始尝试使用鼠标位置将颜色更改应用到具有Physics.CheckSphere 的当前鼠标位置的平面,但我不完全明白如何具体说明gameObject 在特定位置是什么.
public class TerrainGeneration : MonoBehaviour {
[SerializeField]
private Transform groundTile;
private Vector3 row;
private int max = 10;
// Use this for initialization
void Start () {
for ( int i = 0; i <= max; i++)
{
for (int x = 0; x <= max; x++) {
row = new Vector3(i, 0, x);
Instantiate(groundTile, row, Quaternion.identity);
}
}
}
}
public class MouseEvents : MonoBehaviour {
private Color isTargeted;
private Color notTargeted;
private MeshRenderer groundTileMeshRenderer;
private Vector3 mousePosition;
private float mouseX;
private float mouseY;
void Start () {
groundTileMeshRenderer = gameObject.GetComponent<MeshRenderer>();
isTargeted = Color.cyan;
notTargeted = groundTileMeshRenderer.material.color;
}
void Update()
{
mouseX = Mathf.RoundToInt(Input.GetAxis("Mouse X"));
mouseY = Mathf.RoundToInt(Input.GetAxis("Mouse Y"));
mousePosition = new Vector3(mouseX, 0, mouseY);
if (Physics.CheckSphere(mousePosition, 1))
{
**//Get the specific gameObject located at the current mouse position
//Set the gameObject as the target for the color change**
}
}
void OnMouseOver()
{
groundTileMeshRenderer.material.color = isTargeted;
}
void OnMouseExit()
{
groundTileMeshRenderer.material.color = notTargeted;
}
}
【问题讨论】: