[英]Why does unity gives me error about IEnumerator
您好,我对此有疑问,它是一个包含破折号的移动脚本,当我运行游戏时,我收到此错误错误 CS0138:“使用命名空间”指令只能应用于命名空间; 'IEnumerator' 是一种类型而不是命名空间。 考虑一个“使用静态”指令,而不是我不知道为什么,如果有人可以帮忙的话。
using System.Collections.Generic;
using UnityEngine;
using System.Collections.IEnumerator;
using static UnityEngine.Random;
public class Character2DController : MonoBehaviour
{
public float MovementSpeed = 6;
public float JumpForce = 8;
public Animator animator;
[SerializeField] Rigidbody2D _rigidbody;
//dash
public float dashDistance = 15f;
bool isDashing;
float doubleTapTime;
KeyCode lastKeyCode;
private void Start()
{
_rigidbody = GetComponent<Rigidbody2D>();
}
private void Update()
{
var movement = Input.GetAxis ("Horizontal");
transform.position += new Vector3(movement,0,0) * Time.deltaTime * MovementSpeed;
animator.SetFloat("Speed", Mathf.Abs(movement));
if (!Mathf.Approximately(0, movement)){
transform.rotation = movement > 0 ? Quaternion.Euler(0, 180, 0) : Quaternion.identity;
}
if (Input.GetButtonDown("Jump") && Mathf.Abs(_rigidbody.velocity.y) < 0.011)
{
_rigidbody.AddForce(new Vector2(0, JumpForce), ForceMode2D.Impulse);
}
if (Mathf.Abs(_rigidbody.velocity.y) > 0.000000001)
{
animator.SetFloat("jump", 2);
}
else if (_rigidbody.velocity.y < 0.011){
animator.SetFloat("jump", 1);}
//dashing left
if (Input.GetKeyDown(KeyCode.A)){
if(doubleTapTime > Time.time && lastKeyCode == KeyCode.A){
StartCoroutine(Dash(-1f));
} else { doubleTapTime = Time.time + 0.5f;
}
lastKeyCode = KeyCode.A;
}
//dashing right
if (Input.GetKeyDown(KeyCode.D)){
if(doubleTapTime > Time.time && lastKeyCode == KeyCode.D){
StartCoroutine(Dash(1f));
} else { doubleTapTime = Time.time + 0.5f;
}
lastKeyCode = KeyCode.D;
}
void FixedUpdate(){
if(!isDashing) {
_rigidbody.velocity = new Vector2(movement * MovementSpeed, _rigidbody.velocity.y);
}
}
iEnumerator Dash (float direction){
isDashing = true;
_rigidbody.velocity = new Vector2(_rigidbody.velocity.x, 0f);
_rigidbody.AddForce(new Vector2(dashDistance * direction, 0f), ForceMode2D.Impulse);
float gravity = _rigidbody.gravityScale;
_rigidbody.gravityScale = 0;
yield return new WaitForSeconds(0.4f);
isDashing = false;
_rigidbody.gravityScale = gravity;
}
}
}
问题是 IEnumerator 是一种类型,例如 List 是你不写的类型。
using System.Collections.Generic.List;
你也不会写
using System.Collections.List;
你会改为写
using System.Collections.Generic;
然后,您可以在代码中使用列表类型,而无需写出整个内容。 IEnumerator 在“使用 System.Collections;” 命名空间。 因此,您可以将其添加到顶部,然后像使用 List 类型一样使用 IEnumerator。
此外,当您将命名空间更改为。
using System.Collections;
我还要注意你有一个错字,它写成 iEnumerator 应该是 IEnumerator。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.