Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;
public class characterController : MonoBehaviour {
public float maxSpeed = 10f;
public float jumpForce = 700f;
bool facingRight = true;
bool grounded = false;
public Transform groundCheck;
public float groundRadius = 0.2f;
public LayerMask whatIsGround;
public float move;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void FixedUpdate () {
grounded = Physics2D.OverlapCircle (groundCheck.position, groundRadius, whatIsGround);
move = Input.GetAxis ("Horizontal");
}
void Update(){
if (grounded && (Input.GetKeyDown (KeyCode.W)||Input.GetKeyDown (KeyCode.UpArrow))) {
rigidbody2D.AddForce (new Vector2(0f,jumpForce));
}
rigidbody2D.velocity = new Vector2 (move * maxSpeed, rigidbody2D.velocity.y);
if (move > 0 && !facingRight)
Flip ();
else if (move < 0 && facingRight)
Flip ();
if (Input.GetKey(KeyCode.Escape))
{
Application.Quit();
}
if (Input.GetKey(KeyCode.R))
{
Application.LoadLevel(Application.loadedLevel);
}
}
void Flip(){
facingRight = !facingRight;
Vector3 theScale = transform.localScale;
theScale.x *= -1;
transform.localScale = theScale;
}
}
using System.Collections;
public class characterController : MonoBehaviour {
public float maxSpeed = 10f;
public float jumpForce = 700f;
bool facingRight = true;
bool grounded = false;
public Transform groundCheck;
public float groundRadius = 0.2f;
public LayerMask whatIsGround;
public float move;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void FixedUpdate () {
grounded = Physics2D.OverlapCircle (groundCheck.position, groundRadius, whatIsGround);
move = Input.GetAxis ("Horizontal");
}
void Update(){
if (grounded && (Input.GetKeyDown (KeyCode.W)||Input.GetKeyDown (KeyCode.UpArrow))) {
rigidbody2D.AddForce (new Vector2(0f,jumpForce));
}
rigidbody2D.velocity = new Vector2 (move * maxSpeed, rigidbody2D.velocity.y);
if (move > 0 && !facingRight)
Flip ();
else if (move < 0 && facingRight)
Flip ();
if (Input.GetKey(KeyCode.Escape))
{
Application.Quit();
}
if (Input.GetKey(KeyCode.R))
{
Application.LoadLevel(Application.loadedLevel);
}
}
void Flip(){
facingRight = !facingRight;
Vector3 theScale = transform.localScale;
theScale.x *= -1;
transform.localScale = theScale;
}
}
В котором для определения того, что является землёй, используется переменная типа LayerMask. К сожалению, я не нашёл способа с её помощью определять только часть игровых объектов, так что теперь персонаж находясь, например, рядом со стеной, способен бесконечно подниматься вверх, ибо проверка не отличает объект стены от объекта пола. Я думаю, что нужно как то изменить тип переменной, используя теги, но не знаю, как это сделать. Может кто-нибудь подсказать?
И вопрос №2: У меня и пол, и стены состоят из отдельных тайлов, и когда персонаж прыгает рядом со стеной, если удерживать кнопку движения в её направлении, он в ней застревает. Я пытался немного увеличить размер коллайдера тайла - префаба, но это не помогло. Возможно ли как то это исправить, не делая единый коллайдер для всей стены?