问题描述
Unity开发VR内容时, 我想创建一个脚本,该脚本在移至Waypoint路线时在最后一个Waypoint处停止, 但是我在C#编码方面具有非常基本的技能,(我尽了最大的努力,但是失败了),所以我想向您寻求帮助...
这是可以追溯到第一个Waypoint的脚本, 请问你能帮帮我吗?? 非常感谢您的帮助。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MoveCtrl : MonoBehavIoUr
{
//이동방식 열거형 변수 선언
public enum MoveType
{
WAY_POINT,LOOK_AT,DAYDREAM
}
//이동방식
public MoveType moveType = MoveType.WAY_POINT;
//이동속도
public float speed = 1.0f;
//회전속도
public float damping = 3.0f;
public int zero = 0;
//모든 웨이포인트를 저장할 배열
public Transform[] points;
//트랜스톰 컴포넌트를 저장할 변수
private Transform tr;
//다음에 이동해야할 위치 인덱스 변수
private int nextIdx = 1;
void Start()
{
//트랜스폼 컴포넌트 추출후 변수 저장
tr = GetComponent<Transform>();
//포인트 게임오브젝트를 검색해 변수에 저장
GameObject WayPointGroup = GameObject.Find("WayPointGroup");
if(WayPointGroup != null)
{
//웨이포인트 하위에 모든 게임 오브젝트 Transfotm 컴포넌트 추출
points = WayPointGroup.GetComponentsInChildren<Transform>();
}
}
// Update is called once per frame
void Update()
{
switch (moveType)
{
case MoveType.WAY_POINT:
MoveWayPoint();
break;
case MoveType.LOOK_AT:
break;
case MoveType.DAYDREAM:
break;
}
}
//웨이포인트 경로로 이동하는 로직
void MoveWayPoint()
{
//현재 위치에서 다음 웨이포인트로 향하는 벡터를 계산
Vector3 direction = points[nextIdx].position - tr.position;
//산출된 벡터의 회전 각도를 쿼터니언 타입으로 산출
Quaternion rot = Quaternion.LookRotation(direction);
//현재 각도에서 회전해야 할 각도까지 부드럽게 회전처리
tr.rotation = Quaternion.Slerp(tr.rotation,rot,Time.deltaTime * damping);
//전진 방향으로 이동처리
tr.Translate(Vector3.forward * Time.deltaTime * speed);
}
void OnTriggerEnter(Collider coll)
{
//웨이포인트 - 포인트 게임 오브텍트 충돌여부 판단
if (coll.CompareTag("WAY_POINT"))
{
//맨 마지막 웨이포인트에 도달했을 때 처음 인덱스로 변경
nextIdx = (++nextIdx >= points.Length) ? 1 : nextIdx;
}
}
}
解决方法
好吧,我不确定此脚本是否是预定义的脚本。
但是问题背后的策略非常简单。
- 创建一个始终包含最后一个航路点的变量
- 编写逻辑以在到达下一个航路点时将其覆盖
- 在到达最后一个航点后也将其设置为null。
- 在设置了航路点时(航路点!= null),然后朝 航路点。
之所以这样描述,是因为有很多方法可以完成此路标系统-发挥创意。
也..
要简化代码,我将使用Vector3.moveTowards()和transform.lookAt()方法。有了这些,您就可以轻松实现目标。
Vector3.MoveTowards()以给定的时间*速度将对象从一个点移动到另一点
transform.LookAt(DestTransform)使此当前“ Transforms”正z轴查看变换的方向。如果这不适合您的需求,请尝试在以后修改变换,而不要进行复杂的旋转操作。