Я дважды создал экземпляр префаба paddle
, затем попытался закрепить его на оси y, используя Mathf.Clamp
.
Однако значения min и max в итоге применяются к обоим экземплярам paddle
и, следовательно, они могут двигаться по оси x
хорошо, поэтому я пытаюсь создать 2-мерную мобильную игру в понг, у меня есть префаб paddle
, представляющий собой ракетки / летучих мышей, с которыми сталкиваются шары.
Я создал один и тот же префаб дважды по одному на каждой стороне экрана:
Paddle paddle1 = Instantiate(Paddle) as Paddle;
Paddle paddle2 = Instantiate(Paddle) as Paddle;
paddle2.Init(true); //right paddle
paddle1.Init(false); //left paddle
Теперь я хочу, чтобы каждый из лопастей мог двигаться только по оси Y (ВВЕРХ И ВНИЗ).
Поэтому я попытался зажать их с помощью:
var poss = transform.position;
poss.x = Mathf.Clamp(transform.position.x, -1.0f, 1.0f);
transform.position = poss;
Однако это привело к тому, что левая лопасть все еще могла двигаться вправо, а правая - слева. (Я не хочу, чтобы они вообще двигались по оси).
это файл Gamemanager.cs:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GameManager: MonoBehaviour
{
public Ball Ball;
public Paddle Paddle;
public static Vector2 topRight;
public static Vector2 bottomLeft;
// Start is called before the first frame update
void Start()
{
bottomLeft = Camera.main.ScreenToWorldPoint(new Vector2 (0,0));
topRight = Camera.main.ScreenToWorldPoint(new Vector2(Screen.width,Screen.height));
Instantiate(Ball);
//Paddle paddle1 = Instantiate(Paddle) as Paddle;
Paddle paddle1 = Instantiate(Paddle) as Paddle;
Paddle paddle2 = Instantiate(Paddle) as Paddle;
paddle2.Init(true); //right paddle
paddle1.Init(false); //left paddle
}
void Update()
{
}
}
Это файл paddle.cs:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Paddle : MonoBehaviour
{
Rigidbody2D rb;
float directionY;
float speed;
float height;
float distance;
string input;
bool isRight;
// Start is called before the first frame update
void Start()
{
height = transform.localScale.y;
speed=5f;
}
public void Init(bool isRightPaddle)
{
isRight = isRightPaddle;
Vector2 pos = Vector2.zero;
if(isRightPaddle)
{
//Place paddle on the right of the screen
pos = new Vector2(GameManager.topRight.x, 0);
pos -= Vector2.right * transform.localScale.x; //Move a bit to the left
}
else
{
//Place paddle on the left of the screen
pos = new Vector2(GameManager.bottomLeft.x, 0);
pos += Vector2.right * transform.localScale.x; //Move a bit to the right
}
//Update this paddle's position
transform.position = pos;
}
void Update()
{
var poss = transform.position;
poss.x = Mathf.Clamp(transform.position.x, -8.0f, 8.0f);
transform.position = poss;
}
}
Я ожидаю, что каждое весло не сможет двигатьсяпо оси х. Только по оси Y