代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class FrogController : MonoBehaviour
{
private float speed;
public Rigidbody2D rb;
public Transform leftpoint, rightpoint;
public float leftx;
public float rightx;
private bool faceLeft;
// Start is called before the first frame update
void Start()
{
faceLeft = true;
speed = 5f;
rb = GetComponent<Rigidbody2D>();
transform.DetachChildren();
leftx = leftpoint.position.x;
rightx = rightpoint.position.x;
Destroy(leftpoint.gameObject);
Destroy(rightpoint.gameObject);
}
// Update is called once per frame
void Update()
{
Movement();
}
private void Movement()
{
if (faceLeft)
{
rb.velocity = new Vector2(-speed, rb.velocity.y);
if (transform.position.x <= leftx)
{
transform.localScale = new Vector3(-1, 1, 1);
faceLeft = false;
}
}
else
{
rb.velocity = new Vector2(speed, rb.velocity.y);
if (transform.position.x >= rightx)
{
transform.localScale = new Vector3(1, 1, 1);
faceLeft = true;
}
}
}
}
原理:
给enemy设置两个空的子对象作为左右移动的极限位置。运行时用变量保存左右对象的x值然后分离子对象并销毁。
图片默认为左,所以当面向左的时候以-speed移动,当enemy的x小于左边极限距离是设置转向(localScale),然后向右同理
知识点:
transform.DetachChildren();
分离对象身上的所有子物体