我很抱歉可能是一個愚蠢的問題,因為我是 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);
}
}
}
墻傳送代碼:
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 ;
}
在過去的整個晚上和幾個小時內,我一直在為這個問題而苦苦掙扎。任何意見將是有益的。
先謝謝了!
PS 英語不是我的母語。對錯誤表示抱歉。
uj5u.com熱心網友回復:
當頭部傳送并且身體部位試圖去頭部時,身體部位正在改變頭部的方向(更新方向),所以頭部會再次碰撞并再次傳送。PS:英語也不是我的實際語言。
uj5u.com熱心網友回復:
Teloprtation 錯誤是由在另一個門戶的坐標處轉換物件引起的,另一個門戶也這樣做。因此,頭部會不斷地從左向右彈跳。
簡單地添加在這一行:
col.transform.position = new Vector3((col.transform.position.x * -1) 1, col.transform.position.y, 0);
1 或 -1 取決于傳送門的側面
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/344693.html
