Unity2D - 侧滚动条:将玩家传送到预定义的“圆锥体”(Katan Zero 风格)内的固定距离?

问题描述 投票:0回答:2

我是Unity的新手(刚上手还不到一周)。 对于我的第一个项目,我决定为手机创建一个小游戏。这是一种让引擎变暖并最终做更大事情的方法。 无论如何,我正在尝试执行以下操作(并且我会尽力解释得尽可能好):

游戏将是一个无限的赛跑者。这是一个二维侧卷轴。如果玩家触摸并按住屏幕,游戏将以慢动作运行一小段时间。到目前为止,这是有效的。

现在我想添加一个在按住按钮/屏幕时出现的圆锥体或圆圈。这个圆锥表示行进距离。玩家可以上下移动他的手指来确定角色将被传送到的确切位置(用一条线表示)。如果玩家抬起手指/按钮,角色应该被传送到直线和圆圈相互交叉的地方,并且他路径上的每个敌人都会受到伤害/死亡。玩家是否被传送或高速冲刺都没关系。

这里是武士刀零的 YouTube 视频,这大约是我想要实现的(00:21 分钟): https://www.youtube.com/watch?v=33L04ZSzYvY

我试过施加力之类的东西,但玩家只是以弧线而不是直线跳跃。我也无法设置最大旅行距离。

也许我还应该注意到,玩家的移动速度会随着时间的推移而增加。

如果有人有很好的资源那么学习 Unity 我很乐意将所有的智慧都浸入哈哈。到目前为止,我只是修改我在网上找到的脚本并将它们混合在一起。因此,这真的很难做到。

这是我的脚本,其中还包括慢动作触发器。到目前为止,我显然一直在用键盘按钮对此进行测试,在本例中为跳转/空格。

public TimeManager timeManager;

[SerializeField] private float force = 5f; //Force that is implied to move the character forward

void Update()
{
    if (Input.GetButtonDown("Jump"))
    {
        timeManager.DoSlowmotion();
        Rigidbody2D rb = GetComponent<Rigidbody2D>();

        // Gets the position of the mouse cursor in world space
        Vector3 direction = Camera.main.ScreenToWorldPoint(Input.mousePosition);

        rb.AddForce(direction * force, ForceMode2D.Impulse);
    }

}

}

我也试过这个:

公共类鼠标:MonoBehaviour { 公共游戏对象 MousePosGameObject;

void Update()
{
    Vector3 mousePos = Input.mousePosition;
    mousePos.z = MousePosGameObject.transform.position.z - Camera.main.transform.position.z ;

    MousePosGameObject.transform.position = Camera.main.ScreenToWorldPoint(mousePos);
}

}

这导致玩家一直跟随鼠标而没有停止。

c# 2d dashing teleport
2个回答
0
投票

要达到想要的效果,您可以尝试以下步骤:

在您的场景中创建一个新的游戏对象,并向其添加一个 Circle Collider 2D 和一个 Line Renderer 组件。将 Circle Collider 2D 半径设置为所需的圆锥体大小,并根据您的喜好设置 Line Renderer 颜色和宽度。

在你的玩家脚本中,添加一个布尔变量来指示玩家是否按住屏幕。

在播放器脚本的更新方法中,使用 Input.GetMouseButton 检查播放器是否按住屏幕。如果玩家按住屏幕,则启用第 1 步中游戏对象的 Circle Collider 2D 和 Line Renderer 组件。

使用 Camera.main.ScreenToWorldPoint(Input.mousePosition) 获取鼠标光标在世界空间中的位置。设置圆的位置 如果这不起作用,请回复此消息,我们可以找出原因。


0
投票
public TimeManager timeManager;
public bool holdingScreen = false;

void Update()
{
    if (Input.GetMouseButton(0))
    {
        holdingScreen = true;
        timeManager.DoSlowmotion();
    }
    else
    {
        holdingScreen = false;
    }    

    if (holdingScreen == true)
    {
        Debug.Log("holdingScreen = true");

    }

}

这就是我想出的...

© www.soinside.com 2019 - 2024. All rights reserved.