【发布时间】:2021-10-30 10:06:58
【问题描述】:
对于一个愚蠢的问题,我很抱歉,因为我是 Unity 的新手。
我一直在努力解决一个我无法找到答案并且并不真正理解的问题。 这是我记录的问题:https://youtu.be/C7Bfq--56h8
这是我的代码:
蛇运动:
void Start()
{
}
private void Awake()
{
if(!rigidbody) rigidbody = GetComponent<Rigidbody2D>();
}
// Update is called once per frame
void Update ()
{
if(Input.GetKey(KeyCode.A))
{
angle += Time.deltaTime * rotationSpeed;
}
if(Input.GetKey(KeyCode.D))
{
angle -= Time.deltaTime * rotationSpeed;
}
PositionHistory.Insert(0, transform.position);
int index = 0;
foreach (var body in BodyParts) {
Vector3 point = PositionHistory[Mathf.Min(index * Gap, PositionHistory.Count - 1)];
Vector3 moveDirection = point - body.transform.position;
body.transform.position += moveDirection * BodySpeed * Time.deltaTime;
Quaternion rotation = Quaternion.LookRotation(body.transform.position - transform.position, transform.TransformDirection(Vector3.up));
body.transform.rotation = new Quaternion(0, 0, rotation.z, rotation.w);
index++;
}
}
private void FixedUpdate()
{
rigidbody.MoveRotation(angle);
rigidbody.velocity = rigidbody.GetRelativeVector(Vector3.right).normalized * speed;
}
private void GrowSnake()
{
StartCoroutine(waiter());
}
private void OnTriggerEnter2D(Collider2D col)
{
if (col.gameObject.layer == 7)
{
GrowSnake();
}
}
IEnumerator waiter()
{
GameObject body = Instantiate(BodyPrefab);
body.SetActive(false);
BodyParts.Add(body);
yield return new WaitForSeconds(0.2f);
body.SetActive(true);
}
}
}
WallTeleportation 代码:
private void OnTriggerEnter2D(Collider2D col) {
if (col.gameObject.layer == 6) {
Debug.Log("GameObject1 collided with " + col.transform.position);
col.transform.position = new Vector3(col.transform.position.x, col.transform.position.y * -1, 0);
}
}
我假设问题出现在这部分:
int index = 0;
foreach (var body in BodyParts) {
Vector3 point = PositionHistory[Mathf.Min(index * Gap, PositionHistory.Count - 1)];
Vector3 moveDirection = point - body.transform.position;
body.transform.position += moveDirection * BodySpeed * Time.deltaTime;
Quaternion rotation = Quaternion.LookRotation(body.transform.position - transform.position, transform.TransformDirection(Vector3.up));
body.transform.rotation = new Quaternion(0, 0, rotation.z, rotation.w);
index++;
}
在过去的整个晚上和现在几个小时里,我一直在为这个问题苦苦挣扎。任何建议都会有所帮助。
先谢谢了!
附: 英语不是我的母语。对错误感到抱歉。
【问题讨论】:
-
我理解的问题是因为头部变形时身体部位正在改变运动方向。
-
请以文字、图片(动画gif?)的形式添加问题描述,以提高此问题的实用性和可发现性
-
Emond,请看这个问题:stackoverflow.com/questions/69786300/…这个基本一样,但是这个问题的第二部分。非常感谢您的建议!!!