我是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);
}
}
这导致玩家一直跟随鼠标而没有停止。
要达到想要的效果,您可以尝试以下步骤:
在您的场景中创建一个新的游戏对象,并向其添加一个 Circle Collider 2D 和一个 Line Renderer 组件。将 Circle Collider 2D 半径设置为所需的圆锥体大小,并根据您的喜好设置 Line Renderer 颜色和宽度。
在你的玩家脚本中,添加一个布尔变量来指示玩家是否按住屏幕。
在播放器脚本的更新方法中,使用 Input.GetMouseButton 检查播放器是否按住屏幕。如果玩家按住屏幕,则启用第 1 步中游戏对象的 Circle Collider 2D 和 Line Renderer 组件。
使用 Camera.main.ScreenToWorldPoint(Input.mousePosition) 获取鼠标光标在世界空间中的位置。设置圆的位置 如果这不起作用,请回复此消息,我们可以找出原因。
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");
}
}
这就是我想出的...