• Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
Question by Thor625 · Jun 26, 2013 at 02:53 PM · javascriptmovementplayeraicharactercontroller

Keeping Character From Walking Through Walls

Hello everyone, I have a square character, that walks around the scene. I do not want to use character controller for a number of reasons, also I do not want to use rigidbody. To keep the character from walking through walls I have been using:

 var fwd = transform.TransformDirection (Vector3.forward);
 
 var right = transform.TransformDirection(Vector3.right);
 
 var left = transform.TransformDirection(Vector3.right * -1);
 
 var back = transform.TransformDirection(Vector3.forward * -1);
 
 var down = transform.TransformDirection(Vector3.up * -1);
 
 var up = transform.TransformDirection(Vector3.up);
 
 if (Physics.SphereCast (transform.position, gameObject.width, up, hit, 0.01)) {
 
 MoveUp = false;
 
 }else{
 
 MoveUp=true;
 
 }
 
 if (Physics.SphereCast (transform.position, 1, gameObject.width, hit, 0.01)) {
 
 MoveDown = false;
 
 IsGrounded = true;
 
 }else{
 
 MoveDown = true;
 
 IsGrounded = false;
 
 }
 
 if (Physics.SphereCast (transform.position, 1, gameObject.height, hit, 0.01)) {
 
 MoveForward=false;
 
 }else{
 
 MoveForward=true;
 
 }
 
 if (Physics.SphereCast (transform.position, 1, gameObject.height, hit, 0.01)) {
 
 MoveRight=false;
 
 }else{
 
 MoveRight=true;
 
 }
 
 if (Physics.SphereCast (transform.position, 1, gameObject.height, hit, 0.01)) {
 
 MoveLeft=false;
 
 }else{
 
 MoveLeft=true;
 
 }
 
 if (Physics.SphereCast (transform.position, 1, gameObject.height, hit, 0.01)) {
 
 MoveBack=false;
 
 }else{
 
 MoveBack=true;
 
 }

Suddenly, (I am not exactly sure what) this stopped working. I also tried:

 function OnCollisionEnter(hit : Collision)
 
 {
 
  
 
     if (hit.transform.position.x > transform.position.x) {
 
     MoveRight = false;
 
     
 
     } 
 
     if(hit.transform.position.x < transform.position.x){
 
     MoveRight = false;
 
     
 
     }
 
  
 
     if (hit.transform.position.y > transform.position.y) {
 
     MoveUp = false;
 
     }
 
     if(hit.transform.position.y < transform.position.y){
 
     MoveDown = false;
 
     IsGrounded = true;
 
     }
 
  
 
     if (hit.transform.position.z > transform.position.z) {
 
     MoveForward = false;
 
     }
 
     if(hit.transform.position.z <transform.position.z){
 
     MoveBack = false;
 
     }
 
     }
 
     
 
 function OnCollisionExit(hit:Collision){
 
 if (hit.transform.position.x > transform.position.x) {
 
     MoveRight = true;
 
     
 
     } 
 
     if(hit.transform.position.x < transform.position.x){
 
     MoveRight = true;
 
     }
 
     if (hit.transform.position.y > transform.position.y) {
 
     MoveUp = true;
 
     }
 
     if(hit.transform.position.y < transform.position.y){
 
     MoveDown = true;
 
     IsGrounded = false;
 
     }
 
  
 
     if (hit.transform.position.z > transform.position.z) {
 
     MoveForward = true;
 
     }
 
     if(hit.transform.position.z <transform.position.z){
 
     MoveBack = true;
 
     }
 
 }

Neither of these seem to be working. All help is apprectiated, Thanks,

Thor

Comment

People who like this

0 Show 2
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image Thor625 · Jun 26, 2013 at 07:33 PM 0
Share

I ended up using rigidbody

avatar image Benproductions1 · Jun 27, 2013 at 12:31 PM 0
Share

Just use a character controller. Thats basically everything you got there, already done for you

2 Replies

  • Sort: 
avatar image
Best Answer

Answer by Thor625 · Jun 26, 2013 at 07:56 PM

I actually ended up using rigidbody with this:

 #pragma strict
 var canFly:boolean;
 var speed = 10.0;
 var gravity = 10.0;
 var maxVelocityChange = 10.0;
 var canJump:boolean;
 var jumpHeight = 2.0;
 private var grounded = false;
 var stats:PlayerStats;
 @script RequireComponent(Rigidbody, BoxCollider)
  
 function Awake ()
 {
     
     stats = GetComponent(PlayerStats);
     rigidbody.freezeRotation = true;
     rigidbody.useGravity = false;
 }
  
 function FixedUpdate ()
 {
     jumpHeight = stats.jumpHeight;
     canJump = stats.jump;
     canFly = stats.flight;
     speed = stats.speed;
     if (grounded)
     {
         // Calculate how fast we should be moving
         var targetVelocity = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
         targetVelocity = transform.TransformDirection(targetVelocity);
         targetVelocity *= speed;
  
         // Apply a force that attempts to reach our target velocity
         var velocity = rigidbody.velocity;
         var velocityChange = (targetVelocity - velocity);
         velocityChange.x = Mathf.Clamp(velocityChange.x, -maxVelocityChange, maxVelocityChange);
         velocityChange.z = Mathf.Clamp(velocityChange.z, -maxVelocityChange, maxVelocityChange);
         velocityChange.y = 0;
         rigidbody.AddForce(velocityChange, ForceMode.VelocityChange);
  
         // Jump
         if (canJump && Input.GetButton("Jump"))
         {
             rigidbody.velocity = Vector3(velocity.x, CalculateJumpVerticalSpeed(), velocity.z);
         }
     }
  
     if(canFly == false){
     rigidbody.AddForce(Vector3 (0, -gravity * rigidbody.mass, 0));
      }
     grounded = false;
 }
  
 function OnCollisionStay ()
 {
     grounded = true;    
 }
  
 function CalculateJumpVerticalSpeed ()
 {
     // From the jump height and gravity we deduce the upwards speed 
     // for the character to reach at the apex.
     return Mathf.Sqrt(2 * jumpHeight * gravity);
 }


Comment

People who like this

0 Show 1 · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image Benproductions1 · Jun 27, 2013 at 12:31 PM 0
Share

Please accept this answer then

avatar image

Answer by ishwara_a · Jun 18, 2017 at 04:26 PM

One query (I am new to Unity3D). What are the reasons , not to use standard character controllers ?

Comment

People who like this

0 Show 0 · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

Unity Answers is in Read-Only mode

Unity Answers content will be migrated to a new Community platform and we are aiming to launch a public beta by June 9. Please note, Unity Answers is now in read-only so we can prepare for the final data migration.

For more information and updates, please read our full announcement thread in the Unity Forum.

Follow this Question

Answers Answers and Comments

18 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

Small Project, tutorials/help needed 0 Answers

Glitchy Movement on Slopes using Character Controller 1 Answer

AI movement using Character Controller, turning problem 1 Answer

Make AI move using CharacterController.Move instead of rigidbody.velocity? 3 Answers

Moving Platform and CharacterController.Move not working. The player falls 3 Answers


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges