Arrays 如何使用光线投射,在输入允许在车道内转弯和与墙碰撞时自动转弯的情况下,获得像吃豆人一样的持续运动?

Arrays 如何使用光线投射,在输入允许在车道内转弯和与墙碰撞时自动转弯的情况下,获得像吃豆人一样的持续运动?,arrays,unity3d,pacman,Arrays,Unity3d,Pacman,我有一个基于网格的级别,每个网格大小的1x1单元(默认)。我如何让我的游戏对象在特定方向加速(吃豆人)的车道上移动,直到输入改变其“方向”,或者如果它与死角墙相撞并转向其“右侧”?移动需要与瓷砖的中间对齐。下面给出了玩家对象的级别示例。绿色对象是玩家,红色圆柱体是目标,图片中的场景是没有按下输入按钮,因此允许玩家对象自动左转 @Savlon。 是的。目前,我只能在按下一个键时移动,然后检查该方向的瓷砖是否可以行走。如果是的话,就采取行动。这只会在我按下钥匙的时候发生。下面是相同的代码 publi

我有一个基于网格的级别,每个网格大小的1x1单元(默认)。我如何让我的游戏对象在特定方向加速(吃豆人)的车道上移动,直到输入改变其“方向”,或者如果它与死角墙相撞并转向其“右侧”?移动需要与瓷砖的中间对齐。下面给出了玩家对象的级别示例。绿色对象是玩家,红色圆柱体是目标,图片中的场景是没有按下输入按钮,因此允许玩家对象自动左转

@Savlon。 是的。目前,我只能在按下一个键时移动,然后检查该方向的瓷砖是否可以行走。如果是的话,就采取行动。这只会在我按下钥匙的时候发生。下面是相同的代码

public GameObject levelCreator_;
levelCreator temp;
Vector3 playerPos;

int[,] mapArray = new int[13,17];
public bool inhibitPlayerInput;

void Start () {
    DOTween.Init(true, true, LogBehaviour.Verbose).SetCapacity(6000, 6000);

    levelCreator_ = GameObject.Find ("LevelCreatorGameObject");
    temp = levelCreator_.gameObject.GetComponent<levelCreator>();
    mapArray = temp.mapArray;
    for(int i = 1; i<12; i++)
    {
        for(int ii = 1; ii < 16; ii++)
        {
            if( mapArray[i,ii] == 2)     // tile with value 2 is the starting position of the player
            {
                playerPos = new Vector3(i,ii,0);
            }
        }
    }

    transform.position = new Vector3(playerPos.x,playerPos.y,0);
}

void Update () {
    if (inhibitPlayerInput) return;
    getInput();
}

void getInput()
{
    bool inputPressed = false;
    Vector3 newPlayerPos = playerPos;

    if(Input.GetKey(KeyCode.W))
    {
        inputPressed = true;
        newPlayerPos += new Vector3(-1,0,0);
    } 
    else if (Input.GetKey(KeyCode.S))
    {
        inputPressed = true;
        newPlayerPos += new Vector3(1,0,0);
    } 
    else if(Input.GetKey(KeyCode.A))
    {
        inputPressed = true;
        newPlayerPos += new Vector3(0,-1,0);
    }
    else if(Input.GetKey(KeyCode.D))
    {
        inputPressed = true;
        newPlayerPos += new Vector3(0,1,0);
    } 

    if (!inputPressed) return;

    if (mapArray[(int)newPlayerPos.x,(int)newPlayerPos.y] == 1)      // Unwalkable tile check
    {
        return;
    }
    playerPos = newPlayerPos;

    if(mapArray[(int)playerPos.x,(int)playerPos.y] == 0 || mapArray[(int)playerPos.x,(int)playerPos.y] >= 2)
    {
        inhibitPlayerInput = true;
        transform.DOMove(playerPos, TweenWpDuration).OnComplete(() => inhibitPlayerInput = false).SetEase(Ease.Linear);
        return;
    }
}
publicgameobjectlevelcreator;
水平温度;
矢量3播放器;
int[,]mapArray=newint[13,17];
公共预算投入;
无效开始(){
Init(true,true,logbehavior.Verbose).SetCapacity(60006000);
levelCreator=游戏对象。查找(“LevelCreatorGameObject”);
temp=levelCreator_u2;.gameObject.GetComponent();
mapArray=temp.mapArray;
对于(int i=1;i=2)
{
PlayerInput=true;
transform.DOMove(playerPos,TweenWpDuration).OnComplete(()=>inhibitPlayerInput=false).SetEase(Ease.Linear);
返回;
}
}

您试过什么吗?我猜这并不是因为你问的是基本的问题,而且在谷歌上很容易找到参考资料。。。