字符控制器对于C#需要transform.translate来碰撞,而不是传送

时间:2016-02-18 19:55:05

标签: c# unity3d

我对代码比较陌生,我知道一些基础知识,但我的知识有限,所以如果不是很难解释,请告诉我你的答案为什么我想学习而不是仅仅给予答案!

此代码是我正在制作的游戏的基本控件。我将解释游戏的前提,这样你就能更好地掌握我的意图。

游戏将重点关注迷宫的完成,但是移动仅限于能够前进和右移。你可能永远不会掉头,向左走或向后走。

使用我当前的代码,可能(非常容易)可以翻译整个迷宫并且墙壁的碰撞器不适用,因为它是翻译,据我所知,它基本上是“传送”它。

我查看了类似的主题和讨论,但我无法找到解决碰撞器这类问题的任何答案。

当物体与迷宫中的“墙壁”发生碰撞时,我希望将物体重置为原始位置,或者至少死掉,我不确定这是否会影响给出的答案,但只是请记住这一点,谢谢!

using UnityEngine;
using System.Collections;

public class Movement_Script : MonoBehaviour {

        public float playerspeed = 1;
        void Update () {

        if(Input.GetKeyDown("up"))
        {
            transform.Translate(Vector3.up * 1);
        }       
        if(Input.GetKeyDown("right"))
        {
            transform.Translate(Vector3.right * 1);
            transform.Rotate(Time.deltaTime,0 ,-90);    
        }
    }
}

1 个答案:

答案 0 :(得分:0)

当你控制变换时,你正在告诉"把它放在那里"。

所以当你这样做时:

 transform.Translate(Vector3.up * 1); // multiplying by one is useless

你告诉你将对象从当前位置移位0,1,0。这与任何环境无关。您仍然可以通过引擎解决碰撞,您必须自己动手。

Unity提出了一个随时可用的解决方案,其中包含角色控制器组件。它与您在代码中执行的操作相同,但也会执行一系列冲突检查并解决它们。最新版本实际上是使用刚体进行更加物理化的方法。

http://docs.unity3d.com/Manual/class-CharacterController.html

http://docs.unity3d.com/ScriptReference/CharacterController.Move.html

Move方法是Unity用来处理整个过程的方法。我建议在这里和那里安装一个带有几个盒子的基本四墙房,以便你掌握它。然后,无论是2D还是3D运动,都可以轻松地继续做任何你想做的事。