如何制作固定物体

时间:2017-12-02 20:02:12

标签: unity3d

我有2个物体没有Rigidbody而右边是Rigidbody(运动学=假)。我可以通过左边一个和右边一个我可以移动。如何使角色不通过并移动对象?

没有Rigidbody

enter image description here

使用Rigidbody

enter image description here

字符

enter image description here

enter image description here

enter image description here

using System.Collections;
using UnityEngine;

public class Person_controller : MonoBehaviour {
    public float rotationPeriod = 0.3f;
    public float sideLength = 1f;

    bool isRotate = false;
    float directionX = 0;
    float directionZ = 0;

    Vector3 startPos;
    float rotationTime = 0;
    float radius;
    Quaternion fromRotation;
    Quaternion toRotation;

    void Start () {
        radius = sideLength * Mathf.Sqrt (2f) / 2f;
    }

    void Update () {
        float x = 0;
        float y = 0;

        x = Input.GetAxisRaw ("Horizontal");
        if (x == 0) {
            y = Input.GetAxisRaw ("Vertical");
        }


        if ((x != 0 || y != 0) && !isRotate) {
            directionX = y;                                                         
            directionZ = x;                                                             
            startPos = transform.position;                                              
            fromRotation = transform.rotation;                                          
            transform.Rotate (directionZ * 90, 0, directionX * 90,            Space.World);        
            toRotation = transform.rotation;                                            
            transform.rotation = fromRotation;                                          
            rotationTime = 0;       

            isRotate = true;
        }
    }

    void FixedUpdate() {

        if (isRotate) {

            rotationTime += Time.fixedDeltaTime;                                    
            float ratio = Mathf.Lerp(0, 1, rotationTime / rotationPeriod);          


            float thetaRad = Mathf.Lerp(0, Mathf.PI / 2f, ratio);                   
            float distanceX = (-directionX * radius * (Mathf.Cos (45f *    Mathf.Deg2Rad) - Mathf.Cos (45f * Mathf.Deg2Rad + thetaRad)))*sideLength;   
            float distanceY = radius * (Mathf.Sin(45f * Mathf.Deg2Rad + thetaRad) - Mathf.Sin (45f * Mathf.Deg2Rad));                       
            float distanceZ = directionZ * radius * (Mathf.Cos (45f * Mathf.Deg2Rad) - Mathf.Cos (45f * Mathf.Deg2Rad + thetaRad));         
            transform.position = new Vector3(startPos.x + distanceX, startPos.y + distanceY, startPos.z + distanceZ);                       


            transform.rotation = Quaternion.Lerp(fromRotation, toRotation,    ratio);      


            if (ratio == 1) {
                isRotate = false;
                directionX = 0;
                directionZ = 0;
                rotationTime = 0;
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

如果启用了isKinematic,则力,碰撞或关节不再影响刚体。通过改变transform.position

,刚体将完全控制动画或脚本控制

Title Chart of collision on the bottom of this page