コード例 #1
0
    public void move(MOVEDIRECTION direction)
    {
        moving = true;
        RaycastHit2D hit;
        LayerMask    wallLayer = LayerMask.GetMask("Wall");

        switch (direction)
        {
        case MOVEDIRECTION.top:
            hit = Physics2D.Raycast(transform.position, Vector2.up, Mathf.Infinity, wallLayer);
            if (hit.collider != null)
            {
                Debug.Log(hit.collider.gameObject.transform.position);
                float distance      = hit.collider.gameObject.transform.position.y - transform.position.y;
                float jumpDisctance = (distance / 0.5f);
                naechstePos = new Vector3(transform.position.x, transform.position.y + (int)jumpDisctance * 0.5f, 0);
            }
            break;

        case MOVEDIRECTION.down:
            hit = Physics2D.Raycast(transform.position, -Vector2.up, Mathf.Infinity, wallLayer);
            if (hit.collider != null)
            {
                Debug.Log(hit.collider.gameObject.transform.position);
                float distance      = hit.collider.gameObject.transform.position.y - transform.position.y;
                float jumpDisctance = (distance / 0.5f);
                naechstePos = new Vector3(transform.position.x, transform.position.y + (int)jumpDisctance * 0.5f, 0);
            }
            break;

        case MOVEDIRECTION.left:
            hit = Physics2D.Raycast(transform.position, -Vector2.right, Mathf.Infinity, wallLayer);
            if (hit.collider != null)
            {
                Debug.Log(hit.collider.gameObject.transform.position);
                float distance      = hit.collider.gameObject.transform.position.x - transform.position.x;
                float jumpDisctance = (distance / 0.5f);
                naechstePos = new Vector3(transform.position.x + (int)jumpDisctance * 0.5f, transform.position.y, 0);
            }
            break;

        case MOVEDIRECTION.right:
            hit = Physics2D.Raycast(transform.position, Vector2.right, Mathf.Infinity, wallLayer);
            if (hit.collider != null)
            {
                Debug.Log(hit.collider.gameObject.transform.position);
                float distance      = hit.collider.gameObject.transform.position.x - transform.position.x;
                float jumpDisctance = (distance / 0.5f);
                naechstePos = new Vector3(transform.position.x + (int)jumpDisctance * 0.5f, transform.position.y, 0);
            }
            break;
        }
    }
コード例 #2
0
	//玩家移动
	public void PlayerMove (MOVEDIRECTION dir)
	{

		if (MoveStaminaCheck ()) {
			switch (dir) {
			case MOVEDIRECTION.LEFT:
				transform.Translate (Vector2.left * moveDistance);
				break;
			case MOVEDIRECTION.RIGHT:
				transform.Translate (Vector2.right * moveDistance);
				break;
			case MOVEDIRECTION.UP:
				transform.Translate (Vector2.up * moveDistance);
				break;
			case MOVEDIRECTION.DOWN:
				transform.Translate (Vector2.down * moveDistance);
				break;
			}
			
			stepCounter++;

			//通知UI更新
			uiInput.SendMessage ("UpdateUIInfo");

			//队长移动一次,减少一个体能;成员移动三次,减少一个体能
			gData.characterList [0].Stamina = Mathf.Max (0, gData.characterList [0].Stamina - 1);
			
			if (stepCounter == 3) {
				for (int i=1; i<gData.characterList.Count; i++) {
					gData.characterList [i].Stamina = Mathf.Max (0, gData.characterList [i].Stamina - 1);
				}
				stepCounter = 0;
			}
		} else {
			Debug.Log (StringCollection.LEADERNOSTAMINA);
		}
	}