c# - 如何在 Unity2D 中使用脚本停止动画?
问题描述
我正在用 unity2d 制作游戏,大部分机制都已实现。剩下的只是死后弹出的菜单。我已经创建了菜单,我只需要让它在死亡时出现
我需要与敌人角色动画、背景和敌人运动的碰撞。我不知道该怎么做。
我希望所有动画停止,游戏暂停,并出现带有两个按钮的菜单:重新启动和退出游戏。
播放器脚本:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
public class HeroJumpScript : MonoBehaviour
{
//Player Script
private Animator anim;
private bool isGrounded = false;
private bool isDeath = false;
public Transform groundCheck;
public Transform EnemyCheck;
private float groundRadius = 1.0f;
private float enemyRadius = 4.0f;
public LayerMask WhatIsGround;
public Text ScoreText;
public float score = 0f;
public float verticalImpuls;
Rigidbody2D rb;
public bool IsRuning { get; set; }
void Start()
{
anim = GetComponent<Animator>();
rb = GetComponent<Rigidbody2D>();
}
private void FixedUpdate()
{
isGrounded = Physics2D.OverlapCircle(groundCheck.position, groundRadius, WhatIsGround);
isDeath = Physics2D.OverlapCircle(EnemyCheck.position, enemyRadius, WhatIsGround);
anim.SetBool("Ground", isGrounded);
anim.SetBool("Enemy", isDeath);
anim.SetFloat("vSpeed", rb.velocity.y);
if (!isGrounded)
return;
if (Input.GetKeyDown(KeyCode.Space))
{
rb.AddForce(new Vector2(0, verticalImpuls), ForceMode2D.Impulse);
}
}
private void OnCrash()
{
}
//reading score
public void OnTriggerEnter2D(Collider2D other)
{
if (other.gameObject.tag == "Enemy")
{
score++;
}
}
//jump
void Update()
{
if (isGrounded && Input.GetKeyDown(KeyCode.Space))
{
anim.SetBool("Ground", false);
rb.AddForce(new Vector2(0, 30));
}
ScoreText.text = "Score: " + score;
}
//implementation of the collision with the enemy and the ground conditional death
private void OnCollisionEnter2D(Collision2D collision)
{
if (collision.gameObject.tag == "Ground")
{
}
if (collision.gameObject.tag == "Enemy")
{
}
}
private void OnCollisionExit2D(Collision2D collis)
{
if (collis.gameObject.tag == "Ground")
{
}
}
}
敌人移动脚本:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class EnemyMove : MonoBehaviour
{
Rigidbody2D rb;
float speed = 4f;
void Start ()
{
rb = GetComponent<Rigidbody2D>();
}
void Update ()
{
Vector2 vel = rb.velocity;
vel.x = -1 * speed;
rb.velocity = vel;
}
}
Ps全文是用谷歌翻译器翻译的
解决方案
所以你想在这里看看这个方法:
private void OnCollisionEnter2D(Collision2D collision) {
if (collision.gameObject.tag == "Ground") {
}
if (collision.gameObject.tag == "Enemy") {
}
}
在第二个 if 语句中,您正在检查是否与敌人发生碰撞。假设您希望玩家在接触敌人时死亡,您可以在这里对死亡功能进行编程。
推荐阅读
- r - ggplot不同的条形组之间的距离
- excel - 将一个 Excel 工作表中的命名范围复制到另一个工作表中的命名范围
- nginx - 从下游代理解析用户 IP
- java - 标准库是 Java 加载/读取和编辑/修改和保存不重新格式化的 html 文件的最佳选择吗?
- sql - 如何优化具有笛卡尔积和子查询的查询?
- json - Moshi 错误:@JsonClass 不能应用于 [class]。不得密封
- android - 我是否为应用程序使用了错误的 adb 权限而不会在后台被杀死?
- asp.net-mvc - ASP.NET Core:根据应用程序 API 版本从 REST API 响应中隐藏 DTO 属性
- azure - 在 Azure Devops 中调用 ARM 模板时出现 Bash 错误
- c++ - 是否可以对结构进行分组以与 std::variant 一起使用