我在下面有这个代码可以控制3名玩家中受影响的玩家。我能够通过类似的欺骗行为来实现它。通过在2D精灵后面添加一个3D立方体,因为我的游戏应该是2D,我很难在2D中实现它。我真的很困惑如何在2D中这样做,因为我真的对这些参数感到困惑。
虽然我已经按照上面提到的方式实现了它,但我仍然希望在纯2D中实现它。因为当选定的玩家移动时我遇到这个问题,精灵移动得更快。
public GameObject target = null;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update ()
{
if(Input.touchCount > 0 || Input.GetTouch(0).phase == TouchPhase.Began)
{
Ray ray = Camera.main.ScreenPointToRay(Input.GetTouch(0).position);
Debug.DrawRay(ray.origin,ray.direction * 20,Color.red);
RaycastHit hit;
if(Physics.Raycast(ray, out hit,Mathf.Infinity))
{
Debug.Log(hit.transform.gameObject.name);
if(this.target != null){
SelectMove sm = this.target.GetComponent<SelectMove>();
if(sm != null){ sm.enabled = false; }
}
target = hit.transform.gameObject;
//Destroy(hit.transform.gameObject);
selectedPlayer();
}
}
}
void selectedPlayer(){
SelectMove sm = this.target.GetComponent<SelectMove>();
if(sm == null){
target.AddComponent<SelectMove>();
}
sm.enabled = true;
}
答案 0 :(得分:0)
使用RaycastHit2D
代替RaycastHit
执行此操作,然后将Physics.Raycast
更改为Physics2D.Raycast
。参数不同,下面的代码应该这样做。您可能还需要根据您的游戏逻辑将&&
更改为||
。
选择精灵,然后在编辑器中添加 Box Colider 2D 。如果你的精灵是圆的,你也可以使用圆形碰撞器2D 作为精灵。如果你没有将任何2D对撞机添加到Sprite,那么当点击时,ray不会检测到该对象。
FOR MOBILE DEVICES
if ((Input.touchCount > 0) && (Input.GetTouch(0).phase == TouchPhase.Began))
{
Vector2 cubeRay = Camera.main.ScreenToWorldPoint(Input.GetTouch(0).position);
RaycastHit2D cubeHit = Physics2D.Raycast(cubeRay, Vector2.zero);
if (cubeHit)
{
//We hit something
Debug.Log(cubeHit.transform.gameObject.name);
if (this.target != null)
{
SelectMove sm = this.target.GetComponent<SelectMove>();
if (sm != null) { sm.enabled = false; }
}
target = cubeHit.transform.gameObject;
//Destroy(cubeHit.transform.gameObject);
selectedPlayer();
}
}
FOR DESKTOPS / EDITOR
if (Input.GetMouseButtonDown(0))
{
Vector2 cubeRay = Camera.main.ScreenToWorldPoint(Input.mousePosition);
RaycastHit2D cubeHit = Physics2D.Raycast(cubeRay, Vector2.zero);
if (cubeHit)
{
//We hit something
Debug.Log(cubeHit.transform.gameObject.name);
if (this.target != null)
{
SelectMove sm = this.target.GetComponent<SelectMove>();
if (sm != null) { sm.enabled = false; }
}
target = cubeHit.transform.gameObject;
//Destroy(cubeHit.transform.gameObject);
selectedPlayer();
}
}