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
with rigidbody
Character

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; } } } }