在这里填写新手。使用Unity C#。我正在将PONG游戏从键盘控制移动到触摸屏。这是我的工作键盘代码:
// Player 1 =>用W / S键控制左蝙蝠
公共GameObject leftBat;
//使用它进行初始化 无效的开始(){
}
//每帧调用一次更新 void Update(){
//Defualt speed of the bat to zero on every frame
leftBat.GetComponent<Rigidbody>().velocity = new Vector3(0f, 0f, 0f);
//If the player is pressing the W key...
if (Input.GetKey (KeyCode.W)) {
//Set the velocity to go up 1
leftBat.GetComponent<Rigidbody>().velocity = new Vector3(0f, 8f, 0f);
}
//If the player is pressing the S key...
else if (Input.GetKey (KeyCode.S)) {
//Set the velocity to go down 1 (up -1)
leftBat.GetComponent<Rigidbody>().velocity = new Vector3(0f, -8f, 0f);
}
}
我找到了这段代码并一直在使用它,但是现在仍然可用。
使用UnityEngine; 使用System.Collections;
公共类Player_Input_Controller:MonoBehaviour {
public GameObject leftBat;
public float paddleSpeed = 1f;
public float yU;
public float yD;
private Ray ray;
private RaycastHit rayCastHit;
private Vector3 playerPos = new Vector3(0, -9.5f, 0);
// Update is called once per frame
void Update () {
if (Input.GetMouseButton (0))
{
ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if(Physics.Raycast(ray, out rayCastHit)){
Vector3 position = rayCastHit.point;
float yPos = position.y;
playerPos = new Vector3(Mathf.Clamp(yPos, yU, yD), -9.5f, 0f);
transform.position = playerPos;
}
}
}
}
任何人都有我可以使用的触摸屏Pong脚本,或者知道如何编辑该脚本?
再次,我真的很新,很抱歉,如果我看上去像班上的假人。
感谢您提供的任何帮助。对此,我真的非常感激。这是完成我的游戏的最后一个障碍。
答案 0 :(得分:1)
我认为,您不需要进行任何射线广播。因为您使用的是2D模式,所以只关心Input.mousePosition
的y值。因此,您可以使用相机的z值计算屏幕范围。如果您的相机位于(0, 0, -10)
,则可以说您在游戏中的范围在世界坐标中为-5 - BatOffset
至5+BatOffset
。因此,您需要某种方法来将Screen.height
映射到您从图像中可以看到的世界坐标范围。
最后,您需要找到Input.mousePosition.y
将其除以Screen.height
。这将为您提供触摸或单击位置的比率。然后找到在世界空间中的位置。
请注意:您也可以使用Input.touchPosition.y
。以下脚本将为您执行此操作:
public GameObject cam;
private Vector3 batPos;
private float minY;
private float maxY;
private int Res;
private float deltaY;
void Start () {
minY = cam.transform.position.z / 2 - gameObject.transform.localScale.y;
maxY = (-cam.transform.position.z / 2) + gameObject.transform.localScale.y;
deltaY = maxY - minY;
Debug.Log(minY + " " + maxY + " " + deltaY);
Res = Screen.height;
batPos = gameObject.transform.position;
}
void Update () {
if(Input.GetMouseButtonDown(0))
{
// we find the height we have to go up from minY
batPos.y =minY + Input.mousePosition.y / Res * deltaY;
gameObject.transform.position = batPos;
}
}
当您用鼠标单击屏幕时,这在编辑器中对我有用。您只需要将部分Input.GetMouseButtonDown
更改为Touch
之类的命令Touch.tapCount > 0
。此脚本也应附加到蝙蝠上。祝你好运!
还,您可以使用正交摄影机和正交摄影机尺寸来代替cam.transformation.z