There are 2 objects left without a Rigidbody and the right one with a Rigidbody (is Kinematic = false) through the left one can pass through and the right one can be moved back. How to make the object not move away but not pass through it?

without rigidbody without rigidbody with rigidbody enter image description here Character enter image description here enter image description here enter image description here

Character code

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 answer 1

    First, in the script, replace **transform.position** with **rigidbody.movePosition** (stop passing through the left).

    Secondly, it is possible on the right cube, rigidbody to set the density ( setDensity ) high (will not push the right).