Я следил за учебным пособием по 2D-контроллеру проигрывателя в Unity (это видео «Живое обучение, 16 декабря 2013 г. — 2D-контроллеры персонажей»).
Я смог успешно реализовать все, что показано в руководстве, с некоторыми правками, чтобы это работало в Unity 5. После этого я решил поиграть с этим, чтобы лучше понять. Одна вещь, которую я пытался сделать, это изменить высоту прыжка при нажатии клавиши пробела. Вот код:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class RobotControllerScript : MonoBehaviour {
public float maxSpeed = 10f;
bool facingRight = true;
Animator anim;
bool grounded = false;
public Transform groundCheck;
float groundRadius = 0.2f;
public LayerMask whatIsGround;
public float jumpForce = 700f;
// Use this for initialization
void Start () {
anim = GetComponent<Animator>();
}
// Update is called once per frame
void FixedUpdate () {
grounded = Physics2D.OverlapCircle(groundCheck.position, groundRadius, whatIsGround);
anim.SetBool("Ground", grounded);
//vSpeed = vertical speed
anim.SetFloat("vSpeed", GetComponent<Rigidbody2D>().velocity.y);
float move = Input.GetAxis("Horizontal");
anim.SetFloat("Speed", Mathf.Abs(move));
GetComponent<Rigidbody2D>().velocity = new Vector2(move * maxSpeed,
GetComponent<Rigidbody2D>().velocity.y);
if (move > 0 && !facingRight)
{
Flip();
}
else if (move < 0 && facingRight)
{
Flip();
}
}
void Update()
{
if(grounded && Input.GetKeyDown(KeyCode.Space))
{
anim.SetBool("Ground", false);
GetComponent<Rigidbody2D>().AddForce(new Vector2(0, jumpForce));
}
}
void Flip()
{
facingRight = !facingRight;
Vector3 theScale = transform.localScale;
theScale.x *= -1;
transform.localScale = theScale;
}
}
Глядя на код и пояснения к учебнику, jumpForce — это переменная, которая контролирует, насколько высоко персонаж будет прыгать (приложенная сила). Итак, я поменял 700f на 5f. Я ожидал, что персонаж совершит действительно небольшой прыжок, но этого не произошло. Он прыгнул на той же высоте, что и 700f.
public float jumpForce = 700f;
Поиграв с кодом, я смог получить ожидаемый результат, удалив «public» рядом с jumpForce. Другими способами исправить это было установить его как частный или статический. Помнится, у меня была аналогичная проблема при создании виджета температуры в QT Creator. Мне пришлось сделать переменную статической, иначе она не вернется к значению по умолчанию после преобразования C в F, но я точно не помню, почему.
Может ли кто-нибудь объяснить, почему «общедоступный» не работает и почему частный/статический/ничего может? Какое лучшее/эффективное решение этой проблемы? Большое спасибо.