Witam,
Na wstępie chciałbym oznajmić, iż jestem bardzo początkującym programistą w C# / Unity 2D.
Tworzę moją pierwszą grę (edukacyjną), gdzie chcę użyć klasyczne elementy platformówki. Opieram się głównie na poradnikach angielsko języcznych i czasami po prostu używam cudzego kodu do wykonania jakiegoś elementu / akcji etc. Zawsze straram się jednak zrozumieć kod i sprawdzajam co dane linie kodu robią.
Chciałbym zapytać, jak sprawić, aby postać ruszała się horyzontalnie (tylko w lewo i prawo) za graczem, jeżeli jest w zasięgu, oraz gdy gracz opuści go, AI wraca na swoje miejsce. Nie ukrywam, iż posłużyłem się kodem z internetu, ponieważ na moim obecnym poziomie raczej nie dałbym napisać tego skryptu własnymi rękoma. Przedstawiam kod: (Podkreślam, nie jest moim własnym skryptem)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Enemy : MonoBehaviour
{
public Transform player; // changed this to Transform
public float detectRange = 10; // this gets multiplied by itself to compare to a sqr magnitude check (instead of distance)
public bool inRange = false;
public float moveSpeed = 2f; // you can adjust this, of course.
Rigidbody2D rb; // cached the reference, so you can avoid GetComponent calls in Update/FixedUpdate.
void Awake()
{
rb = GetComponent<Rigidbody2D>();
detectRange *= detectRange;
}
void Update()
{
// a little cheaper than 'distance'.. deleted the code to create a position from the player values.
float distsqr = (player.position - transform.position).sqrMagnitude;
if (distsqr <= detectRange)
{
inRange = true;
// get a velocity based on the normalized direction, multiplied by move speed.
Vector2 velocity = (player.transform.position - transform.position).normalized * moveSpeed;
rb.velocity = velocity;
}
}
}
Zatem jeszcze raz zapytam, jak mógłbym dodać opcję poruszania się tylko w lewo i w prawo oraz po odejściu gracza po za zasięg, AI wraca do swojego "pierwotnego" miejsca?
Naprawdę dziękuję z góry za pomoc .