Не меняется bool значение при достижении y позиции
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BossPatrol : MonoBehaviour
{
public GameObject UpBorder;
public GameObject DownBorder;
public Rigidbody2D Body;
public bool isUpDirection;
public float speed;
void Update()
{
if (isUpDirection)
{
Body.velocity = Vector2.up * speed;
if (transform.position.y > UpBorder.transform.position.y)
isUpDirection = !isUpDirection;
}
else
{
Body.velocity = Vector2.down * speed;
if (transform.position.y < DownBorder.transform.position.y)
isUpDirection = !isUpDirection;
}
}
}
Ответы (1 шт):
Автор решения: Yaroslav
→ Ссылка
Чую, что проблема не скрипте, а в том, что летя в верх или в низ, он упирается в потолок или пол и не может достигнуть целевой высоты.
Лучше так:
[DisallowMultipleComponent]
// обязательные компоненты
[RequireComponent(typeof(Collider))]
[RequireComponent(typeof(Rigidbody))]
public class BossPatrol : MonoBehaviour {
// SerializeField - отображает в инспекторе, как c public полями
[SerializeField] private float _speed = 3f;
private Rigidbody2D _body;
private Vector2 _moveVector = new Vector2(0, 1);
private void Awake () {
_body = GetComponent<Rigidbody2D>();
}
// у физики тел своя частота обновления не привязанная к кадрам, поэтому FixedUpdate
private void FixedUpdate () {
_body.velocity = _moveVector*_speed;
}
private void OnCollisionEnter (Collision collision) {
BossPatrolVelocity BPV = collision.gameObject.GetComponent<BossPatrolVelocity>();
if (BPV != null)
_moveVector = BPV.MoveVector;
}
}
Скрипт для потолка МoveVector:(0, -1) и пола (0, 1):
[DisallowMultipleComponent]
[RequireComponent(typeof(Collider))]
public class BossPatrolVelocity : MonoBehaviour {
public Vector2 МoveVector;
}