using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Hero : Unit
{
[SerializeField]
private int lives = 5;
[SerializeField]
private float speed = 3.0F;
[SerializeField]
private float jumpForce = 15.0F;
private bool isGrounded = false;
private Bullet bullet;
private CharState State
{
get { return (CharState)animator.GetInteger("State"); }
set { animator.SetInteger("State", (int) value); }
}
new private Rigidbody2D rigidbody;
private Animator animator;
private SpriteRenderer sprite;
private void Awake()
{
rigidbody = GetComponent<Rigidbody2D>();
animator = GetComponent<Animator>();
sprite = GetComponentInChildren<SpriteRenderer>();
bullet = Resources.Load<Bullet>("Bullet");
}
private void FixedUpdate()
{
CheckGround();
}
private void Update()
{
if (isGrounded) State = CharState.Idle;
if (Input.GetButtonDown("Fire1")) Shoot();
if (Input.GetButton("Horizontal")) Run();
if (isGrounded && Input.GetButtonDown("Jump")) Jump();
}
private void Run()
{
Vector3 direction = transform.right * Input.GetAxis("Horizontal");
transform.position = Vector3.MoveTowards(transform.position, transform.position + direction, speed * Time.deltaTime);
sprite.flipX = direction.x < 0.0F;
if (isGrounded) State = CharState.Run;
}
private void Jump()
{
State = CharState.Jump;
rigidbody.AddForce(transform.up * jumpForce, ForceMode2D.Impulse);
}
private void Shoot()
{
Vector3 position = transform.position;
position.y += 0.8F;
Bullet newBullet = Instantiate(bullet, position, bullet.transform.rotation) as Bullet;
newBullet.Direction = newBullet.transform.right * (sprite.flipX ? -1.0F : 1.0F);
}
private void CheckGround()
{
Collider2D[] colliders = Physics2D.OverlapCircleAll(transform.position, 0.5F);
isGrounded = colliders.Length > 1;
if (!isGrounded) State = CharState.Jump;
}
}
public enum CharState
{
Idle,
Run,
Jump,
}
Где именно ошибка? Внутри класса можно к его private
полям обращаться. Если из других классов, то должно быть public
.
Вот именно что я не знаю где ошибка, сижу весь день, то это меняю, то другое, вообще ничего не получается
Так а в какой строке показывает ошибку?
я делаю на unity, а код пишу в visual studio, редактор не видит ошибок, а unity не дает пройти
Сейчас закину
А, так ошибка похоже о том, что тут
попытка обратиться к полю Direction
, которое видимо не public
в классе Bullet
.
я кажется и так пробовал, сейчас на всякий, проверю
Может я как то не так понял, но не получается
Так а в классе Bullet
что?
так подождите, я могу скинуть еще два скрипта, которые связаны
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Bullet : MonoBehaviour
{
private float speed = 10.0F;
private Vector3 direction;
private Vector3 Direction { set { direction = value; } }
private SpriteRenderer sprite;
private void Awake()
{
sprite = GetComponentInChildren <SpriteRenderer> ();
}
private void start()
{
Destroy(gameObject, 1.4F);
}
private void Update()
{
transform.position = Vector3.MoveTowards(transform.position, transform.position + direction, speed * Time.deltaTime);
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Unit : MonoBehaviour
{
public virtual void ReceiveDamage()
{
Die();
}
public virtual void Die()
{
Destroy(gameObject);
}
}
Так вот об этом и речь.
капец, я так долго мучался, СПАСИБО ВАМ БОЛЬШОЕ!
Прости пожалуйста, что надоедаю, можешь помочь с удалением пулей, а то код я прописал, но он что-то не работает
Может быть из-за опечатки в имени (Start
).