C#不包含用于定义和没有扩展方法

问题描述:

我的代码:C#不包含用于定义和没有扩展方法

using UnityEngine; 
using System.Collections; 

[RequireComponent(typeof(Controller2D))] 
public class Player : MonoBehaviour 
{ 

    public float jumpHeight = 4; 
    public float timeToJumpApex = .4f; 
    float accelerationTimeAirborne = .2f; 
    float accelerationTimeGrounded = .1f; 
    float moveSpeed = 6; 

    float gravity; 
    float jumpVelocity; 
    Vector3 velocity; 
    float velocityXSmoothing; 

    Controller2D controller; 

    void Start() 
    { 
     controller = GetComponent<Controller2D>(); 

     gravity = -(2 * jumpHeight)/Mathf.Pow(timeToJumpApex, 2); 
     jumpVelocity = Mathf.Abs(gravity) * timeToJumpApex; 
     print("Gravity: " + gravity + " Jump Velocity: " + jumpVelocity); 
    } 

    void Update() 
    { 

     if (controller.collisions.above || controller.collisions.below) 
     { 
      velocity.y = 0; 
     } 

     Vector2 input = new Vector2(Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical")); 

     if (Input.GetKeyDown(KeyCode.Space) && controller.collisions.below) 
     { 
      velocity.y = jumpVelocity; 
     } 

     float targetVelocityX = input.x * moveSpeed; 
     velocity.x = Mathf.SmoothDamp(velocity.x, targetVelocityX, ref velocityXSmoothing, (controller.collisions.below) ? accelerationTimeGrounded : accelerationTimeAirborne); 
     velocity.y += gravity * Time.deltaTime; 
     controller.Move(velocity * Time.deltaTime); 
    } 
} 

Controller2D代码:使用UnityEngine

;使用System.Collections的 ;

[RequireComponent(typeof运算(BoxCollider2D))] 公共类Controller2D:MonoBehaviour {

public LayerMask collisionMask; 

const float skinWidth = .015f; 
public int horizontalRayCount = 4; 
public int verticalRayCount = 4; 

float horizontalRaySpacing; 
float verticalRaySpacing; 

new BoxCollider2D collider; 
RaycastOrigins raycastOrigins; 
internal object collisions; 

void Start() 
{ 
    collider = GetComponent<BoxCollider2D>(); 
    CalculateRaySpacing(); 
} 

public void Move(Vector3 velocity) 
{ 
    UpdateRaycastOrigins(); 
    if (velocity.x != 0) 
    { 
     HorizontalCollisions(ref velocity); 
    } 
    if (velocity.y != 0) 
    { 
     VerticalCollisions(ref velocity); 
    } 

    transform.Translate(velocity); 
} 

void HorizontalCollisions(ref Vector3 velocity) 
{ 
    float directionX = Mathf.Sign(velocity.x); 
    float rayLength = Mathf.Abs(velocity.x) + skinWidth; 

    for (int i = 0; i < horizontalRayCount; i++) 
    { 
     Vector2 rayOrigin = (directionX == -1) ? raycastOrigins.bottomLeft : raycastOrigins.bottomRight; 
     rayOrigin += Vector2.up * (horizontalRaySpacing * i); 
     RaycastHit2D hit = Physics2D.Raycast(rayOrigin, Vector2.right * directionX, rayLength, collisionMask); 

     Debug.DrawRay(rayOrigin, Vector2.right * directionX * rayLength, Color.red); 

     if (hit) 
     { 
      velocity.x = (hit.distance - skinWidth) * directionX; 
      rayLength = hit.distance; 
     } 
    } 
} 

void VerticalCollisions(ref Vector3 velocity) 
{ 
    float directionY = Mathf.Sign(velocity.y); 
    float rayLength = Mathf.Abs(velocity.y) + skinWidth; 

    for (int i = 0; i < verticalRayCount; i++) 
    { 
     Vector2 rayOrigin = (directionY == -1) ? raycastOrigins.bottomLeft : raycastOrigins.topLeft; 
     rayOrigin += Vector2.right * (verticalRaySpacing * i + velocity.x); 
     RaycastHit2D hit = Physics2D.Raycast(rayOrigin, Vector2.up * directionY, rayLength, collisionMask); 

     Debug.DrawRay(rayOrigin, Vector2.up * directionY * rayLength, Color.red); 

     if (hit) 
     { 
      velocity.y = (hit.distance - skinWidth) * directionY; 
      rayLength = hit.distance; 
     } 
    } 
} 

void UpdateRaycastOrigins() 
{ 
    Bounds bounds = collider.bounds; 
    bounds.Expand(skinWidth * -2); 

    raycastOrigins.bottomLeft = new Vector2(bounds.min.x, bounds.min.y); 
    raycastOrigins.bottomRight = new Vector2(bounds.max.x, bounds.min.y); 
    raycastOrigins.topLeft = new Vector2(bounds.min.x, bounds.max.y); 
    raycastOrigins.topRight = new Vector2(bounds.max.x, bounds.max.y); 
} 

void CalculateRaySpacing() 
{ 
    Bounds bounds = collider.bounds; 
    bounds.Expand(skinWidth * -2); 

    horizontalRayCount = Mathf.Clamp(horizontalRayCount, 2, int.MaxValue); 
    verticalRayCount = Mathf.Clamp(verticalRayCount, 2, int.MaxValue); 

    horizontalRaySpacing = bounds.size.y/(horizontalRayCount - 1); 
    verticalRaySpacing = bounds.size.x/(verticalRayCount - 1); 
} 

struct RaycastOrigins 
{ 
    public Vector2 topLeft, topRight; 
    public Vector2 bottomLeft, bottomRight; 
} 

}

当我将鼠标悬停在 “上方” 和 “下方” 它给我错误

c#不包含定义,也没有扩展方法,

任何人都可以看到我做错了什么?

在此先感谢!

+1

它在哪里显示错误。你没有说明它没有给出定义。 – Nkosi

+0

它显示所有出现的“上面”和“下面”的错误 –

+0

那么这个消息通常是当方法不存在于该类中,并且没有引用该类的引用扩展方法。检查以确保'controller'实际上具有'collisions'属性,并且哪个类型的碰撞具有属性名称'above'或'below' – Nkosi

internal object collisions; 

在这里您将碰撞定义为对象。这意味着它没有上面或下面的布尔属性。
也许您需要定义一个名为collisions的新结构或类,并在上面和下面定义内部或公共布尔属性。