我有3 Game Objects
。这3个游戏对象是我的正确,向上和向左按钮。
但是我不知道控制并检查哪些人点击了对播放器的行动!
注意:我可以通过为每个游戏对象创建特殊的C#来实现此目的 通过使用OnMouseDown方法,但我想在一个脚本文件中执行此操作 附加到玩家。
这是我的控制播放器Game Objects
之一
答案 0 :(得分:1)
注意:我可以通过为每个游戏对象创建特殊的C#来实现此目的 通过使用OnmouseDown方法,但我想在一个脚本文件中执行此操作 附加到玩家。
这根本不是问题。您可以让两个脚本相互通信。
方法1 :
当其他脚本发出点击操作时,请通知PlayerController
脚本。
附加到每个GameObject以检测点击。它将点击的GameObject发送到您的PlayerController
脚本。
public class ClickDetector: MonoBehaviour
{
PlayerController playerController;
void Start()
{
playerController = GameObject.Find("GameObjectPlayerControlIsAttachedTo").GetComponent<PlayerController>();
}
void OnMouseDown()
{
//Notify our PlayerController script that there was a click
playerController.OnGameObjectClicked(this.gameObject);
}
}
将此添加到您的PlayerController
脚本中。它接收被点击的GameObject。您可以与GameObject name
或tag
进行比较。我建议你选择tag
。
public class PlayerController: MonoBehaviour
{
public void OnGameObjectClicked(GameObject objClicked)
{
Debug.Log("There was a click from: "+objClicked.name);
if (objClicked.CompareTag("right"))
{
//Your code
}
else if (objClicked.CompareTag("left"))
{
//Your code
}
else if (objClicked.CompareTag("up"))
{
//Your code
}
}
}
方法2 :
在一个脚本(PlayerController
)中执行所有操作。
您可以使用raycast
。我建议你使用tag
来比较点击哪个游戏对象。从编辑器创建3个标签(right
,left
和up
),并将每个GameObject放到右侧tag
。如果您不想使用代码,则可以将if (rayCastHit.collider.CompareTag("up"))
替换为if (rayCastHit.collider.name=="up")
。
void Update()
{
//Check if Mouse Button is pressed
if (Input.GetMouseButtonDown(0))
{
//Raycast from mouse cursor pos
RaycastHit rayCastHit;
Ray rayCast = Camera.main.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(rayCast, out rayCastHit))
{
if (rayCastHit.collider.CompareTag("right"))
{
//Your code
}
else if (rayCastHit.collider.CompareTag("left"))
{
//Your code
}
else if (rayCastHit.collider.CompareTag("up"))
{
//Your code
}
}
}
}
编辑:
更新问题后,需要在游戏对象上附加一个碰撞器才能使用光线投射。将 Box Collider 2D 附加到3个GameObjects中的每一个。
此外,由于这是一个2D精灵,方法2 的代码会稍微改变一下:
if (Input.GetMouseButtonDown(0))
{
Vector2 ray = Camera.main.ScreenToWorldPoint(Input.mousePosition);
RaycastHit2D rayHit = Physics2D.Raycast(ray, Vector2.zero);
if (rayHit)
{
if (rayHit.collider.CompareTag("up"))
{
}
}
}
最后,从你正在做的事情来看,你看起来需要一个Virtual JoyStick并且你当前做错了。当前的解决方案应该适合您,但正确的方法是使用UI系统(Image
组件)。